diff options
Diffstat (limited to 'bitbake/lib/bb/fetch2/gitsm.py')
| -rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 69 |
1 files changed, 34 insertions, 35 deletions
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index dbfa3a4f73..35729dbc0f 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
| @@ -152,9 +152,9 @@ class GitSM(Git): | |||
| 152 | if submodules and not os.path.exists(os.path.join(repo_conf, 'modules')): | 152 | if submodules and not os.path.exists(os.path.join(repo_conf, 'modules')): |
| 153 | os.mkdir(os.path.join(repo_conf, 'modules')) | 153 | os.mkdir(os.path.join(repo_conf, 'modules')) |
| 154 | 154 | ||
| 155 | for module in submodules: | 155 | for module, md in submodules.items(): |
| 156 | srcpath = os.path.join(ud.clonedir, 'modules', module) | 156 | srcpath = os.path.join(ud.clonedir, 'modules', md['path']) |
| 157 | modpath = os.path.join(repo_conf, 'modules', module) | 157 | modpath = os.path.join(repo_conf, 'modules', md['path']) |
| 158 | 158 | ||
| 159 | if os.path.exists(srcpath): | 159 | if os.path.exists(srcpath): |
| 160 | if os.path.exists(os.path.join(srcpath, '.git')): | 160 | if os.path.exists(os.path.join(srcpath, '.git')): |
| @@ -187,9 +187,8 @@ class GitSM(Git): | |||
| 187 | # No submodules to update | 187 | # No submodules to update |
| 188 | continue | 188 | continue |
| 189 | 189 | ||
| 190 | submodules = list(self.parse_gitmodules(gitmodules).keys()) | 190 | submodules = self.parse_gitmodules(gitmodules) |
| 191 | 191 | self.copy_submodules(submodules, ud, dest, d) | |
| 192 | self.copy_submodules(submodules, ud, dest, d) | ||
| 193 | 192 | ||
| 194 | def unpack(self, ud, destdir, d): | 193 | def unpack(self, ud, destdir, d): |
| 195 | Git.unpack(self, ud, destdir, d) | 194 | Git.unpack(self, ud, destdir, d) |
| @@ -200,7 +199,7 @@ class GitSM(Git): | |||
| 200 | else: | 199 | else: |
| 201 | repo_conf = os.path.join(ud.destdir, '.git') | 200 | repo_conf = os.path.join(ud.destdir, '.git') |
| 202 | 201 | ||
| 203 | submodules = [] | 202 | update_submodules = False |
| 204 | paths = {} | 203 | paths = {} |
| 205 | uris = {} | 204 | uris = {} |
| 206 | local_paths = {} | 205 | local_paths = {} |
| @@ -211,41 +210,41 @@ class GitSM(Git): | |||
| 211 | # No submodules to update | 210 | # No submodules to update |
| 212 | continue | 211 | continue |
| 213 | 212 | ||
| 214 | for m, md in self.parse_gitmodules(gitmodules).items(): | 213 | submodules = self.parse_gitmodules(gitmodules) |
| 215 | submodules.append(m) | 214 | self.copy_submodules(submodules, ud, ud.destdir, d) |
| 216 | paths[m] = md['path'] | 215 | |
| 217 | uris[m] = md['url'] | 216 | submodules_queue = [(module, os.path.join(repo_conf, 'modules', md['path'])) for module, md in submodules.items()] |
| 217 | while len(submodules_queue) != 0: | ||
| 218 | module, modpath = submodules_queue.pop() | ||
| 218 | 219 | ||
| 219 | self.copy_submodules(submodules, ud, ud.destdir, d) | 220 | # add submodule children recursively |
| 221 | try: | ||
| 222 | gitmodules = runfetchcmd("%s show HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) | ||
| 223 | for m, md in self.parse_gitmodules(gitmodules).items(): | ||
| 224 | submodules_queue.append([m, os.path.join(modpath, 'modules', md['path'])]) | ||
| 225 | except: | ||
| 226 | # no children | ||
| 227 | pass | ||
| 220 | 228 | ||
| 221 | submodules_queue = [(module, os.path.join(repo_conf, 'modules', module)) for module in submodules] | ||
| 222 | while len(submodules_queue) != 0: | ||
| 223 | module, modpath = submodules_queue.pop() | ||
| 224 | 229 | ||
| 225 | # add submodule children recursively | 230 | # There are submodules to update |
| 226 | try: | 231 | update_submodules = True |
| 227 | gitmodules = runfetchcmd("%s show HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) | ||
| 228 | for m, md in self.parse_gitmodules(gitmodules).items(): | ||
| 229 | submodules_queue.append([m, os.path.join(modpath, 'modules', m)]) | ||
| 230 | except: | ||
| 231 | # no children | ||
| 232 | pass | ||
| 233 | 232 | ||
| 234 | # Determine (from the submodule) the correct url to reference | 233 | # Determine (from the submodule) the correct url to reference |
| 235 | try: | 234 | try: |
| 236 | output = runfetchcmd("%(basecmd)s config remote.origin.url" % {'basecmd': ud.basecmd}, d, workdir=modpath) | 235 | output = runfetchcmd("%(basecmd)s config remote.origin.url" % {'basecmd': ud.basecmd}, d, workdir=modpath) |
| 237 | except bb.fetch2.FetchError as e: | 236 | except bb.fetch2.FetchError as e: |
| 238 | # No remote url defined in this submodule | 237 | # No remote url defined in this submodule |
| 239 | continue | 238 | continue |
| 240 | 239 | ||
| 241 | local_paths[module] = output | 240 | local_paths[module] = output |
| 242 | 241 | ||
| 243 | # Setup the local URL properly (like git submodule init or sync would do...) | 242 | # Setup the local URL properly (like git submodule init or sync would do...) |
| 244 | runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.destdir) | 243 | runfetchcmd("%(basecmd)s config submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, 'module': module, 'url' : local_paths[module]}, d, workdir=ud.destdir) |
| 245 | 244 | ||
| 246 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... | 245 | # Ensure the submodule repository is NOT set to bare, since we're checking it out... |
| 247 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=modpath) | 246 | runfetchcmd("%s config core.bare false" % (ud.basecmd), d, quiet=True, workdir=modpath) |
| 248 | 247 | ||
| 249 | if submodules: | 248 | if update_submodules: |
| 250 | # Run submodule update, this sets up the directories -- without touching the config | 249 | # Run submodule update, this sets up the directories -- without touching the config |
| 251 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) | 250 | runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir) |
