summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/fetch2/git.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/fetch2/git.py')
-rw-r--r--bitbake/lib/bb/fetch2/git.py45
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: