diff options
Diffstat (limited to 'bitbake/lib/bb/fetch2/git.py')
-rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index fd8f3fdf4d..1bec60ab71 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
@@ -219,9 +219,8 @@ class Git(FetchMethod): | |||
219 | def need_update(self, ud, d): | 219 | def need_update(self, ud, d): |
220 | if not os.path.exists(ud.clonedir): | 220 | if not os.path.exists(ud.clonedir): |
221 | return True | 221 | return True |
222 | os.chdir(ud.clonedir) | ||
223 | for name in ud.names: | 222 | for name in ud.names: |
224 | if not self._contains_ref(ud, d, name): | 223 | if not self._contains_ref(ud, d, name, ud.clonedir): |
225 | return True | 224 | return True |
226 | if ud.write_tarballs and not os.path.exists(ud.fullmirror): | 225 | if ud.write_tarballs and not os.path.exists(ud.fullmirror): |
227 | return True | 226 | return True |
@@ -242,8 +241,7 @@ class Git(FetchMethod): | |||
242 | # If the checkout doesn't exist and the mirror tarball does, extract it | 241 | # If the checkout doesn't exist and the mirror tarball does, extract it |
243 | if not os.path.exists(ud.clonedir) and os.path.exists(ud.fullmirror): | 242 | if not os.path.exists(ud.clonedir) and os.path.exists(ud.fullmirror): |
244 | bb.utils.mkdirhier(ud.clonedir) | 243 | bb.utils.mkdirhier(ud.clonedir) |
245 | os.chdir(ud.clonedir) | 244 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d, workdir=ud.clonedir) |
246 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d) | ||
247 | 245 | ||
248 | repourl = self._get_repo_url(ud) | 246 | repourl = self._get_repo_url(ud) |
249 | 247 | ||
@@ -258,34 +256,32 @@ class Git(FetchMethod): | |||
258 | progresshandler = GitProgressHandler(d) | 256 | progresshandler = GitProgressHandler(d) |
259 | runfetchcmd(clone_cmd, d, log=progresshandler) | 257 | runfetchcmd(clone_cmd, d, log=progresshandler) |
260 | 258 | ||
261 | os.chdir(ud.clonedir) | ||
262 | # Update the checkout if needed | 259 | # Update the checkout if needed |
263 | needupdate = False | 260 | needupdate = False |
264 | for name in ud.names: | 261 | for name in ud.names: |
265 | if not self._contains_ref(ud, d, name): | 262 | if not self._contains_ref(ud, d, name, ud.clonedir): |
266 | needupdate = True | 263 | needupdate = True |
267 | if needupdate: | 264 | if needupdate: |
268 | try: | 265 | try: |
269 | runfetchcmd("%s remote rm origin" % ud.basecmd, d) | 266 | runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir) |
270 | except bb.fetch2.FetchError: | 267 | except bb.fetch2.FetchError: |
271 | logger.debug(1, "No Origin") | 268 | logger.debug(1, "No Origin") |
272 | 269 | ||
273 | runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d) | 270 | runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir) |
274 | fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl) | 271 | fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl) |
275 | if ud.proto.lower() != 'file': | 272 | if ud.proto.lower() != 'file': |
276 | bb.fetch2.check_network_access(d, fetch_cmd, ud.url) | 273 | bb.fetch2.check_network_access(d, fetch_cmd, ud.url) |
277 | progresshandler = GitProgressHandler(d) | 274 | progresshandler = GitProgressHandler(d) |
278 | runfetchcmd(fetch_cmd, d, log=progresshandler) | 275 | runfetchcmd(fetch_cmd, d, log=progresshandler, workdir=ud.clonedir) |
279 | runfetchcmd("%s prune-packed" % ud.basecmd, d) | 276 | runfetchcmd("%s prune-packed" % ud.basecmd, d, workdir=ud.clonedir) |
280 | runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d) | 277 | runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d, workdir=ud.clonedir) |
281 | try: | 278 | try: |
282 | os.unlink(ud.fullmirror) | 279 | os.unlink(ud.fullmirror) |
283 | except OSError as exc: | 280 | except OSError as exc: |
284 | if exc.errno != errno.ENOENT: | 281 | if exc.errno != errno.ENOENT: |
285 | raise | 282 | raise |
286 | os.chdir(ud.clonedir) | ||
287 | for name in ud.names: | 283 | for name in ud.names: |
288 | if not self._contains_ref(ud, d, name): | 284 | if not self._contains_ref(ud, d, name, ud.clonedir): |
289 | raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) | 285 | raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) |
290 | 286 | ||
291 | def build_mirror_data(self, ud, d): | 287 | def build_mirror_data(self, ud, d): |
@@ -295,10 +291,9 @@ class Git(FetchMethod): | |||
295 | if os.path.islink(ud.fullmirror): | 291 | if os.path.islink(ud.fullmirror): |
296 | os.unlink(ud.fullmirror) | 292 | os.unlink(ud.fullmirror) |
297 | 293 | ||
298 | os.chdir(ud.clonedir) | ||
299 | logger.info("Creating tarball of git repository") | 294 | logger.info("Creating tarball of git repository") |
300 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d) | 295 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d, workdir=ud.clonedir) |
301 | runfetchcmd("touch %s.done" % (ud.fullmirror), d) | 296 | runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=ud.clonedir) |
302 | 297 | ||
303 | def unpack(self, ud, destdir, d): | 298 | def unpack(self, ud, destdir, d): |
304 | """ unpack the downloaded src to destdir""" | 299 | """ unpack the downloaded src to destdir""" |
@@ -321,21 +316,21 @@ class Git(FetchMethod): | |||
321 | cloneflags += " --mirror" | 316 | cloneflags += " --mirror" |
322 | 317 | ||
323 | runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, cloneflags, ud.clonedir, destdir), d) | 318 | runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, cloneflags, ud.clonedir, destdir), d) |
324 | os.chdir(destdir) | ||
325 | repourl = self._get_repo_url(ud) | 319 | repourl = self._get_repo_url(ud) |
326 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d) | 320 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir) |
327 | if not ud.nocheckout: | 321 | if not ud.nocheckout: |
328 | if subdir != "": | 322 | if subdir != "": |
329 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d) | 323 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d, |
330 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d) | 324 | workdir=destdir) |
325 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir) | ||
331 | elif not ud.nobranch: | 326 | elif not ud.nobranch: |
332 | branchname = ud.branches[ud.names[0]] | 327 | branchname = ud.branches[ud.names[0]] |
333 | runfetchcmd("%s checkout -B %s %s" % (ud.basecmd, branchname, \ | 328 | runfetchcmd("%s checkout -B %s %s" % (ud.basecmd, branchname, \ |
334 | ud.revisions[ud.names[0]]), d) | 329 | ud.revisions[ud.names[0]]), d, workdir=destdir) |
335 | runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname, \ | 330 | runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname, \ |
336 | branchname), d) | 331 | branchname), d, workdir=destdir) |
337 | else: | 332 | else: |
338 | runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d) | 333 | runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=destdir) |
339 | 334 | ||
340 | return True | 335 | return True |
341 | 336 | ||
@@ -349,7 +344,7 @@ class Git(FetchMethod): | |||
349 | def supports_srcrev(self): | 344 | def supports_srcrev(self): |
350 | return True | 345 | return True |
351 | 346 | ||
352 | def _contains_ref(self, ud, d, name): | 347 | def _contains_ref(self, ud, d, name, wd): |
353 | cmd = "" | 348 | cmd = "" |
354 | if ud.nobranch: | 349 | if ud.nobranch: |
355 | cmd = "%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % ( | 350 | cmd = "%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % ( |
@@ -358,7 +353,7 @@ class Git(FetchMethod): | |||
358 | cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -l" % ( | 353 | cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -l" % ( |
359 | ud.basecmd, ud.revisions[name], ud.branches[name]) | 354 | ud.basecmd, ud.revisions[name], ud.branches[name]) |
360 | try: | 355 | try: |
361 | output = runfetchcmd(cmd, d, quiet=True) | 356 | output = runfetchcmd(cmd, d, quiet=True, workdir=wd) |
362 | except bb.fetch2.FetchError: | 357 | except bb.fetch2.FetchError: |
363 | return False | 358 | return False |
364 | if len(output.split()) > 1: | 359 | if len(output.split()) > 1: |