From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6626668631260397568 X-Received: by 2002:a19:7510:: with SMTP id y16mr1145lfe.9.1542892729265; Thu, 22 Nov 2018 05:18:49 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a2e:8ec8:: with SMTP id e8-v6ls1234689ljl.5.gmail; Thu, 22 Nov 2018 05:18:48 -0800 (PST) X-Google-Smtp-Source: AFSGD/VNWpUaSF0mrpiTvyXVFst04RYHOj9pNGj3hCJn1Dd4dCkyF4c6MghFYhtwNVMpp1TFLoh2 X-Received: by 2002:a2e:5d0c:: with SMTP id r12-v6mr976752ljb.8.1542892728663; Thu, 22 Nov 2018 05:18:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542892728; cv=none; d=google.com; s=arc-20160816; b=FpctK87Boj8Ax5Yy17pcL8obtwuaNRwYZal9nlLwiBxV0SjiMsy2X7RA2RvooakoZK PKQQfnTURd6P9Pm81d7t4Tl8Pi1HZGYQZYCURki/6HztnmLoTxX9z26tz+0xw+eUy0s5 UNPWugyyWnT1mUYkRBAmQUHAgpKgzubcz9EQEM2TVA9Dnzds9EvI4JVlJdoc4DvASKIn GNrRJxVjrYP57xXrt5Fv6j4txaDOSM+SpfmM4GYV25HwI5oUHbR5UakTNyiRllofD8GH zKa1d1QwzDSJbw5MznqeRjfRAzVjqOePN5ofiq2Y4rDNcyBpegHBkWhKSVorIFtryehi iYww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date; bh=VvR+wk2dl8sIN73uIEatKDOdrti7XNUcR1gHt4cTEuI=; b=Gkel2Tk/PYGN/e2Ii4zScHU7wwOl6KKBTXuUCGRLDssSZ/ztW5ODfmF5wMMO697bLS S97k1oKkTaUgosXqZM6FBvmXmKeVJOilZ7aC8Cp/pq8hTzDx5y9d+jyYUzsGbPN9dqX3 9VJOHoyLc9I4a/UhIpzGA4rbITnj4Vq4JFyXdtoyeP2rQ3YCkBcGe66btwea1bL+T7XW RXiBNpcS+8fxNhk2SVrcZQ3F03bxapDDmaWHCEH7bpdHTuqcQkZmRJU4/Fh+sOQjPWo2 zvEWU4l7qfWOmLZnKQHwpGcWfyZfla4YvXjoIIxXMMUfz/2MpZ+zDH9y7IHmZ5q7ST4h zHsg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=henning.schild@siemens.com Return-Path: Received: from gecko.sbs.de (gecko.sbs.de. [194.138.37.40]) by gmr-mx.google.com with ESMTPS id e17-v6si1075191ljg.5.2018.11.22.05.18.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 22 Nov 2018 05:18:48 -0800 (PST) Received-SPF: pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) client-ip=194.138.37.40; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of henning.schild@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=henning.schild@siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id wAMDIlAj025946 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 22 Nov 2018 14:18:47 +0100 Received: from md1za8fc.ad001.siemens.net ([139.25.69.187]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id wAMDIlNo028932; Thu, 22 Nov 2018 14:18:47 +0100 Date: Thu, 22 Nov 2018 14:18:47 +0100 From: Henning Schild To: Jan Kiszka Cc: isar-users Subject: Re: [PATCH 1/3] bitbake: Update to fixed master revision Message-ID: <20181122141847.48b326a4@md1za8fc.ad001.siemens.net> In-Reply-To: <813c05e6-d680-6ac3-ff1f-41165a908c9f@siemens.com> References: <378881f38c00958d2f388c9c7e5a7f1df8efebd2.1542891520.git.jan.kiszka@siemens.com> <20181122141229.60d1830c@md1za8fc.ad001.siemens.net> <813c05e6-d680-6ac3-ff1f-41165a908c9f@siemens.com> X-Mailer: Claws Mail 3.15.0-dirty (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TUID: JskbfHMTko72 Am Thu, 22 Nov 2018 14:14:11 +0100 schrieb Jan Kiszka : > On 22.11.18 14:12, Henning Schild wrote: > > I got a report that bitbake 1.40 and this one are affected by a > > "gitsm://" bug. Still waiting for details but this will only fix one > > new bitbake bug. > > Was there a reason to bump, except wanting to stay up to date? > > Broken multiconfig in current next. So far a downstream issue > (jailhouse-images, possibly other multiconfig-using layers), with > patch 3 then also an upstream topic. But patch 3 is needed for other > reasons (see log). Is that the answer to 1.37->1.40 or just 1.40 -> this ? > Please report/track the bitbake issue upstream! Will do, i do not even know what the problem is, or if it is known. Henning > Jan > > > > > Henning > > > > Am Thu, 22 Nov 2018 13:58:38 +0100 > > schrieb "[ext] Jan Kiszka" : > > > >> From: Jan Kiszka > >> > >> This primarily pulls in the essential fix f2106a3a7675 for > >> multiconfig setups. > >> > >> Origin: https://github.com/openembedded/bitbake.git > >> Commit: 19dee675bb9ad012d28e1e57a888931355a831cb > >> Author: Richard Purdie > >> Date: Thu Nov 22 11:59:58 2018 +0000 > >> > >> tests/fetch: Update after recent gitsm message changes > >> > >> Signed-off-by: Jan Kiszka > >> --- > >> bitbake/bin/toaster | 4 +- > >> .../bitbake-user-manual-intro.xml | 13 +++- > >> .../bitbake-user-manual-metadata.xml | 31 > >> ++++++++- .../bitbake-user-manual-ref-variables.xml | 59 > >> ++++++++++++++--- .../figures/bb_multiconfig_files.png > >> | Bin 0 -> 19991 bytes > >> bitbake/lib/bb/cooker.py | 9 +-- > >> bitbake/lib/bb/data_smart.py | 9 ++- > >> bitbake/lib/bb/fetch2/__init__.py | 1 + > >> bitbake/lib/bb/fetch2/git.py | 13 ++-- > >> bitbake/lib/bb/fetch2/gitsm.py | 71 > >> ++++++++++----------- > >> bitbake/lib/bb/fetch2/npm.py | 2 +- > >> bitbake/lib/bb/parse/ast.py | 2 +- > >> bitbake/lib/bb/parse/parse_py/BBHandler.py | 2 +- > >> bitbake/lib/bb/server/process.py | 15 +++-- > >> bitbake/lib/bb/siggen.py | 10 +-- > >> bitbake/lib/bb/tests/fetch.py | 5 +- > >> bitbake/lib/bb/utils.py | 31 ++++----- > >> 17 files changed, 181 insertions(+), 96 deletions(-) > >> > >> diff --git a/bitbake/bin/toaster b/bitbake/bin/toaster > >> index 9fffbc6..ecf66fa 100755 > >> --- a/bitbake/bin/toaster > >> +++ b/bitbake/bin/toaster > >> @@ -161,7 +161,9 @@ fi > >> > >> export BBBASEDIR=`dirname $TOASTER`/.. > >> MANAGE="python3 $BBBASEDIR/lib/toaster/manage.py" > >> -OE_ROOT=`dirname $TOASTER`/../.. > >> +if [ -z "$OE_ROOT" ]; then > >> + OE_ROOT=`dirname $TOASTER`/../.. > >> +fi > >> > >> # this is the configuraton file we are using for toaster > >> # we are using the same logic that oe-setup-builddir uses > >> diff --git > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml > >> index 9e2e6b2..f7d312a 100644 --- > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml +++ > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-intro.xml @@ > >> -342,13 +342,14 @@ > >> When you name an append file, you can use the > >> - wildcard character (%) to allow for matching > >> recipe names. > >> + "%" wildcard character to > >> allow for matching > >> + recipe names. > >> For example, suppose you have an append file > >> named as follows: > >> > >> busybox_1.21.%.bbappend > >> > >> - That append file would match any > >> busybox_1.21.x.bb > >> + That append file would match any > >> busybox_1.21.x.bb > >> version of the recipe. So, the append file would match the > >> following recipe names: > >> @@ -356,6 +357,14 @@ > >> busybox_1.21.2.bb > >> busybox_1.21.3.bb > >> > >> + Important > >> + The use of the "%" > >> character > >> + is limited in that it only works directly in > >> front of the > >> + .bbappend portion of the > >> append file's > >> + name. > >> + You cannot use the wildcard character in any > >> other > >> + location of the name. > >> + > >> If the busybox recipe was > >> updated to busybox_1.3.0.bb, the append name > >> would not match. > >> diff --git > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml > >> index fc55ef6..2490f6e 100644 --- > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml > >> +++ > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-metadata.xml > >> @@ -352,8 +352,9 @@ FOO2_remove = "abc def" The > >> variable FOO becomes > >> - " 789 123456 " and FOO2 > >> becomes > >> - " ghi abcdef ". > >> + "  789 123456    " > >> + and FOO2 becomes > >> + "  ghi abcdef    ". > >> > >> > >> > >> @@ -2751,4 +2752,30 @@ > >> > >> > >> > >> + > >> +
> >> + Wildcard Support in Variables > >> + > >> + > >> + Support for wildcard use in variables varies depending > >> on the > >> + context in which it is used. > >> + For example, some variables and file names allow > >> limited use of > >> + wildcards through the "%" and > >> + "*" characters. > >> + Other variables or names support Python's > >> + >> url='https://docs.python.org/3/library/glob.html'>glob > >> + syntax, > >> + >> url='https://docs.python.org/3/library/fnmatch.html#module-fnmatch'>fnmatch > >> + syntax, or > >> + >> url='https://docs.python.org/3/library/re.html#re'>Regular > >> Expression (re) > >> + syntax. > >> + > >> + > >> + > >> + For variables that have wildcard suport, the > >> + documentation describes which form of wildcard, its > >> + use, and its limitations. > >> + > >> +
> >> + > >> > >> diff --git > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml > >> index c327af5..a84b2bc 100644 --- > >> a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml > >> +++ > >> b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.xml > >> @@ -115,7 +115,8 @@ is either not set or set to "0". > >> > >> - Limited support for wildcard matching > >> against the > >> + Limited support for the > >> "*" > >> + wildcard character for matching > >> against the beginning of host names exists. > >> For example, the following setting > >> matches git.gnu.org, > >> @@ -124,6 +125,20 @@ > >> > >> BB_ALLOWED_NETWORKS = "*.gnu.org" > >> > >> + Important > >> + The use of the > >> "*" > >> + character only works at the > >> beginning of > >> + a host name and it must be > >> isolated from > >> + the remainder of the host name. > >> + You cannot use the wildcard > >> character in any > >> + other location of the name or > >> combined with > >> + the front part of the name. > >> + > >> + For example, > >> + *.foo.bar is > >> supported, > >> + while > >> *aa.foo.bar is not. > >> + > >> + > >> > >> > >> Mirrors not in the host list are > >> skipped and @@ -1082,7 +1097,19 @@ > >> > >> >> id='var-BBFILES'>BBFILES > >> - List of recipe files BitBake uses to build > >> software. > >> + > >> + A space-separated list of recipe files BitBake > >> uses to > >> + build software. > >> + > >> + > >> + > >> + When specifying recipe files, you can pattern > >> match using > >> + Python's > >> + >> url='https://docs.python.org/3/library/glob.html'>glob > >> + syntax. > >> + For details on the syntax, see the > >> documentation by > >> + following the previous link. > >> + > >> > >> > >> > >> @@ -1166,15 +1193,19 @@ > >> match any of the expressions. > >> It is as if BitBake does not see them at all. > >> Consequently, matching files are not parsed > >> or otherwise > >> - used by BitBake. > >> + used by BitBake. > >> + > >> + > >> > >> The values you provide are passed to Python's > >> regular expression compiler. > >> + Consequently, the syntax follows Python's > >> Regular > >> + Expression (re) syntax. > >> The expressions are compared against the full > >> paths to the files. > >> For complete syntax information, see Python's > >> documentation at > >> - >> url='http://docs.python.org/release/2.3/lib/re-syntax.html'>. > >> + >> url='http://docs.python.org/3/library/re.html#re'>. > >> > >> > >> @@ -1933,15 +1964,27 @@ > >> you want to select, and you should set > >> >> linkend='var-PV'>PV accordingly for > >> precedence. > >> - You can use the "%" > >> character as a > >> - wildcard to match any number of characters, > >> which can be > >> - useful when specifying versions that contain > >> long revision > >> - numbers that could potentially change. > >> + > >> + > >> + > >> + The PREFERRED_VERSION > >> variable > >> + supports limited wildcard use through the > >> + "%" character. > >> + You can use the character to match any number > >> of > >> + characters, which can be useful when > >> specifying versions > >> + that contain long revision numbers that > >> potentially change. Here are two examples: > >> > >> PREFERRED_VERSION_python = "2.7.3" > >> PREFERRED_VERSION_linux-yocto = "4.12%" > >> > >> + Important > >> + The use of the "%" > >> character > >> + is limited in that it only works at the > >> end of the > >> + string. > >> + You cannot use the wildcard character in > >> any other > >> + location of the string. > >> + > >> > >> > >> > >> diff --git > >> a/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png > >> b/bitbake/doc/bitbake-user-manual/figures/bb_multiconfig_files.png > >> index > >> e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..041f06403b4cfc7cf7939ce44849d022d7b1337e > >> 100644 GIT binary patch literal 19991 > >> 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 > >> z >> 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 > >> H{!jh|Ff{m- > >> > >> literal 0 > >> HcmV?d00001 > >> > >> diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py > >> index 71a0eba..16681ba 100644 > >> --- a/bitbake/lib/bb/cooker.py > >> +++ b/bitbake/lib/bb/cooker.py > >> @@ -609,14 +609,7 @@ class BBCooker: > >> k2 = k.split(":do_") > >> k = k2[0] > >> ktask = k2[1] > >> - if mc: > >> - # Provider might be from another mc > >> - for mcavailable in self.multiconfigs: > >> - # The first element is empty > >> - if mcavailable: > >> - > >> taskdata[mcavailable].add_provider(localdata[mcavailable], > >> self.recipecaches[mcavailable], k) > >> - else: > >> - taskdata[mc].add_provider(localdata[mc], > >> self.recipecaches[mc], k) > >> + taskdata[mc].add_provider(localdata[mc], > >> self.recipecaches[mc], k) current += 1 > >> if not ktask.startswith("do_"): > >> ktask = "do_%s" % ktask > >> diff --git a/bitbake/lib/bb/data_smart.py > >> b/bitbake/lib/bb/data_smart.py index 6b94fc4..67af380 100644 > >> --- a/bitbake/lib/bb/data_smart.py > >> +++ b/bitbake/lib/bb/data_smart.py > >> @@ -122,7 +122,11 @@ class VariableParse: > >> connector = self.d["_remote_data"] > >> return connector.expandPythonRef(self.varname, > >> code, self.d) > >> - codeobj = compile(code.strip(), self.varname or > >> "", "eval") > >> + if self.varname: > >> + varname = 'Var <%s>' % self.varname > >> + else: > >> + varname = '' > >> + codeobj = compile(code.strip(), varname, "eval") > >> > >> parser = bb.codeparser.PythonParser(self.varname, > >> logger) parser.parse_python(code) > >> @@ -427,7 +431,8 @@ class DataSmart(MutableMapping): > >> except bb.parse.SkipRecipe: > >> raise > >> except Exception as exc: > >> - raise ExpansionError(varname, s, exc) from exc > >> + tb = sys.exc_info()[2] > >> + raise ExpansionError(varname, s, > >> exc).with_traceback(tb) from exc > >> varparse.value = s > >> > >> diff --git a/bitbake/lib/bb/fetch2/__init__.py > >> b/bitbake/lib/bb/fetch2/__init__.py index 2b62b41..572b71a 100644 > >> --- a/bitbake/lib/bb/fetch2/__init__.py > >> +++ b/bitbake/lib/bb/fetch2/__init__.py > >> @@ -827,6 +827,7 @@ def runfetchcmd(cmd, d, quiet=False, > >> cleanup=None, log=None, workdir=None): 'NO_PROXY', 'no_proxy', > >> 'ALL_PROXY', 'all_proxy', > >> 'GIT_PROXY_COMMAND', > >> + 'GIT_SSH', > >> 'GIT_SSL_CAINFO', > >> 'GIT_SMART_HTTP', > >> 'SSH_AUTH_SOCK', 'SSH_AGENT_PID', > >> diff --git a/bitbake/lib/bb/fetch2/git.py > >> b/bitbake/lib/bb/fetch2/git.py index 15858a6..59a2ee8 100644 > >> --- a/bitbake/lib/bb/fetch2/git.py > >> +++ b/bitbake/lib/bb/fetch2/git.py > >> @@ -488,12 +488,15 @@ class Git(FetchMethod): > >> source_error.append("clone directory not > >> available or not up to date: " + ud.clonedir) > >> if not source_found: > >> - if ud.shallow and os.path.exists(ud.fullshallow): > >> - bb.utils.mkdirhier(destdir) > >> - runfetchcmd("tar -xzf %s" % ud.fullshallow, d, > >> workdir=destdir) > >> - source_found = True > >> + if ud.shallow: > >> + if os.path.exists(ud.fullshallow): > >> + bb.utils.mkdirhier(destdir) > >> + runfetchcmd("tar -xzf %s" % ud.fullshallow, d, > >> workdir=destdir) > >> + source_found = True > >> + else: > >> + source_error.append("shallow clone not > >> available: " + ud.fullshallow) else: > >> - source_error.append("shallow clone not enabled or > >> not available: " + ud.fullshallow) > >> + source_error.append("shallow clone not enabled") > >> > >> if not source_found: > >> raise bb.fetch2.UnpackError("No up to date source > >> found: " + "; ".join(source_error), ud.url) diff --git > >> a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py > >> index 0a982da..35729db 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py > >> +++ b/bitbake/lib/bb/fetch2/gitsm.py > >> @@ -92,7 +92,7 @@ class GitSM(Git): > >> url = uris[module].replace('%s:' % proto, 'gitsm:', > >> 1) url += ';protocol=%s' % proto > >> url += ";name=%s" % module > >> - url += ";bareclone=1;nocheckout=1" > >> + url += ";bareclone=1;nocheckout=1;nobranch=1" > >> > >> ld = d.createCopy() > >> # Not necessary to set SRC_URI, since we're passing > >> the URI to @@ -152,9 +152,9 @@ class GitSM(Git): > >> if submodules and not > >> os.path.exists(os.path.join(repo_conf, 'modules')): > >> os.mkdir(os.path.join(repo_conf, 'modules')) > >> - for module in submodules: > >> - srcpath = os.path.join(ud.clonedir, 'modules', module) > >> - modpath = os.path.join(repo_conf, 'modules', module) > >> + for module, md in submodules.items(): > >> + srcpath = os.path.join(ud.clonedir, 'modules', > >> md['path']) > >> + modpath = os.path.join(repo_conf, 'modules', > >> md['path']) > >> if os.path.exists(srcpath): > >> if os.path.exists(os.path.join(srcpath, '.git')): > >> @@ -187,9 +187,8 @@ class GitSM(Git): > >> # No submodules to update > >> continue > >> > >> - submodules = > >> list(self.parse_gitmodules(gitmodules).keys()) - > >> - self.copy_submodules(submodules, ud, dest, d) > >> + submodules = self.parse_gitmodules(gitmodules) > >> + self.copy_submodules(submodules, ud, dest, d) > >> > >> def unpack(self, ud, destdir, d): > >> Git.unpack(self, ud, destdir, d) > >> @@ -200,7 +199,7 @@ class GitSM(Git): > >> else: > >> repo_conf = os.path.join(ud.destdir, '.git') > >> > >> - submodules = [] > >> + update_submodules = False > >> paths = {} > >> uris = {} > >> local_paths = {} > >> @@ -211,41 +210,41 @@ class GitSM(Git): > >> # No submodules to update > >> continue > >> > >> - for m, md in > >> self.parse_gitmodules(gitmodules).items(): > >> - submodules.append(m) > >> - paths[m] = md['path'] > >> - uris[m] = md['url'] > >> + submodules = self.parse_gitmodules(gitmodules) > >> + self.copy_submodules(submodules, ud, ud.destdir, d) > >> + > >> + submodules_queue = [(module, os.path.join(repo_conf, > >> 'modules', md['path'])) for module, md in submodules.items()] > >> + while len(submodules_queue) != 0: > >> + module, modpath = submodules_queue.pop() > >> > >> - self.copy_submodules(submodules, ud, ud.destdir, d) > >> + # add submodule children recursively > >> + try: > >> + gitmodules = runfetchcmd("%s show > >> HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) > >> + for m, md in > >> self.parse_gitmodules(gitmodules).items(): > >> + submodules_queue.append([m, > >> os.path.join(modpath, 'modules', md['path'])]) > >> + except: > >> + # no children > >> + pass > >> > >> - submodules_queue = [(module, os.path.join(repo_conf, > >> 'modules', module)) for module in submodules] > >> - while len(submodules_queue) != 0: > >> - module, modpath = submodules_queue.pop() > >> > >> - # add submodule children recursively > >> - try: > >> - gitmodules = runfetchcmd("%s show > >> HEAD:.gitmodules" % (ud.basecmd), d, quiet=True, workdir=modpath) > >> - for m, md in > >> self.parse_gitmodules(gitmodules).items(): > >> - submodules_queue.append([m, > >> os.path.join(modpath, 'modules', m)]) > >> - except: > >> - # no children > >> - pass > >> + # There are submodules to update > >> + update_submodules = True > >> > >> - # Determine (from the submodule) the correct url to > >> reference > >> - try: > >> - output = runfetchcmd("%(basecmd)s config > >> remote.origin.url" % {'basecmd': ud.basecmd}, d, workdir=modpath) > >> - except bb.fetch2.FetchError as e: > >> - # No remote url defined in this submodule > >> - continue > >> + # Determine (from the submodule) the correct url > >> to reference > >> + try: > >> + output = runfetchcmd("%(basecmd)s config > >> remote.origin.url" % {'basecmd': ud.basecmd}, d, workdir=modpath) > >> + except bb.fetch2.FetchError as e: > >> + # No remote url defined in this submodule > >> + continue > >> > >> - local_paths[module] = output > >> + local_paths[module] = output > >> > >> - # Setup the local URL properly (like git submodule > >> init or sync would do...) > >> - runfetchcmd("%(basecmd)s config > >> submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, > >> 'module': module, 'url' : local_paths[module]}, d, > >> workdir=ud.destdir) > >> + # Setup the local URL properly (like git submodule > >> init or sync would do...) > >> + runfetchcmd("%(basecmd)s config > >> submodule.%(module)s.url %(url)s" % {'basecmd': ud.basecmd, > >> 'module': module, 'url' : local_paths[module]}, d, > >> workdir=ud.destdir) > >> - # Ensure the submodule repository is NOT set to bare, > >> since we're checking it out... > >> - runfetchcmd("%s config core.bare false" % > >> (ud.basecmd), d, quiet=True, workdir=modpath) > >> + # Ensure the submodule repository is NOT set to > >> bare, since we're checking it out... > >> + runfetchcmd("%s config core.bare false" % > >> (ud.basecmd), d, quiet=True, workdir=modpath) > >> - if submodules: > >> + if update_submodules: > >> # Run submodule update, this sets up the directories > >> -- without touching the config runfetchcmd("%s submodule update > >> --recursive --no-fetch" % (ud.basecmd), d, quiet=True, > >> workdir=ud.destdir) diff --git a/bitbake/lib/bb/fetch2/npm.py > >> b/bitbake/lib/bb/fetch2/npm.py index 408dfc3..65bf5a3 100644 --- > >> a/bitbake/lib/bb/fetch2/npm.py +++ b/bitbake/lib/bb/fetch2/npm.py > >> @@ -226,7 +226,7 @@ class Npm(FetchMethod): > >> self._getshrinkeddependencies(obj, > >> data['dependencies'][obj], data['dependencies'][obj]['version'], d, > >> ud, lockdown, manifest, False) return outputurl = "invalid" > >> - if ('resolved' not in data) or (not > >> data['resolved'].startswith('http')): > >> + if ('resolved' not in data) or (not > >> data['resolved'].startswith('http://') and not > >> data['resolved'].startswith('https://')): # will be the case for > >> ${PN} fetchcmd = "npm view %s@%s dist.tarball --registry %s" % > >> (pkg, version, ud.registry) logger.debug(2, "Found this matching > >> URL: %s" % str(fetchcmd)) diff --git a/bitbake/lib/bb/parse/ast.py > >> b/bitbake/lib/bb/parse/ast.py index 9d20c32..6d7c80b 100644 --- > >> a/bitbake/lib/bb/parse/ast.py +++ b/bitbake/lib/bb/parse/ast.py > >> @@ -178,7 +178,7 @@ class MethodNode(AstNode): > >> funcname = ("__anon_%s_%s" % (self.lineno, > >> self.filename.translate(MethodNode.tr_tbl))) self.python = True > >> text = "def %s(d):\n" % (funcname) + text > >> - bb.methodpool.insert_method(funcname, text, > >> self.filename, self.lineno - len(self.body)) > >> + bb.methodpool.insert_method(funcname, text, > >> self.filename, self.lineno - len(self.body) - 1) anonfuncs = > >> data.getVar('__BBANONFUNCS', False) or [] > >> anonfuncs.append(funcname) data.setVar('__BBANONFUNCS', anonfuncs) > >> diff --git a/bitbake/lib/bb/parse/parse_py/BBHandler.py > >> b/bitbake/lib/bb/parse/parse_py/BBHandler.py index e5039e3..01fc47e > >> 100644 --- a/bitbake/lib/bb/parse/parse_py/BBHandler.py > >> +++ b/bitbake/lib/bb/parse/parse_py/BBHandler.py > >> @@ -45,7 +45,7 @@ __addtask_regexp__ = > >> re.compile("addtask\s+(?P\w+)\s*((before\s*(?P< > >> __deltask_regexp__ = re.compile("deltask\s+(?P\w+)") > >> __addhandler_regexp__ = re.compile( r"addhandler\s+(.+)" ) > >> __def_regexp__ = re.compile( r"def\s+(\w+).*:" ) > >> -__python_func_regexp__ = re.compile( r"(\s+.*)|(^$)" ) > >> +__python_func_regexp__ = re.compile( r"(\s+.*)|(^$)|(^#)" ) > >> __infunc__ = [] > >> __inpython__ = False > >> diff --git a/bitbake/lib/bb/server/process.py > >> b/bitbake/lib/bb/server/process.py index 38b923f..4e0d9c2 100644 > >> --- a/bitbake/lib/bb/server/process.py > >> +++ b/bitbake/lib/bb/server/process.py > >> @@ -428,7 +428,11 @@ class BitBakeServer(object): > >> bb.error("Last 10 lines of server log for > >> this session (%s):\n%s" % (logfile, "".join(lines[-10:]))) else: > >> bb.error("Server log for this session > >> (%s):\n%s" % (logfile, "".join(lines))) > >> + else: > >> + bb.error("%s doesn't exist" % logfile) > >> + > >> raise SystemExit(1) > >> + > >> ready.close() > >> > >> def _startServer(self): > >> @@ -452,16 +456,15 @@ def connectProcessServer(sockname, > >> featureset): # AF_UNIX has path length issues so chdir here to > >> workaround cwd = os.getcwd() > >> > >> - try: > >> - os.chdir(os.path.dirname(sockname)) > >> - sock.connect(os.path.basename(sockname)) > >> - finally: > >> - os.chdir(cwd) > >> - > >> readfd = writefd = readfd1 = writefd1 = readfd2 = writefd2 = > >> None eq = command_chan_recv = command_chan = None > >> > >> try: > >> + try: > >> + os.chdir(os.path.dirname(sockname)) > >> + sock.connect(os.path.basename(sockname)) > >> + finally: > >> + os.chdir(cwd) > >> > >> # Send an fd for the remote to write events to > >> readfd, writefd = os.pipe() > >> diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py > >> index 03c824e..fdbb2a3 100644 > >> --- a/bitbake/lib/bb/siggen.py > >> +++ b/bitbake/lib/bb/siggen.py > >> @@ -185,7 +185,7 @@ class > >> SignatureGeneratorBasic(SignatureGenerator): if not > >> self.rundep_check(fn, recipename, task, dep, depname, dataCache): > >> continue if dep not in self.taskhash: > >> - bb.fatal("%s is not in taskhash, caller isn't > >> calling in dependency order?", dep) > >> + bb.fatal("%s is not in taskhash, caller isn't > >> calling in dependency order?" % dep) data = data + > >> self.taskhash[dep] self.runtaskdeps[k].append(dep) > >> > >> @@ -342,10 +342,10 @@ def dump_this_task(outfile, d): > >> def init_colors(enable_color): > >> """Initialise colour dict for passing to > >> compare_sigfiles()""" # First set up the colours > >> - colors = {'color_title': '\033[1;37;40m', > >> - 'color_default': '\033[0;37;40m', > >> - 'color_add': '\033[1;32;40m', > >> - 'color_remove': '\033[1;31;40m', > >> + colors = {'color_title': '\033[1m', > >> + 'color_default': '\033[0m', > >> + 'color_add': '\033[0;32m', > >> + 'color_remove': '\033[0;31m', > >> } > >> # Leave all keys present but clear the values > >> if not enable_color: > >> diff --git a/bitbake/lib/bb/tests/fetch.py > >> b/bitbake/lib/bb/tests/fetch.py index 17909ec..6848095 100644 > >> --- a/bitbake/lib/bb/tests/fetch.py > >> +++ b/bitbake/lib/bb/tests/fetch.py > >> @@ -1708,9 +1708,8 @@ class GitShallowTest(FetcherTest): > >> with self.assertRaises(bb.fetch2.UnpackError) as context: > >> fetcher.unpack(self.d.getVar('WORKDIR')) > >> > >> - self.assertTrue("No up to date source found" in > >> context.exception.msg) > >> - self.assertTrue("clone directory not available or not up > >> to date" in context.exception.msg) > >> - self.assertTrue("shallow clone not enabled or not > >> available" in context.exception.msg) > >> + self.assertIn("No up to date source found", > >> context.exception.msg) > >> + self.assertIn("clone directory not available or not up to > >> date", context.exception.msg) > >> @skipIfNoNetwork() > >> def > >> test_that_unpack_does_work_when_using_git_shallow_tarball_but_tarball_is_not_available(self): > >> diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py > >> index 73b6cb4..13bb5f2 100644 --- a/bitbake/lib/bb/utils.py > >> +++ b/bitbake/lib/bb/utils.py > >> @@ -27,7 +27,8 @@ import bb > >> import bb.msg > >> import multiprocessing > >> import fcntl > >> -import imp > >> +import importlib > >> +from importlib import machinery > >> import itertools > >> import subprocess > >> import glob > >> @@ -43,7 +44,7 @@ from contextlib import contextmanager > >> from ctypes import cdll > >> > >> logger = logging.getLogger("BitBake.Util") > >> -python_extensions = [e for e, _, _ in imp.get_suffixes()] > >> +python_extensions = importlib.machinery.all_suffixes() > >> > >> > >> def clean_context(): > >> @@ -68,8 +69,8 @@ class VersionStringException(Exception): > >> > >> def explode_version(s): > >> r = [] > >> - alpha_regexp = re.compile('^([a-zA-Z]+)(.*)$') > >> - numeric_regexp = re.compile('^(\d+)(.*)$') > >> + alpha_regexp = re.compile(r'^([a-zA-Z]+)(.*)$') > >> + numeric_regexp = re.compile(r'^(\d+)(.*)$') > >> while (s != ''): > >> if s[0] in string.digits: > >> m = numeric_regexp.match(s) > >> @@ -317,10 +318,13 @@ def better_compile(text, file, realfile, > >> mode = "exec", lineno = 0): error = [] > >> # split the text into lines again > >> body = text.split('\n') > >> - error.append("Error in compiling python function in %s, > >> line %s:\n" % (realfile, lineno)) > >> + error.append("Error in compiling python function in %s, > >> line %s:\n" % (realfile, e.lineno)) if hasattr(e, "lineno"): > >> error.append("The code lines resulting in this error > >> were:") > >> - error.extend(_print_trace(body, e.lineno)) > >> + # e.lineno: line's position in reaflile > >> + # lineno: function name's "position -1" in realfile > >> + # e.lineno - lineno: line's relative position in > >> function > >> + error.extend(_print_trace(body, e.lineno - lineno)) > >> else: > >> error.append("The function causing this error was:") > >> for line in body: > >> @@ -1157,14 +1161,14 @@ def edit_metadata(meta_lines, variables, > >> varfunc, match_overrides=False): > >> var_res = {} > >> if match_overrides: > >> - override_re = '(_[a-zA-Z0-9-_$(){}]+)?' > >> + override_re = r'(_[a-zA-Z0-9-_$(){}]+)?' > >> else: > >> override_re = '' > >> for var in variables: > >> if var.endswith('()'): > >> - var_res[var] = > >> re.compile('^(%s%s)[ \\t]*\([ \\t]*\)[ \\t]*{' % > >> (var[:-2].rstrip(), override_re)) > >> + var_res[var] = > >> re.compile(r'^(%s%s)[ \\t]*\([ \\t]*\)[ \\t]*{' % > >> (var[:-2].rstrip(), override_re)) else: > >> - var_res[var] = > >> re.compile('^(%s%s)[ \\t]*[?+:.]*=[+.]*[ \\t]*(["\'])' % (var, > >> override_re)) > >> + var_res[var] = > >> re.compile(r'^(%s%s)[ \\t]*[?+:.]*=[+.]*[ \\t]*(["\'])' % (var, > >> override_re)) updated = False > >> varset_start = '' > >> @@ -1544,12 +1548,9 @@ def export_proxies(d): > >> def load_plugins(logger, plugins, pluginpath): > >> def load_plugin(name): > >> logger.debug(1, 'Loading plugin %s' % name) > >> - fp, pathname, description = imp.find_module(name, > >> [pluginpath]) > >> - try: > >> - return imp.load_module(name, fp, pathname, > >> description) > >> - finally: > >> - if fp: > >> - fp.close() > >> + spec = importlib.machinery.PathFinder.find_spec(name, > >> path=[pluginpath] ) > >> + if spec: > >> + return spec.loader.load_module() > >> > >> logger.debug(1, 'Loading plugins from %s...' % pluginpath) > >> >