diff options
Diffstat (limited to 'bitbake/lib')
-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) |