[bitbake-devel] [PATCH v4] fetch/hg: support submodules

Robert Yang liezhi.yang at windriver.com
Mon May 18 08:26:32 UTC 2015


Hello,

This patches breaks the BB_GENERATE_MIRROR_TARBALLS, it doesn't generate
or untar the local tarball any more, the local tarball's mirror doesn't
work any more.

// Robert

On 05/12/2015 11:25 AM, Dan McGregor wrote:
> From: Daniel McGregor <daniel.mcgregor at vecima.com>
>
> Use hg clone and hg pull to copy the source into the build
> directory rather than taring up the cloned repository and
> untarring in the destination.
>
> This allows submodules to be cloned. While here, make the default
> behaviour keep the hg scm data to match the behaviour of the git
> fetcher.
>
> Signed-off-by: Daniel McGregor <daniel.mcgregor at vecima.com>
> ---
>   lib/bb/fetch2/hg.py | 55 +++++++++++++++++++++++++++++++++++------------------
>   1 file changed, 36 insertions(+), 19 deletions(-)
>
> diff --git a/lib/bb/fetch2/hg.py b/lib/bb/fetch2/hg.py
> index 81592f6..6547cca 100644
> --- a/lib/bb/fetch2/hg.py
> +++ b/lib/bb/fetch2/hg.py
> @@ -64,7 +64,9 @@ class Hg(FetchMethod):
>           elif not ud.revision:
>               ud.revision = self.latest_revision(ud, d)
>
> -        ud.localfile = data.expand('%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision), d)
> +        ud.localfile = ud.moddir
> +
> +        ud.basecmd = data.getVar("FETCHCMD_hg", d, True) or "/usr/bin/env hg"
>
>       def need_update(self, ud, d):
>           revTag = ud.parm.get('rev', 'tip')
> @@ -80,8 +82,6 @@ class Hg(FetchMethod):
>           command is "fetch", "update", "info"
>           """
>
> -        basecmd = data.expand('${FETCHCMD_hg}', d)
> -
>           proto = ud.parm.get('protocol', 'http')
>
>           host = ud.host
> @@ -98,7 +98,7 @@ class Hg(FetchMethod):
>                   hgroot = ud.user + "@" + host + ud.path
>
>           if command == "info":
> -            return "%s identify -i %s://%s/%s" % (basecmd, proto, hgroot, ud.module)
> +            return "%s identify -i %s://%s/%s" % (ud.basecmd, proto, hgroot, ud.module)
>
>           options = [];
>
> @@ -111,22 +111,22 @@ class Hg(FetchMethod):
>
>           if command == "fetch":
>               if ud.user and ud.pswd:
> -                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
> +                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" clone %s %s://%s/%s %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options), proto, hgroot, ud.module, ud.module)
>               else:
> -                cmd = "%s clone %s %s://%s/%s %s" % (basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)	
> +                cmd = "%s clone %s %s://%s/%s %s" % (ud.basecmd, " ".join(options), proto, hgroot, ud.module, ud.module)
>           elif command == "pull":
>               # do not pass options list; limiting pull to rev causes the local
>               # repo not to contain it and immediately following "update" command
>               # will crash
>               if ud.user and ud.pswd:
> -                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (basecmd, ud.user, ud.pswd, proto)
> +                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" pull" % (ud.basecmd, ud.user, ud.pswd, proto)
>               else:
> -                cmd = "%s pull" % (basecmd)
> +                cmd = "%s pull" % (ud.basecmd)
>           elif command == "update":
>               if ud.user and ud.pswd:
> -                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (basecmd, ud.user, ud.pswd, proto, " ".join(options))
> +                cmd = "%s --config auth.default.prefix=* --config auth.default.username=%s --config auth.default.password=%s --config \"auth.default.schemes=%s\" update -C %s" % (ud.basecmd, ud.user, ud.pswd, proto, " ".join(options))
>               else:
> -                cmd = "%s update -C %s" % (basecmd, " ".join(options))
> +                cmd = "%s update -C %s" % (ud.basecmd, " ".join(options))
>           else:
>               raise FetchError("Invalid hg command %s" % command, ud.url)
>
> @@ -163,15 +163,6 @@ class Hg(FetchMethod):
>           logger.debug(1, "Running %s", updatecmd)
>           runfetchcmd(updatecmd, d)
>
> -        scmdata = ud.parm.get("scmdata", "")
> -        if scmdata == "keep":
> -            tar_flags = ""
> -        else:
> -            tar_flags = "--exclude '.hg' --exclude '.hgrags'"
> -
> -        os.chdir(ud.pkgdir)
> -        runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.module), d, cleanup = [ud.localpath])
> -
>       def supports_srcrev(self):
>           return True
>
> @@ -191,3 +182,29 @@ class Hg(FetchMethod):
>           Return a unique key for the url
>           """
>           return "hg:" + ud.moddir
> +
> +    def localpath(self, ud, d):
> +        return ud.moddir
> +
> +    def unpack(self, ud, destdir, d):
> +        """
> +        Make a local clone or export for the url
> +        """
> +
> +        revflag = "-r %s" % ud.revision
> +        subdir = ud.parm.get("destsuffix", ud.module)
> +        codir = "%s/%s" % (destdir, subdir)
> +
> +        scmdata = ud.parm.get("scmdata", "")
> +        if scmdata != "nokeep":
> +            if not os.access(os.path.join(codir, '.hg'), os.R_OK):
> +                logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'")
> +                runfetchcmd("%s init %s" % (ud.basecmd, codir), d)
> +            logger.debug(2, "Unpack: updating source in '" + codir + "'")
> +            os.chdir(codir)
> +            runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d)
> +            runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d)
> +        else:
> +            logger.debug(2, "Unpack: extracting source to '" + codir + "'")
> +            os.chdir(ud.moddir)
> +            runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d)
>



More information about the bitbake-devel mailing list