[oe-commits] [openembedded-core] 15/20: archive.bbclass: fix do_ar_original archiving of multiple source repos

git at git.openembedded.org git at git.openembedded.org
Tue Sep 27 08:14:06 UTC 2016


rpurdie pushed a commit to branch master-next
in repository openembedded-core.

commit 5eca111277c4d60cf6d0de3a7d989967b71d7140
Author: Patrick Ohly <patrick.ohly at intel.com>
AuthorDate: Mon Sep 26 11:55:16 2016 +0200

    archive.bbclass: fix do_ar_original archiving of multiple source repos
    
    When a recipe uses more than one source which isn't a plain file (for
    example, multiple git repos), then do_ar_original created the source
    archives using the same filename and thus only archived one source.
    
    The "name" parameter is used as file suffix to create unique names for
    each source, leading to archives following this pattern:
    deploy/${TARGET_SYS}/${PF}/${PF}[-<name>].tar.gz.
    
    The ${PF} part is a bit redundant, which may or may not be
    desirable. The patch is more localized this way (no need to modify
    create_tarball()).
    
    For example, meta-oic's iotivity_1.1.1.bb uses:
    
       url_iotivity = "git://github.com/iotivity/iotivity.git"
       branch_iotivity = "1.1-rel"
       SRC_URI = "${url_iotivity};destsuffix=${S};branch=${branch_iotivity};protocol=http;"
    
       url_tinycbor = "git://github.com/01org/tinycbor.git"
       SRC_URI += "${url_tinycbor};name=tinycbor;destsuffix=${S}/extlibs/tinycbor/tinycbor;protocol=http"
    
       url_hippomocks = "git://github.com/dascandy/hippomocks.git"
       SRC_URI += "${url_hippomocks};name=hippomocks;destsuffix=${S}/extlibs/hippomocks-master;protocol=http"
       SRC_URI += "file://hippomocks_mips_patch"
    
       url_gtest = "http://pkgs.fedoraproject.org/repo/pkgs/gtest/gtest-1.7.0.zip/2d6ec8ccdf5c46b05ba54a9fd1d130d7/gtest-1.7.0.zip"
       SRC_URI += "${url_gtest};name=gtest;subdir=${BP}/extlibs/gtest"
    
       url_sqlite = "http://www.sqlite.org/2015/sqlite-amalgamation-3081101.zip"
       SRC_URI += "${url_sqlite};name=sqlite3;subdir=${BP}/extlibs/sqlite3;unpack=false"
    
    These now get archived in deploy/sources/*/iotivity-1.1.1-r2/ as:
    
    gtest-1.7.0.zip                      iotivity-1.1.1-r2-recipe.tar.gz    sqlite-amalgamation-3081101.zip
    hippomocks_mips_patch                iotivity-1.1.1-r2.tar.gz
    iotivity-1.1.1-r2-hippomocks.tar.gz  iotivity-1.1.1-r2-tinycbor.tar.gz
    
    Signed-off-by: Patrick Ohly <patrick.ohly at intel.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 meta/classes/archiver.bbclass | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/meta/classes/archiver.bbclass b/meta/classes/archiver.bbclass
index 5f9c91d..1d8e863 100644
--- a/meta/classes/archiver.bbclass
+++ b/meta/classes/archiver.bbclass
@@ -151,6 +151,7 @@ python do_ar_original() {
         encoded = bb.fetch2.encodeurl(decoded)
         urls[i] = encoded
     fetch = bb.fetch2.Fetch(urls, d)
+    tarball_suffix = {}
     for url in fetch.urls:
         local = fetch.localpath(url).rstrip("/");
         if os.path.isfile(local):
@@ -158,7 +159,21 @@ python do_ar_original() {
         elif os.path.isdir(local):
             tmpdir = tempfile.mkdtemp(dir=d.getVar('ARCHIVER_WORKDIR', True))
             fetch.unpack(tmpdir, (url,))
-            create_tarball(d, tmpdir + '/.', '', ar_outdir)
+            # To handle recipes with more than one source, we add the "name"
+            # URL parameter as suffix. We treat it as an error when
+            # there's more than one URL without a name, or a name gets reused.
+            # This is an additional safety net, in practice the name has
+            # to be set when using the git fetcher, otherwise SRCREV cannot
+            # be set separately for each URL.
+            params = bb.fetch2.decodeurl(url)[5]
+            name = params.get('name', '')
+            if name in tarball_suffix:
+                if not name:
+                    bb.fatal("Cannot determine archive names for original source because 'name' URL parameter is unset in more than one URL. Add it to at least one of these: %s %s" % (tarball_suffix[name], url))
+                else:
+                    bb.fatal("Cannot determine archive names for original source because 'name=' URL parameter '%s' is used twice. Make it unique in: %s %s" % (tarball_suffix[name], url))
+            tarball_suffix[name] = url
+            create_tarball(d, tmpdir + '/.', name, ar_outdir)
 
     # Emit patch series files for 'original'
     bb.note('Writing patch series files...')

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list