[bitbake-devel] [PATCHv2] s3.py: Add support for fetching source mirrors/minor cleanup
Andre McCurdy
armccurdy at gmail.com
Tue Mar 28 16:30:23 UTC 2017
On Tue, Mar 28, 2017 at 7:04 AM, Elizabeth 'pidge' Flanagan
<pidge at toganlabs.com> wrote:
> This commits main purpose is to add support for fetching source
> mirrors. In the current incarnation:
>
> SOURCE_MIRROR_URL ?= "s3://mybucket/downloads"
>
> will fail for two reasons. First, download doesn't support it,
> but second, without aws included in HOSTTOOLS you'll end up
> with aws not being found by bitbake (for either source mirrors or
> sstate mirrors).
>
> Part of this is fixed with this commit. However, this will still
> fail if HOSTTOOLS doesn't include 'aws' in bitbake.conf. I've another
> commit or two to fix that as well.
>
> I've also DRYed up some of the error handling, removed the hardcoded
> aws and added some logging.
>
> Signed-off-by: Elizabeth 'pidge' Flanagan <pidge at toganlabs.com>
> ---
> lib/bb/fetch2/s3.py | 22 ++++++++++++++++------
> 1 file changed, 16 insertions(+), 6 deletions(-)
>
> diff --git a/lib/bb/fetch2/s3.py b/lib/bb/fetch2/s3.py
> index 27993aa..791f3b2 100644
> --- a/lib/bb/fetch2/s3.py
> +++ b/lib/bb/fetch2/s3.py
> @@ -34,6 +34,7 @@ import urllib.request, urllib.parse, urllib.error
> from bb.fetch2 import FetchMethod
> from bb.fetch2 import FetchError
> from bb.fetch2 import runfetchcmd
> +from bb.fetch2 import logger
>
> class S3(FetchMethod):
> """Class to fetch urls via 'aws s3'"""
> @@ -48,6 +49,8 @@ class S3(FetchMethod):
> return True
>
> def urldata_init(self, ud, d):
> + ud.basecmd = d.getVar("FETCHCMD_s3", True) or "/usr/bin/env aws s3"
> +
> if 'downloadfilename' in ud.parm:
> ud.basename = ud.parm['downloadfilename']
> else:
> @@ -60,8 +63,13 @@ class S3(FetchMethod):
> Fetch urls
> Assumes localpath was called first
> """
> -
> - cmd = 'aws s3 cp s3://%s%s %s' % (ud.host, ud.path, ud.localpath)
> + if 'downloadfilename' in ud.parm:
> + dldir = d.getVar("DL_DIR", True)
> + bb.utils.mkdirhier(os.path.dirname(dldir + os.sep + ud.localfile))
> + cmd = '%s cp s3://%s%s %s%s%s' % (ud.basecmd, ud.host, ud.path, dldir, os.sep, ud.localpath)
> + else:
> + cmd = '%s cp s3://%s%s %s' % (ud.basecmd, ud.host, ud.path, ud.localpath)
> + logger.debug(2, "Fetching %s using command '%s'" % (ud.url, cmd))
The intention is that "downloadfilename" is incorporated into
ud.localfile by urldata_init(). Did you find a case where that doesn't
work?
> bb.fetch2.check_network_access(d, cmd, ud.url)
> runfetchcmd(cmd, d)
>
> @@ -70,11 +78,11 @@ class S3(FetchMethod):
> # tool with a little healthy suspicion).
>
> if not os.path.exists(ud.localpath):
> - raise FetchError("The aws cp command returned success for s3://%s%s but %s doesn't exist?!" % (ud.host, ud.path, ud.localpath))
> + raise FetchError("The command %s returned success but %s doesn't exist?!" % (cmd, ud.localpath))
This seems fairly arbitrary churn...
>
> if os.path.getsize(ud.localpath) == 0:
> os.remove(ud.localpath)
> - raise FetchError("The aws cp command for s3://%s%s resulted in a zero size file?! Deleting and failing since this isn't right." % (ud.host, ud.path))
> + raise FetchError("The command %s resulted in a zero size file?! Deleting and failing since this isn't right." % (cmd))
Ditto.
>
> return True
>
> @@ -83,7 +91,9 @@ class S3(FetchMethod):
> Check the status of a URL
> """
>
> - cmd = 'aws s3 ls s3://%s%s' % (ud.host, ud.path)
> + cmd = '%s ls s3://%s%s' % (ud.basecmd, ud.host, ud.path)
> + logger.debug(2, "Checking %s using command '%s'" % (ud.url, cmd))
runfetchcmd() will output basically the same thing, so this isn't
really required.
> +
> bb.fetch2.check_network_access(d, cmd, ud.url)
> output = runfetchcmd(cmd, d)
>
> @@ -91,6 +101,6 @@ class S3(FetchMethod):
> # is not found, so check output of the command to confirm success.
>
> if not output:
> - raise FetchError("The aws ls command for s3://%s%s gave empty output" % (ud.host, ud.path))
> + raise FetchError("The command %s gave empty output" % (cmd))
More churn for little obvious gain.
>
> return True
> --
> 1.9.1
>
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel
More information about the bitbake-devel
mailing list