Handle git submodules in bundlebuilder

Git submodules are only listed by their root directory in the
output of "git ls-files".  Therefore, we must handle this case
so that the files from the module are included in the install
and dist_xo commands.

To reproduce the issue, you could do something like the following:

    cd pippy
    git clone https://github.com/samdroid-apps/collabwrapper
    git add collabwrapper
    python setup.py install  # or just osbuild run
This commit is contained in:
Sam Parkinson 2016-01-05 21:05:11 +11:00
parent c374b63990
commit 0a50431b98

View File

@ -168,12 +168,15 @@ class Packager(object):
if not os.path.exists(self.config.dist_dir): if not os.path.exists(self.config.dist_dir):
os.mkdir(self.config.dist_dir) os.mkdir(self.config.dist_dir)
def get_files_in_git(self): def get_files_in_git(self, root=None):
if root is None:
root = self.config.source_dir
git_ls = None git_ls = None
try: try:
git_ls = subprocess.Popen(['git', 'ls-files'], git_ls = subprocess.Popen(['git', 'ls-files'],
stdout=subprocess.PIPE, stdout=subprocess.PIPE,
cwd=self.config.source_dir) cwd=root)
except OSError: except OSError:
logging.warn('Packager: git is not installed, ' logging.warn('Packager: git is not installed, '
'fall back to filtered list') 'fall back to filtered list')
@ -196,7 +199,14 @@ class Packager(object):
ignore = True ignore = True
break break
if not ignore: if not ignore:
files.append(line) sub_path = os.path.join(root, line)
if os.path.isdir(sub_path) \
and os.path.isdir(os.path.join(sub_path, '.git')):
sub_list = self.get_files_in_git(sub_path)
for f in sub_list:
files.append(os.path.join(line, f))
else:
files.append(line)
for pattern in IGNORE_FILES: for pattern in IGNORE_FILES:
files = [f for f in files if not fnmatch(f, pattern)] files = [f for f in files if not fnmatch(f, pattern)]