diff options
Diffstat (limited to 'bitbake/lib/bb/fetch')
-rw-r--r-- | bitbake/lib/bb/fetch/__init__.py | 46 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch/git.py | 28 |
2 files changed, 38 insertions, 36 deletions
diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py index 55ffdb84c..5fcb9b83e 100644 --- a/bitbake/lib/bb/fetch/__init__.py +++ b/bitbake/lib/bb/fetch/__init__.py @@ -237,32 +237,14 @@ def go(d, urls = None): for u in urls: ud = urldata[u] m = ud.method - premirror_fetch = True localpath = "" - if ud.localfile: - if not m.try_premirror(u, ud, d): - premirror_fetch = False - # File already present along with md5 stamp file - # Touch md5 file to show activity - try: - os.utime(ud.md5, None) - except: - # Errors aren't fatal here - pass - - lf = bb.utils.lockfile(ud.lockfile) - if not m.try_premirror(u, ud, d): - premirror_fetch = False - # If someone else fetched this before we got the lock, - # notice and don't try again - try: - os.utime(ud.md5, None) - except: - # Errors aren't fatal here - pass + if not ud.localfile: + continue - if premirror_fetch: + lf = bb.utils.lockfile(ud.lockfile) + + if m.try_premirror(u, ud, d): # First try fetching uri, u, from PREMIRRORS mirrors = mirror_from_string(bb.data.getVar('PREMIRRORS', d, True)) localpath = try_mirrors(d, u, mirrors, False, m.forcefetch(u, ud, d)) @@ -282,14 +264,18 @@ def go(d, urls = None): if not localpath or not os.path.exists(localpath): raise FetchError("Unable to fetch URL %s from any source." % u) - if localpath: - ud.localpath = localpath - - if ud.localfile: - if not m.forcefetch(u, ud, d): - Fetch.write_md5sum(u, ud, d) - bb.utils.unlockfile(lf) + ud.localpath = localpath + if os.path.exists(ud.md5): + # Touch the md5 file to show active use of the download + try: + os.utime(ud.md5, None) + except: + # Errors aren't fatal here + pass + else: + Fetch.write_md5sum(u, ud, d) + bb.utils.unlockfile(lf) def checkstatus(d): """ diff --git a/bitbake/lib/bb/fetch/git.py b/bitbake/lib/bb/fetch/git.py index 449f1e4db..33e9a95ba 100644 --- a/bitbake/lib/bb/fetch/git.py +++ b/bitbake/lib/bb/fetch/git.py @@ -88,15 +88,21 @@ class Git(Fetch): def forcefetch(self, url, ud, d): if 'fullclone' in ud.parm: return True - if os.path.exists(self.localpath(url, ud, d)): + if 'noclone' in ud.parm: + return False + if os.path.exists(ud.localpath): return False if not self._contains_ref(ud.tag, d): return True return False def try_premirror(self, u, ud, d): + if 'noclone' in ud.parm: + return False if os.path.exists(ud.clonedir): return False + if os.path.exists(ud.localpath): + return False return True @@ -113,16 +119,25 @@ class Git(Fetch): coname = '%s' % (ud.tag) codir = os.path.join(ud.clonedir, coname) - if not os.path.exists(ud.clonedir): + # If we have no existing clone and no mirror tarball, try and obtain one + if not os.path.exists(ud.clonedir) and not os.path.exists(repofile): try: Fetch.try_mirrors(ud.mirrortarball) - bb.mkdirhier(ud.clonedir) - os.chdir(ud.clonedir) - runfetchcmd("tar -xzf %s" % (repofile), d) except: - runfetchcmd("%s clone -n %s://%s%s%s %s" % (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.clonedir), d) + pass + + # If the checkout doesn't exist and the mirror tarball does, extract it + if not os.path.exists(ud.clonedir) and os.path.exists(repofile): + bb.mkdirhier(ud.clonedir) + os.chdir(ud.clonedir) + runfetchcmd("tar -xzf %s" % (repofile), d) + + # If the repo still doesn't exist, fallback to cloning it + if not os.path.exists(ud.clonedir): + runfetchcmd("%s clone -n %s://%s%s%s %s" % (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.clonedir), d) os.chdir(ud.clonedir) + # Update the checkout if needed if not self._contains_ref(ud.tag, d) or 'fullclone' in ud.parm: # Remove all but the .git directory runfetchcmd("rm * -Rf", d) @@ -131,6 +146,7 @@ class Git(Fetch): runfetchcmd("%s prune-packed" % ud.basecmd, d) runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d) + # Generate a mirror tarball if needed os.chdir(ud.clonedir) mirror_tarballs = data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) if mirror_tarballs != "0" or 'fullclone' in ud.parm: |