diff options
author | Laurent Bonnans <laurent.bonnans@here.com> | 2018-10-01 16:52:14 +0200 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-10-04 14:33:53 +0100 |
commit | 377ed943357b6d47d41d84edbf971741f44affa9 (patch) | |
tree | 46db6326e3ef6209c907c0ee0cc1b5345476f2f9 /lib/bb/fetch2 | |
parent | 3dbc84e9c572f43209b79f3656d7dc35a6d982ba (diff) | |
download | bitbake-377ed943357b6d47d41d84edbf971741f44affa9.tar.gz |
fetch2/gitsm: checkout submodules recursively
The new fetcher did not run 'git submodule update' recursively.
Signed-off-by: Laurent Bonnans <laurent.bonnans@here.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb/fetch2')
-rw-r--r-- | lib/bb/fetch2/gitsm.py | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/lib/bb/fetch2/gitsm.py b/lib/bb/fetch2/gitsm.py index fd5089c07..4d3805a11 100644 --- a/lib/bb/fetch2/gitsm.py +++ b/lib/bb/fetch2/gitsm.py @@ -44,6 +44,22 @@ class GitSM(Git): """ return ud.type in ['gitsm'] + @staticmethod + def parse_gitmodules(gitmodules): + modules = {} + module = "" + for line in gitmodules.splitlines(): + if line.startswith('[submodule'): + module = line.split('"')[1] + modules[module] = {} + elif module and line.strip().startswith('path'): + path = line.split('=')[1].strip() + modules[module]['path'] = path + elif module and line.strip().startswith('url'): + url = line.split('=')[1].strip() + modules[module]['url'] = url + return modules + def update_submodules(self, ud, d): submodules = [] paths = {} @@ -57,17 +73,10 @@ class GitSM(Git): # No submodules to update continue - module = "" - for line in gitmodules.splitlines(): - if line.startswith('[submodule'): - module = line.split('"')[1] - submodules.append(module) - elif module and line.strip().startswith('path'): - path = line.split('=')[1].strip() - paths[module] = path - elif module and line.strip().startswith('url'): - url = line.split('=')[1].strip() - uris[module] = url + for m, md in self.parse_gitmodules(gitmodules).items(): + submodules.append(m) + paths[m] = md['path'] + uris[m] = md['url'] for module in submodules: module_hash = runfetchcmd("%s ls-tree -z -d %s %s" % (ud.basecmd, ud.revisions[name], paths[module]), d, quiet=True, workdir=ud.clonedir) @@ -173,10 +182,7 @@ class GitSM(Git): # No submodules to update continue - for line in gitmodules.splitlines(): - if line.startswith('[submodule'): - module = line.split('"')[1] - submodules.append(module) + submodules = list(self.parse_gitmodules(gitmodules).keys()) self.copy_submodules(submodules, ud, dest, d) @@ -200,23 +206,25 @@ class GitSM(Git): # No submodules to update continue - module = "" - for line in gitmodules.splitlines(): - if line.startswith('[submodule'): - module = line.split('"')[1] - submodules.append(module) - elif module and line.strip().startswith('path'): - path = line.split('=')[1].strip() - paths[module] = path - elif module and line.strip().startswith('url'): - url = line.split('=')[1].strip() - uris[module] = url + for m, md in self.parse_gitmodules(gitmodules).items(): + submodules.append(m) + paths[m] = md['path'] + uris[m] = md['url'] self.copy_submodules(submodules, ud, ud.destdir, d) - for module in submodules: - srcpath = os.path.join(ud.clonedir, 'modules', module) - modpath = os.path.join(repo_conf, 'modules', module) + submodules_queue = [(module, os.path.join(repo_conf, 'modules', module)) for module in submodules] + while len(submodules_queue) != 0: + module, modpath = submodules_queue.pop() + + # add submodule children recursively + try: + gitmodules = runfetchcmd("%s show HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) + for m, md in self.parse_gitmodules(gitmodules).items(): + submodules_queue.append([m, os.path.join(modpath, 'modules', m)]) + except: + # no children + pass # Determine (from the submodule) the correct url to reference try: @@ -235,4 +243,4 @@ class GitSM(Git): if submodules: # Run submodule update, this sets up the directories -- without touching the config - runfetchcmd("%s submodule update --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) + runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) |