diff options
Diffstat (limited to 'lib/bb/fetch/git.py')
-rw-r--r-- | lib/bb/fetch/git.py | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/lib/bb/fetch/git.py b/lib/bb/fetch/git.py index 2b252f388..a2fbd78cb 100644 --- a/lib/bb/fetch/git.py +++ b/lib/bb/fetch/git.py @@ -80,8 +80,33 @@ class Git(Fetch): ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git" + if 'noclone' in ud.parm: + ud.localfile = None + return None + return os.path.join(data.getVar("DL_DIR", d, True), ud.localfile) + def forcefetch(self, url, ud, d): + if 'fullclone' in ud.parm: + return True + 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 + def go(self, loc, ud, d): """Fetch url""" @@ -95,24 +120,37 @@ 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) - # Remove all but the .git directory - if not self._contains_ref(ud.tag, d): + # 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) - runfetchcmd("%s fetch %s://%s%s%s %s" % (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.branch), d) + if 'fullclone' in ud.parm: + runfetchcmd("%s fetch --all" % (ud.basecmd), d) + else: + runfetchcmd("%s fetch %s://%s%s%s %s" % (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.branch), d) runfetchcmd("%s fetch --tags %s://%s%s%s" % (ud.basecmd, ud.proto, username, ud.host, ud.path), d) 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: @@ -166,7 +204,7 @@ class Git(Fetch): """ Return a unique key for the url """ - return "git:" + ud.host + ud.path.replace('/', '.') + return "git:" + ud.host + ud.path.replace('/', '.') + ud.branch def _latest_revision(self, url, ud, d): """ |