[poky] [denzil][PATCH] bitbake: fetch2: Explicitly check for mirror tarballs in mirror handling code

Khem Raj raj.khem at gmail.com
Thu Jun 28 13:48:00 PDT 2012


ignore this was not meant to be sent

On Thu, Jun 28, 2012 at 1:42 PM, Khem Raj <raj.khem at gmail.com> wrote:
> From: Richard Purdie <richard.purdie at linuxfoundation.org>
>
> With support for things like git:// -> git:// urls, we need to be
> more explicity about the mirrortarball check since we need to fall
> through to the following code in other cases.
>
> (From Poky rev: 28e858cd6f7509468ef3e527a86820b9e06044db)
>
> (Bitbake rev: a2459f5ca2f517964287f9a7c666a6856434e631)
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
>
> Conflicts:
>
>        bitbake/lib/bb/fetch2/__init__.py
>
> Signed-off-by: Khem Raj <raj.khem at gmail.com>
> ---
>  bitbake/lib/bb/fetch2/__init__.py |   55 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 55 insertions(+)
>
> diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
> index 414cc2b..f70cb19 100644
> --- a/bitbake/lib/bb/fetch2/__init__.py
> +++ b/bitbake/lib/bb/fetch2/__init__.py
> @@ -446,6 +446,61 @@ def check_network_access(d, info = "", url = None):
>     else:
>         logger.debug(1, "Fetcher accessed the network with the command %s" % info)
>
> +def try_mirror_url(newuri, origud, ud, ld, check = False):
> +    # Return of None or a value means we're finished
> +    # False means try another url
> +    try:
> +        if check:
> +            found = ud.method.checkstatus(newuri, ud, ld)
> +            if found:
> +                return found
> +            return False
> +
> +        os.chdir(ld.getVar("DL_DIR", True))
> +
> +        if not os.path.exists(ud.donestamp) or ud.method.need_update(newuri, ud, ld):
> +            ud.method.download(newuri, ud, ld)
> +            if hasattr(ud.method,"build_mirror_data"):
> +                ud.method.build_mirror_data(newuri, ud, ld)
> +
> +        if not ud.localpath or not os.path.exists(ud.localpath):
> +            return False
> +
> +        if ud.localpath == origud.localpath:
> +            return ud.localpath
> +
> +        # We may be obtaining a mirror tarball which needs further processing by the real fetcher
> +        # If that tarball is a local file:// we need to provide a symlink to it
> +        dldir = ld.getVar("DL_DIR", True)
> +        if origud.mirrortarball and os.path.basename(ud.localpath) == os.path.basename(origud.mirrortarball) \
> +                and os.path.basename(ud.localpath) != os.path.basename(origud.localpath):
> +            open(ud.donestamp, 'w').close()
> +            dest = os.path.join(dldir, os.path.basename(ud.localpath))
> +            if not os.path.exists(dest):
> +                os.symlink(ud.localpath, dest)
> +            return None
> +        # Otherwise the result is a local file:// and we symlink to it
> +        if not os.path.exists(origud.localpath):
> +             os.symlink(ud.localpath, origud.localpath)
> +        update_stamp(newuri, origud, ld)
> +        return ud.localpath
> +
> +    except bb.fetch2.NetworkAccess:
> +        raise
> +
> +    except bb.fetch2.BBFetchException as e:
> +        if isinstance(e, ChecksumError):
> +            logger.warn("Mirror checksum failure for url %s (original url: %s)\nCleaning and trying again." % (newuri, origud.url))
> +            logger.warn(str(e))
> +        else:
> +            logger.debug(1, "Mirror fetch failure for url %s (original url: %s)" % (newuri, origud.url))
> +            logger.debug(1, str(e))
> +        try:
> +            ud.method.clean(ud, ld)
> +        except UnboundLocalError:
> +            pass
> +        return False
> +
>  def try_mirrors(d, origud, mirrors, check = False):
>     """
>     Try to use a mirrored version of the sources.
> --
> 1.7.9.5
>



More information about the poky mailing list