|
@@ -219,9 +219,8 @@ class Git(FetchMethod):
|
|
|
def need_update(self, ud, d):
|
|
|
if not os.path.exists(ud.clonedir):
|
|
|
return True
|
|
|
- os.chdir(ud.clonedir)
|
|
|
for name in ud.names:
|
|
|
- if not self._contains_ref(ud, d, name):
|
|
|
+ if not self._contains_ref(ud, d, name, ud.clonedir):
|
|
|
return True
|
|
|
if ud.write_tarballs and not os.path.exists(ud.fullmirror):
|
|
|
return True
|
|
@@ -242,8 +241,7 @@ class Git(FetchMethod):
|
|
|
# If the checkout doesn't exist and the mirror tarball does, extract it
|
|
|
if not os.path.exists(ud.clonedir) and os.path.exists(ud.fullmirror):
|
|
|
bb.utils.mkdirhier(ud.clonedir)
|
|
|
- os.chdir(ud.clonedir)
|
|
|
- runfetchcmd("tar -xzf %s" % (ud.fullmirror), d)
|
|
|
+ runfetchcmd("tar -xzf %s" % (ud.fullmirror), d, workdir=ud.clonedir)
|
|
|
|
|
|
repourl = self._get_repo_url(ud)
|
|
|
|
|
@@ -258,34 +256,32 @@ class Git(FetchMethod):
|
|
|
progresshandler = GitProgressHandler(d)
|
|
|
runfetchcmd(clone_cmd, d, log=progresshandler)
|
|
|
|
|
|
- os.chdir(ud.clonedir)
|
|
|
# Update the checkout if needed
|
|
|
needupdate = False
|
|
|
for name in ud.names:
|
|
|
- if not self._contains_ref(ud, d, name):
|
|
|
+ if not self._contains_ref(ud, d, name, ud.clonedir):
|
|
|
needupdate = True
|
|
|
if needupdate:
|
|
|
try:
|
|
|
- runfetchcmd("%s remote rm origin" % ud.basecmd, d)
|
|
|
+ runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
|
|
|
except bb.fetch2.FetchError:
|
|
|
logger.debug(1, "No Origin")
|
|
|
|
|
|
- runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d)
|
|
|
+ runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir)
|
|
|
fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl)
|
|
|
if ud.proto.lower() != 'file':
|
|
|
bb.fetch2.check_network_access(d, fetch_cmd, ud.url)
|
|
|
progresshandler = GitProgressHandler(d)
|
|
|
- runfetchcmd(fetch_cmd, d, log=progresshandler)
|
|
|
- runfetchcmd("%s prune-packed" % ud.basecmd, d)
|
|
|
- runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d)
|
|
|
+ runfetchcmd(fetch_cmd, d, log=progresshandler, workdir=ud.clonedir)
|
|
|
+ runfetchcmd("%s prune-packed" % ud.basecmd, d, workdir=ud.clonedir)
|
|
|
+ runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d, workdir=ud.clonedir)
|
|
|
try:
|
|
|
os.unlink(ud.fullmirror)
|
|
|
except OSError as exc:
|
|
|
if exc.errno != errno.ENOENT:
|
|
|
raise
|
|
|
- os.chdir(ud.clonedir)
|
|
|
for name in ud.names:
|
|
|
- if not self._contains_ref(ud, d, name):
|
|
|
+ if not self._contains_ref(ud, d, name, ud.clonedir):
|
|
|
raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name]))
|
|
|
|
|
|
def build_mirror_data(self, ud, d):
|
|
@@ -295,10 +291,9 @@ class Git(FetchMethod):
|
|
|
if os.path.islink(ud.fullmirror):
|
|
|
os.unlink(ud.fullmirror)
|
|
|
|
|
|
- os.chdir(ud.clonedir)
|
|
|
logger.info("Creating tarball of git repository")
|
|
|
- runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d)
|
|
|
- runfetchcmd("touch %s.done" % (ud.fullmirror), d)
|
|
|
+ runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d, workdir=ud.clonedir)
|
|
|
+ runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=ud.clonedir)
|
|
|
|
|
|
def unpack(self, ud, destdir, d):
|
|
|
""" unpack the downloaded src to destdir"""
|
|
@@ -321,21 +316,21 @@ class Git(FetchMethod):
|
|
|
cloneflags += " --mirror"
|
|
|
|
|
|
runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, cloneflags, ud.clonedir, destdir), d)
|
|
|
- os.chdir(destdir)
|
|
|
repourl = self._get_repo_url(ud)
|
|
|
- runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d)
|
|
|
+ runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir)
|
|
|
if not ud.nocheckout:
|
|
|
if subdir != "":
|
|
|
- runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d)
|
|
|
- runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d)
|
|
|
+ runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d,
|
|
|
+ workdir=destdir)
|
|
|
+ runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir)
|
|
|
elif not ud.nobranch:
|
|
|
branchname = ud.branches[ud.names[0]]
|
|
|
runfetchcmd("%s checkout -B %s %s" % (ud.basecmd, branchname, \
|
|
|
- ud.revisions[ud.names[0]]), d)
|
|
|
+ ud.revisions[ud.names[0]]), d, workdir=destdir)
|
|
|
runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname, \
|
|
|
- branchname), d)
|
|
|
+ branchname), d, workdir=destdir)
|
|
|
else:
|
|
|
- runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d)
|
|
|
+ runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=destdir)
|
|
|
|
|
|
return True
|
|
|
|
|
@@ -349,7 +344,7 @@ class Git(FetchMethod):
|
|
|
def supports_srcrev(self):
|
|
|
return True
|
|
|
|
|
|
- def _contains_ref(self, ud, d, name):
|
|
|
+ def _contains_ref(self, ud, d, name, wd):
|
|
|
cmd = ""
|
|
|
if ud.nobranch:
|
|
|
cmd = "%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % (
|
|
@@ -358,7 +353,7 @@ class Git(FetchMethod):
|
|
|
cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -l" % (
|
|
|
ud.basecmd, ud.revisions[name], ud.branches[name])
|
|
|
try:
|
|
|
- output = runfetchcmd(cmd, d, quiet=True)
|
|
|
+ output = runfetchcmd(cmd, d, quiet=True, workdir=wd)
|
|
|
except bb.fetch2.FetchError:
|
|
|
return False
|
|
|
if len(output.split()) > 1:
|