bb.fetch2: Add git unpack

The git download method clones the git repository to the local machine. The unpack process
can be optimised to be a local to local machine clone or a direct readtree operation to the
destination using git.will clone git repo to local, so git unpack can be simplified
to only checkouting the code to the work dir. For fullclone case, we also
need to manually copy all the ref info, which is needed by the later do_kernel_checkout().
Rather than use hardlinks, we reference the repository using alternatives since the
download directory may be on a different filesystem.

[Change to use -s by Richard Purdie]

Signed-off-by: Yu Ke <ke.yu@intel.com>
This commit is contained in:
Yu Ke 2011-01-19 00:22:13 +08:00 committed by Richard Purdie
parent d1ed188123
commit 3a3fc6b071
1 changed files with 25 additions and 0 deletions

View File

@ -194,6 +194,31 @@ class Git(Fetch):
os.chdir(ud.clonedir)
bb.utils.prunedir(codir)
def unpack(self, ud, destdir, d):
""" unpack the downloaded src to destdir"""
subdir = ud.parm.get("subpath", "")
if subdir != "":
readpathspec = ":%s" % (subdir)
else:
readpathspec = ""
destdir = os.path.join(destdir, "git/")
if os.path.exists(destdir):
bb.utils.prunedir(destdir)
if 'fullclone' in ud.parm:
runfetchcmd("git clone -s -n %s %s" % (ud.clonedir, destdir), d)
if os.path.exists("%s/.git/refs/remotes/origin" % ud.clonedir):
runfetchcmd("cp -af %s/.git/refs/remotes/origin/* %s/.git/refs/remotes/origin/" %(ud.clonedir, destdir), d)
if os.path.exists("%s/.git/packed-refs" % ud.clonedir):
runfetchcmd("cp -af %s/.git/packed-refs %s/.git/" %(ud.clonedir, destdir), d)
else:
os.chdir(ud.clonedir)
runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.tag, readpathspec), d)
runfetchcmd("%s checkout-index -q -f --prefix=%s -a" % (ud.basecmd, destdir), d)
return True
def supports_srcrev(self):
return True