2016-03-22 20:00:23 +01:00
|
|
|
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
|
2016-03-22 20:34:17 +01:00
|
|
|
def list_files(targets=[], modified_only=False, exclude=[]):
|
2016-03-22 20:00:23 +01:00
|
|
|
"""
|
|
|
|
List files tracked by git.
|
|
|
|
Returns a list of files which are either in targets or in directories in targets.
|
|
|
|
If targets is [], list of all tracked files in current directory is returned.
|
2016-03-22 20:19:43 +01:00
|
|
|
|
|
|
|
Other arguments:
|
|
|
|
modified_only - Only include files which have been modified.
|
2016-03-22 20:34:17 +01:00
|
|
|
exclude - List of paths to be excluded.
|
2016-03-22 20:00:23 +01:00
|
|
|
"""
|
|
|
|
cmdline = ['git', 'ls-files'] + targets
|
2016-03-22 20:19:43 +01:00
|
|
|
if modified_only:
|
|
|
|
cmdline.append('-m')
|
2016-03-22 20:00:23 +01:00
|
|
|
|
|
|
|
files_gen = (x.strip() for x in subprocess.check_output(cmdline, universal_newlines=True).split('\n'))
|
|
|
|
# throw away empty lines and non-files (like symlinks)
|
|
|
|
files = list(filter(os.path.isfile, files_gen))
|
|
|
|
|
2016-03-22 20:34:17 +01:00
|
|
|
result = []
|
|
|
|
|
|
|
|
for fpath in files:
|
|
|
|
# this will take a long time if exclude is very large
|
|
|
|
in_exclude = False
|
|
|
|
for expath in exclude:
|
|
|
|
expath = expath.rstrip('/')
|
|
|
|
if fpath == expath or fpath.startswith(expath + '/'):
|
|
|
|
in_exclude = True
|
|
|
|
if in_exclude:
|
|
|
|
continue
|
|
|
|
|
|
|
|
result.append(fpath)
|
|
|
|
|
|
|
|
return result
|