* [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications @ 2012-06-21 14:34 Richard Purdie 2012-06-26 17:31 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Martin Jansa 0 siblings, 1 reply; 21+ messages in thread From: Richard Purdie @ 2012-06-21 14:34 UTC (permalink / raw) To: bitbake-devel When writing mirror specifications, the current regexp syntax can be awkward and hard to get it to do what you want. For example, extracting the 'basename' of a repository: PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" can now become: PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" which is much clearer. A MIRRORNAME substitution is also added which contains an encoded form of both host and path. One of the problems with the existing regexp syntax is you couldn't access HOST information from PATH and vice-versa which is an issue this patch also addresses. Tests for the new syntax are also added. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> --- diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 1b99a0f..e6f55f8 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -182,7 +182,7 @@ def encodeurl(decoded): return url -def uri_replace(ud, uri_find, uri_replace, d): +def uri_replace(ud, uri_find, uri_replace, replacements, d): if not ud.url or not uri_find or not uri_replace: logger.error("uri_replace: passed an undefined value, not replacing") return None @@ -213,6 +213,8 @@ def uri_replace(ud, uri_find, uri_replace, d): if not uri_replace_decoded[loc]: result_decoded[loc] = "" else: + for k in replacements: + uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) #bb.note("%s %s %s" % (i, uri_replace_decoded[loc], uri_decoded[loc])) result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) if loc == 2: @@ -485,13 +487,20 @@ def build_mirroruris(origud, mirrors, ld): uris = [] uds = [] + replacements = {} + replacements["TYPE"] = origud.type + replacements["HOST"] = origud.host + replacements["PATH"] = origud.path + replacements["BASENAME"] = origud.path.split("/")[-1] + replacements["MIRRORNAME"] = origud.host.replace(':','.') + origud.path.replace('/', '.') + def adduri(uri, ud, uris, uds): for line in mirrors: try: (find, replace) = line except ValueError: continue - newuri = uri_replace(ud, find, replace, ld) + newuri = uri_replace(ud, find, replace, replacements, ld) if not newuri or newuri in uris or newuri == origud.url: continue uris.append(newuri) diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py index 9961343..1477fab 100644 --- a/bitbake/lib/bb/tests/fetch.py +++ b/bitbake/lib/bb/tests/fetch.py @@ -48,7 +48,14 @@ class FetcherTest(unittest.TestCase): ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://www.apache.org/dist", "http://archive.apache.org/dist") : "http://archive.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://.*/.*", "file:///somepath/downloads/") - : "file:///somepath/downloads/subversion-1.7.1.tar.bz2" + : "file:///somepath/downloads/subversion-1.7.1.tar.bz2", + ("git://git.invalid.infradead.org/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/MIRRORNAME;protocol=http") + : "git://somewhere.org/somedir/git.invalid.infradead.org.foo.mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", + #Renaming files doesn't work #("http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz") : "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz" #("file://sstate-xyz.tgz", "file://.*/.*", "file:///somewhere/1234/sstate-cache") : "file:///somewhere/1234/sstate-cache/sstate-xyz.tgz", @@ -143,8 +150,9 @@ class FetcherTest(unittest.TestCase): for k, v in self.replaceuris.items(): ud = bb.fetch.FetchData(k[0], self.d) ud.setup_localpath(self.d) - newuris = bb.fetch2.uri_replace(ud, k[1], k[2], self.d) - self.assertEqual(newuris, v) + mirrors = bb.fetch2.mirror_from_string("%s %s" % (k[1], k[2])) + newuris, uds = bb.fetch2.build_mirroruris(ud, mirrors, self.d) + self.assertEqual(newuris, [v]) def test_urilist1(self): fetcher = bb.fetch.FetchData("http://downloads.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz", self.d) ^ permalink raw reply related [flat|nested] 21+ messages in thread
* (PRE)MIRRORS doesn't work with https?$:// anymore Was: [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications 2012-06-21 14:34 [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications Richard Purdie @ 2012-06-26 17:31 ` Martin Jansa 0 siblings, 0 replies; 21+ messages in thread From: Martin Jansa @ 2012-06-26 17:31 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core [-- Attachment #1: Type: text/plain, Size: 18172 bytes --] On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > When writing mirror specifications, the current regexp syntax can be awkward > and hard to get it to do what you want. For example, extracting the 'basename' > of a repository: > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > can now become: > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > which is much clearer. A MIRRORNAME substitution is also added which contains > an encoded form of both host and path. One of the problems with the existing > regexp syntax is you couldn't access HOST information from PATH and vice-versa > which is an issue this patch also addresses. One of this fetch2 patches break https?:// in MIRRORS It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ https?$://.*/.* http://sources.openembedded.org/ I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch log shorter) on libcap (which doesn't exist on upstream URL). PREMIRRORS_append () { cvs://.*/.* http://build.shr-project.org/sources/ svn://.*/.* http://build.shr-project.org/sources/ git://.*/.* http://build.shr-project.org/sources/ hg://.*/.* http://build.shr-project.org/sources/ bzr://.*/.* http://build.shr-project.org/sources/ https?$://.*/.* http://build.shr-project.org/sources/ } bitbake d316f28ed725ff40daa8771c1aa224ac46d5b224: DEBUG: Executing python function do_fetch DEBUG: Executing python function base_do_fetch DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['cvs', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['svn', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['git', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['hg', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['bzr', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 returning http://build.shr-project.org/sources/libcap-2.22.tar.bz2 NOTE: fetch http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Python function base_do_fetch finished DEBUG: Python function do_fetch finished bitbake e6ff1d4bab43fdcd8af1230f1d54615f53c1978e DEBUG: Executing python function do_fetch DEBUG: Executing python function base_do_fetch DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['cvs', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['svn', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['git', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['hg', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['bzr', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream NOTE: fetch http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 ...and after trying Upstream and all MIRRORS (none will match) it fails to fetch it.. Removing '$' doesn't work too: PREMIRRORS_append () { https?://.*/.* http://build.shr-project.org/sources/ } DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream NOTE: fetch http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 Using http$ doesn't work too EBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['http$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream And without any regexp with different PREMIRRORS for http and https it also does weird things (looks like trying to resolve returned PREMIRROR again) PREMIRRORS_append () { http://.*/.* http://build.shr-project.org/sources/ https://.*/.* http://build.shr-project.org/https-sources/ } changed libcap SRC_URI to https: -SRC_URI = "${KERNELORG_MIRROR}/linux/libs/security/linux-privs/libcap2/${BPN}-${PV}.tar.bz2" +SRC_URI = "https://foo.org/linux/libs/security/linux-privs/libcap2/${BPN}-${PV}.tar.bz2" DEBUG: Trying PREMIRRORS DEBUG: For url ['https', 'foo.org', '/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['https', 'foo.org', '/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] DEBUG: For url https://foo.org/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 returning http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 DEBUG: For url ['http', 'build.shr-project.org', '/https-sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 returning http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: For url ['http', 'build.shr-project.org', '/sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'build.shr-project.org', '/sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] DEBUG: For url ['http', 'build.shr-project.org', '/https-sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] NOTE: fetch http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Mirror fetch failure for url http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 (original url: https://foo.org/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2) DEBUG: Fetcher failure: Fetch command export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' failed with exit code 8, output: STDOUT: STDERR: http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2: 2012-06-26 19:23:37 ERROR 404: Not Found. NOTE: fetch http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Python function base_do_fetch finished DEBUG: Python function do_fetch finished Cheers, > > Tests for the new syntax are also added. > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > --- > diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py > index 1b99a0f..e6f55f8 100644 > --- a/bitbake/lib/bb/fetch2/__init__.py > +++ b/bitbake/lib/bb/fetch2/__init__.py > @@ -182,7 +182,7 @@ def encodeurl(decoded): > > return url > > -def uri_replace(ud, uri_find, uri_replace, d): > +def uri_replace(ud, uri_find, uri_replace, replacements, d): > if not ud.url or not uri_find or not uri_replace: > logger.error("uri_replace: passed an undefined value, not replacing") > return None > @@ -213,6 +213,8 @@ def uri_replace(ud, uri_find, uri_replace, d): > if not uri_replace_decoded[loc]: > result_decoded[loc] = "" > else: > + for k in replacements: > + uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) > #bb.note("%s %s %s" % (i, uri_replace_decoded[loc], uri_decoded[loc])) > result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) > if loc == 2: > @@ -485,13 +487,20 @@ def build_mirroruris(origud, mirrors, ld): > uris = [] > uds = [] > > + replacements = {} > + replacements["TYPE"] = origud.type > + replacements["HOST"] = origud.host > + replacements["PATH"] = origud.path > + replacements["BASENAME"] = origud.path.split("/")[-1] > + replacements["MIRRORNAME"] = origud.host.replace(':','.') + origud.path.replace('/', '.') > + > def adduri(uri, ud, uris, uds): > for line in mirrors: > try: > (find, replace) = line > except ValueError: > continue > - newuri = uri_replace(ud, find, replace, ld) > + newuri = uri_replace(ud, find, replace, replacements, ld) > if not newuri or newuri in uris or newuri == origud.url: > continue > uris.append(newuri) > diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py > index 9961343..1477fab 100644 > --- a/bitbake/lib/bb/tests/fetch.py > +++ b/bitbake/lib/bb/tests/fetch.py > @@ -48,7 +48,14 @@ class FetcherTest(unittest.TestCase): > ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://www.apache.org/dist", "http://archive.apache.org/dist") > : "http://archive.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", > ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://.*/.*", "file:///somepath/downloads/") > - : "file:///somepath/downloads/subversion-1.7.1.tar.bz2" > + : "file:///somepath/downloads/subversion-1.7.1.tar.bz2", > + ("git://git.invalid.infradead.org/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") > + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") > + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/MIRRORNAME;protocol=http") > + : "git://somewhere.org/somedir/git.invalid.infradead.org.foo.mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + > #Renaming files doesn't work > #("http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz") : "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz" > #("file://sstate-xyz.tgz", "file://.*/.*", "file:///somewhere/1234/sstate-cache") : "file:///somewhere/1234/sstate-cache/sstate-xyz.tgz", > @@ -143,8 +150,9 @@ class FetcherTest(unittest.TestCase): > for k, v in self.replaceuris.items(): > ud = bb.fetch.FetchData(k[0], self.d) > ud.setup_localpath(self.d) > - newuris = bb.fetch2.uri_replace(ud, k[1], k[2], self.d) > - self.assertEqual(newuris, v) > + mirrors = bb.fetch2.mirror_from_string("%s %s" % (k[1], k[2])) > + newuris, uds = bb.fetch2.build_mirroruris(ud, mirrors, self.d) > + self.assertEqual(newuris, [v]) > > def test_urilist1(self): > fetcher = bb.fetch.FetchData("http://downloads.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz", self.d) > > > > _______________________________________________ > bitbake-devel mailing list > bitbake-devel@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications @ 2012-06-26 17:31 ` Martin Jansa 0 siblings, 0 replies; 21+ messages in thread From: Martin Jansa @ 2012-06-26 17:31 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core [-- Attachment #1: Type: text/plain, Size: 18172 bytes --] On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > When writing mirror specifications, the current regexp syntax can be awkward > and hard to get it to do what you want. For example, extracting the 'basename' > of a repository: > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > can now become: > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > which is much clearer. A MIRRORNAME substitution is also added which contains > an encoded form of both host and path. One of the problems with the existing > regexp syntax is you couldn't access HOST information from PATH and vice-versa > which is an issue this patch also addresses. One of this fetch2 patches break https?:// in MIRRORS It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ https?$://.*/.* http://sources.openembedded.org/ I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch log shorter) on libcap (which doesn't exist on upstream URL). PREMIRRORS_append () { cvs://.*/.* http://build.shr-project.org/sources/ svn://.*/.* http://build.shr-project.org/sources/ git://.*/.* http://build.shr-project.org/sources/ hg://.*/.* http://build.shr-project.org/sources/ bzr://.*/.* http://build.shr-project.org/sources/ https?$://.*/.* http://build.shr-project.org/sources/ } bitbake d316f28ed725ff40daa8771c1aa224ac46d5b224: DEBUG: Executing python function do_fetch DEBUG: Executing python function base_do_fetch DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['cvs', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['svn', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['git', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['hg', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['bzr', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 returning http://build.shr-project.org/sources/libcap-2.22.tar.bz2 NOTE: fetch http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Python function base_do_fetch finished DEBUG: Python function do_fetch finished bitbake e6ff1d4bab43fdcd8af1230f1d54615f53c1978e DEBUG: Executing python function do_fetch DEBUG: Executing python function base_do_fetch DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['cvs', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['svn', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['git', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['hg', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['bzr', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream NOTE: fetch http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 ...and after trying Upstream and all MIRRORS (none will match) it fails to fetch it.. Removing '$' doesn't work too: PREMIRRORS_append () { https?://.*/.* http://build.shr-project.org/sources/ } DEBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https?', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream NOTE: fetch http://kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 Using http$ doesn't work too EBUG: Trying PREMIRRORS DEBUG: For url ['http', 'kernel.org', '/pub/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['http$', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: Trying Upstream And without any regexp with different PREMIRRORS for http and https it also does weird things (looks like trying to resolve returned PREMIRROR again) PREMIRRORS_append () { http://.*/.* http://build.shr-project.org/sources/ https://.*/.* http://build.shr-project.org/https-sources/ } changed libcap SRC_URI to https: -SRC_URI = "${KERNELORG_MIRROR}/linux/libs/security/linux-privs/libcap2/${BPN}-${PV}.tar.bz2" +SRC_URI = "https://foo.org/linux/libs/security/linux-privs/libcap2/${BPN}-${PV}.tar.bz2" DEBUG: Trying PREMIRRORS DEBUG: For url ['https', 'foo.org', '/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['https', 'foo.org', '/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] DEBUG: For url https://foo.org/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2 returning http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 DEBUG: For url ['http', 'build.shr-project.org', '/https-sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 returning http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: For url ['http', 'build.shr-project.org', '/sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['http', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/sources/', '', '', {}] DEBUG: For url ['http', 'build.shr-project.org', '/sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] DEBUG: For url ['http', 'build.shr-project.org', '/https-sources/libcap-2.22.tar.bz2', '', '', {}] comparing ['https', '.*', '/.*', '', '', {}] to ['http', 'build.shr-project.org', '/https-sources/', '', '', {}] NOTE: fetch http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' DEBUG: Mirror fetch failure for url http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2 (original url: https://foo.org/linux/libs/security/linux-privs/libcap2/libcap-2.22.tar.bz2) DEBUG: Fetcher failure: Fetch command export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2' failed with exit code 8, output: STDOUT: STDERR: http://build.shr-project.org/https-sources/libcap-2.22.tar.bz2: 2012-06-26 19:23:37 ERROR 404: Not Found. NOTE: fetch http://build.shr-project.org/sources/libcap-2.22.tar.bz2 DEBUG: executing /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Running export HOME="/OE"; export GIT_CONFIG="/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/etc/gitconfig"; export PATH="/OE/shr-core/openembedded-core/scripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin/armv4t-oe-linux-gnueabi:/OE/shr-core/tmp-eglibc/sysroots/om-gta02/usr/bin/crossscripts:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/usr/bin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux/sbin:/OE/shr-core/tmp-eglibc/sysroots/x86_64-linux//bin:/OE/shr-core/openembedded-core/scripts:/OE/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3"; /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /OE/shr-core/downloads 'http://build.shr-project.org/sources/libcap-2.22.tar.bz2' DEBUG: Python function base_do_fetch finished DEBUG: Python function do_fetch finished Cheers, > > Tests for the new syntax are also added. > > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > --- > diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py > index 1b99a0f..e6f55f8 100644 > --- a/bitbake/lib/bb/fetch2/__init__.py > +++ b/bitbake/lib/bb/fetch2/__init__.py > @@ -182,7 +182,7 @@ def encodeurl(decoded): > > return url > > -def uri_replace(ud, uri_find, uri_replace, d): > +def uri_replace(ud, uri_find, uri_replace, replacements, d): > if not ud.url or not uri_find or not uri_replace: > logger.error("uri_replace: passed an undefined value, not replacing") > return None > @@ -213,6 +213,8 @@ def uri_replace(ud, uri_find, uri_replace, d): > if not uri_replace_decoded[loc]: > result_decoded[loc] = "" > else: > + for k in replacements: > + uri_replace_decoded[loc] = uri_replace_decoded[loc].replace(k, replacements[k]) > #bb.note("%s %s %s" % (i, uri_replace_decoded[loc], uri_decoded[loc])) > result_decoded[loc] = re.sub(i, uri_replace_decoded[loc], uri_decoded[loc]) > if loc == 2: > @@ -485,13 +487,20 @@ def build_mirroruris(origud, mirrors, ld): > uris = [] > uds = [] > > + replacements = {} > + replacements["TYPE"] = origud.type > + replacements["HOST"] = origud.host > + replacements["PATH"] = origud.path > + replacements["BASENAME"] = origud.path.split("/")[-1] > + replacements["MIRRORNAME"] = origud.host.replace(':','.') + origud.path.replace('/', '.') > + > def adduri(uri, ud, uris, uds): > for line in mirrors: > try: > (find, replace) = line > except ValueError: > continue > - newuri = uri_replace(ud, find, replace, ld) > + newuri = uri_replace(ud, find, replace, replacements, ld) > if not newuri or newuri in uris or newuri == origud.url: > continue > uris.append(newuri) > diff --git a/bitbake/lib/bb/tests/fetch.py b/bitbake/lib/bb/tests/fetch.py > index 9961343..1477fab 100644 > --- a/bitbake/lib/bb/tests/fetch.py > +++ b/bitbake/lib/bb/tests/fetch.py > @@ -48,7 +48,14 @@ class FetcherTest(unittest.TestCase): > ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://www.apache.org/dist", "http://archive.apache.org/dist") > : "http://archive.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", > ("http://www.apache.org/dist/subversion/subversion-1.7.1.tar.bz2", "http://.*/.*", "file:///somepath/downloads/") > - : "file:///somepath/downloads/subversion-1.7.1.tar.bz2" > + : "file:///somepath/downloads/subversion-1.7.1.tar.bz2", > + ("git://git.invalid.infradead.org/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") > + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/BASENAME;protocol=http") > + : "git://somewhere.org/somedir/mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + ("git://git.invalid.infradead.org/foo/mtd-utils.git;tag=1234567890123456789012345678901234567890", "git://.*/.*", "git://somewhere.org/somedir/MIRRORNAME;protocol=http") > + : "git://somewhere.org/somedir/git.invalid.infradead.org.foo.mtd-utils.git;tag=1234567890123456789012345678901234567890;protocol=http", > + > #Renaming files doesn't work > #("http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz") : "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz" > #("file://sstate-xyz.tgz", "file://.*/.*", "file:///somewhere/1234/sstate-cache") : "file:///somewhere/1234/sstate-cache/sstate-xyz.tgz", > @@ -143,8 +150,9 @@ class FetcherTest(unittest.TestCase): > for k, v in self.replaceuris.items(): > ud = bb.fetch.FetchData(k[0], self.d) > ud.setup_localpath(self.d) > - newuris = bb.fetch2.uri_replace(ud, k[1], k[2], self.d) > - self.assertEqual(newuris, v) > + mirrors = bb.fetch2.mirror_from_string("%s %s" % (k[1], k[2])) > + newuris, uds = bb.fetch2.build_mirroruris(ud, mirrors, self.d) > + self.assertEqual(newuris, [v]) > > def test_urilist1(self): > fetcher = bb.fetch.FetchData("http://downloads.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz", self.d) > > > > _______________________________________________ > bitbake-devel mailing list > bitbake-devel@lists.openembedded.org > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: (PRE)MIRRORS doesn't work with https?$:// anymore Was: [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications 2012-06-26 17:31 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Martin Jansa @ 2012-06-27 10:34 ` Richard Purdie -1 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-27 10:34 UTC (permalink / raw) To: Martin Jansa; +Cc: bitbake-devel, openembedded-core On Tue, 2012-06-26 at 19:31 +0200, Martin Jansa wrote: > On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > > When writing mirror specifications, the current regexp syntax can be awkward > > and hard to get it to do what you want. For example, extracting the 'basename' > > of a repository: > > > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > > > can now become: > > > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > > > which is much clearer. A MIRRORNAME substitution is also added which contains > > an encoded form of both host and path. One of the problems with the existing > > regexp syntax is you couldn't access HOST information from PATH and vice-versa > > which is an issue this patch also addresses. > > One of this fetch2 patches break https?:// in MIRRORS > > It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: > https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ > https?$://.*/.* http://sources.openembedded.org/ > > I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch > log shorter) on libcap (which doesn't exist on upstream URL). > > PREMIRRORS_append () { > cvs://.*/.* http://build.shr-project.org/sources/ > svn://.*/.* http://build.shr-project.org/sources/ > git://.*/.* http://build.shr-project.org/sources/ > hg://.*/.* http://build.shr-project.org/sources/ > bzr://.*/.* http://build.shr-project.org/sources/ > https?$://.*/.* http://build.shr-project.org/sources/ > } This is almost certainly a result of: http://git.openembedded.org/bitbake/commit/?id=604df1b25cf114e083f52917df2df64e01279c25 since I didn't believe anyone was using the regexp syntax in the base url type. The bug I wanted to fix was where if you did: https://.*/.* file:///some/path/ which seems reasonable enough, it would access: files:///some/path/ which is clearly not what anyone would want. I'm not sure what to do about fixing this... Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications @ 2012-06-27 10:34 ` Richard Purdie 0 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-27 10:34 UTC (permalink / raw) To: Martin Jansa; +Cc: bitbake-devel, openembedded-core On Tue, 2012-06-26 at 19:31 +0200, Martin Jansa wrote: > On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > > When writing mirror specifications, the current regexp syntax can be awkward > > and hard to get it to do what you want. For example, extracting the 'basename' > > of a repository: > > > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > > > can now become: > > > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > > > which is much clearer. A MIRRORNAME substitution is also added which contains > > an encoded form of both host and path. One of the problems with the existing > > regexp syntax is you couldn't access HOST information from PATH and vice-versa > > which is an issue this patch also addresses. > > One of this fetch2 patches break https?:// in MIRRORS > > It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: > https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ > https?$://.*/.* http://sources.openembedded.org/ > > I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch > log shorter) on libcap (which doesn't exist on upstream URL). > > PREMIRRORS_append () { > cvs://.*/.* http://build.shr-project.org/sources/ > svn://.*/.* http://build.shr-project.org/sources/ > git://.*/.* http://build.shr-project.org/sources/ > hg://.*/.* http://build.shr-project.org/sources/ > bzr://.*/.* http://build.shr-project.org/sources/ > https?$://.*/.* http://build.shr-project.org/sources/ > } This is almost certainly a result of: http://git.openembedded.org/bitbake/commit/?id=604df1b25cf114e083f52917df2df64e01279c25 since I didn't believe anyone was using the regexp syntax in the base url type. The bug I wanted to fix was where if you did: https://.*/.* file:///some/path/ which seems reasonable enough, it would access: files:///some/path/ which is clearly not what anyone would want. I'm not sure what to do about fixing this... Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: (PRE)MIRRORS doesn't work with https?$:// anymore Was: [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications 2012-06-27 10:34 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Richard Purdie @ 2012-06-27 11:06 ` Martin Jansa -1 siblings, 0 replies; 21+ messages in thread From: Martin Jansa @ 2012-06-27 11:06 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core [-- Attachment #1: Type: text/plain, Size: 2553 bytes --] On Wed, Jun 27, 2012 at 11:34:13AM +0100, Richard Purdie wrote: > On Tue, 2012-06-26 at 19:31 +0200, Martin Jansa wrote: > > On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > > > When writing mirror specifications, the current regexp syntax can be awkward > > > and hard to get it to do what you want. For example, extracting the 'basename' > > > of a repository: > > > > > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > > > > > can now become: > > > > > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > > > > > which is much clearer. A MIRRORNAME substitution is also added which contains > > > an encoded form of both host and path. One of the problems with the existing > > > regexp syntax is you couldn't access HOST information from PATH and vice-versa > > > which is an issue this patch also addresses. > > > > One of this fetch2 patches break https?:// in MIRRORS > > > > It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: > > https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ > > https?$://.*/.* http://sources.openembedded.org/ > > > > I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch > > log shorter) on libcap (which doesn't exist on upstream URL). > > > > PREMIRRORS_append () { > > cvs://.*/.* http://build.shr-project.org/sources/ > > svn://.*/.* http://build.shr-project.org/sources/ > > git://.*/.* http://build.shr-project.org/sources/ > > hg://.*/.* http://build.shr-project.org/sources/ > > bzr://.*/.* http://build.shr-project.org/sources/ > > https?$://.*/.* http://build.shr-project.org/sources/ > > } > > This is almost certainly a result of: > > http://git.openembedded.org/bitbake/commit/?id=604df1b25cf114e083f52917df2df64e01279c25 > > since I didn't believe anyone was using the regexp syntax in the base > url type. The bug I wanted to fix was where if you did: > > https://.*/.* file:///some/path/ > > which seems reasonable enough, it would access: > > files:///some/path/ > > which is clearly not what anyone would want. > > I'm not sure what to do about fixing this... oe-core mirrors.bbclass is using that.. http://git.openembedded.org/openembedded-core/tree/meta/classes/mirrors.bbclass so maybe someone should fix mirrors.bbclass if this is expected behavior with new bitbake.. Cheers, > > Cheers, > > Richard > > > -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications @ 2012-06-27 11:06 ` Martin Jansa 0 siblings, 0 replies; 21+ messages in thread From: Martin Jansa @ 2012-06-27 11:06 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core [-- Attachment #1: Type: text/plain, Size: 2553 bytes --] On Wed, Jun 27, 2012 at 11:34:13AM +0100, Richard Purdie wrote: > On Tue, 2012-06-26 at 19:31 +0200, Martin Jansa wrote: > > On Thu, Jun 21, 2012 at 03:34:57PM +0100, Richard Purdie wrote: > > > When writing mirror specifications, the current regexp syntax can be awkward > > > and hard to get it to do what you want. For example, extracting the 'basename' > > > of a repository: > > > > > > PREMIRRORS = "git://.*/([^/]+/)*([^/]*) git://somewhere.org/somedir/\\2;protocol=file" > > > > > > can now become: > > > > > > PREMIRRORS = "git://.*/.* git://somewhere.org/somedir/BASENAME;protocol=file" > > > > > > which is much clearer. A MIRRORNAME substitution is also added which contains > > > an encoded form of both host and path. One of the problems with the existing > > > regexp syntax is you couldn't access HOST information from PATH and vice-versa > > > which is an issue this patch also addresses. > > > > One of this fetch2 patches break https?:// in MIRRORS > > > > It's used e.g in openembedded-core/meta/classes/mirrors.bbclass: > > https?$://.*/.* http://downloads.yoctoproject.org/mirror/sources/ > > https?$://.*/.* http://sources.openembedded.org/ > > > > I've tested it with older bitbake in PREMIRRORS (to make log.do_fetch > > log shorter) on libcap (which doesn't exist on upstream URL). > > > > PREMIRRORS_append () { > > cvs://.*/.* http://build.shr-project.org/sources/ > > svn://.*/.* http://build.shr-project.org/sources/ > > git://.*/.* http://build.shr-project.org/sources/ > > hg://.*/.* http://build.shr-project.org/sources/ > > bzr://.*/.* http://build.shr-project.org/sources/ > > https?$://.*/.* http://build.shr-project.org/sources/ > > } > > This is almost certainly a result of: > > http://git.openembedded.org/bitbake/commit/?id=604df1b25cf114e083f52917df2df64e01279c25 > > since I didn't believe anyone was using the regexp syntax in the base > url type. The bug I wanted to fix was where if you did: > > https://.*/.* file:///some/path/ > > which seems reasonable enough, it would access: > > files:///some/path/ > > which is clearly not what anyone would want. > > I'm not sure what to do about fixing this... oe-core mirrors.bbclass is using that.. http://git.openembedded.org/openembedded-core/tree/meta/classes/mirrors.bbclass so maybe someone should fix mirrors.bbclass if this is expected behavior with new bitbake.. Cheers, > > Cheers, > > Richard > > > -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-27 10:34 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Richard Purdie (?) (?) @ 2012-06-27 14:52 ` Enrico Scholz 2012-06-27 14:59 ` Robert P. J. Day 2012-06-27 20:35 ` [bitbake-devel] " Richard Purdie -1 siblings, 2 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-27 14:52 UTC (permalink / raw) To: openembedded-core, bitbake-devel; +Cc: Enrico Scholz Last mirror rewrite caused a regression not accepting .*://.*/.* file://${DL_DIR}/../local/ like specifications anymore. Patch restores old behavior by using regexp matching when checking protocol. Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> --- lib/bb/fetch2/__init__.py | 2 +- 1 Datei geändert, 1 Zeile hinzugefügt(+), 1 Zeile entfernt(-) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 6f3d88c..75ce01b 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -207,7 +207,7 @@ def uri_replace(ud, uri_find, uri_replace, d): elif loc == 0: # Principle of least surprise. We could end up with https matching against http and # generating "files://" urls if we use the regexp engine below. - if i != uri_decoded[loc]: + if not re.match(i, uri_decoded[loc]): return None result_decoded[loc] = uri_replace_decoded[loc] elif (re.match(i, uri_decoded[loc])): -- 1.7.10.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [OE-core] [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-27 14:52 ` [PATCH 20/20] fetch: allow regexps in mirror protocol Enrico Scholz @ 2012-06-27 14:59 ` Robert P. J. Day 2012-06-27 20:35 ` [bitbake-devel] " Richard Purdie 1 sibling, 0 replies; 21+ messages in thread From: Robert P. J. Day @ 2012-06-27 14:59 UTC (permalink / raw) To: Patches and discussions about the oe-core layer Cc: Enrico Scholz, bitbake-devel [-- Attachment #1: Type: TEXT/PLAIN, Size: 1673 bytes --] On Wed, 27 Jun 2012, Enrico Scholz wrote: > Last mirror rewrite caused a regression not accepting > > .*://.*/.* file://${DL_DIR}/../local/ > > like specifications anymore. Patch restores old behavior by using regexp > matching when checking protocol. > > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> > --- > lib/bb/fetch2/__init__.py | 2 +- > 1 Datei geändert, 1 Zeile hinzugefügt(+), 1 Zeile entfernt(-) > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > index 6f3d88c..75ce01b 100644 > --- a/lib/bb/fetch2/__init__.py > +++ b/lib/bb/fetch2/__init__.py > @@ -207,7 +207,7 @@ def uri_replace(ud, uri_find, uri_replace, d): > elif loc == 0: > # Principle of least surprise. We could end up with https matching against http and > # generating "files://" urls if we use the regexp engine below. > - if i != uri_decoded[loc]: > + if not re.match(i, uri_decoded[loc]): > return None > result_decoded[loc] = uri_replace_decoded[loc] > elif (re.match(i, uri_decoded[loc])): > -- > 1.7.10.2 that certainly seems to have solved my issue with using "own-mirrors". rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-27 14:59 ` Robert P. J. Day 0 siblings, 0 replies; 21+ messages in thread From: Robert P. J. Day @ 2012-06-27 14:59 UTC (permalink / raw) To: Patches and discussions about the oe-core layer Cc: Enrico Scholz, bitbake-devel [-- Attachment #1: Type: TEXT/PLAIN, Size: 1673 bytes --] On Wed, 27 Jun 2012, Enrico Scholz wrote: > Last mirror rewrite caused a regression not accepting > > .*://.*/.* file://${DL_DIR}/../local/ > > like specifications anymore. Patch restores old behavior by using regexp > matching when checking protocol. > > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> > --- > lib/bb/fetch2/__init__.py | 2 +- > 1 Datei geändert, 1 Zeile hinzugefügt(+), 1 Zeile entfernt(-) > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > index 6f3d88c..75ce01b 100644 > --- a/lib/bb/fetch2/__init__.py > +++ b/lib/bb/fetch2/__init__.py > @@ -207,7 +207,7 @@ def uri_replace(ud, uri_find, uri_replace, d): > elif loc == 0: > # Principle of least surprise. We could end up with https matching against http and > # generating "files://" urls if we use the regexp engine below. > - if i != uri_decoded[loc]: > + if not re.match(i, uri_decoded[loc]): > return None > result_decoded[loc] = uri_replace_decoded[loc] > elif (re.match(i, uri_decoded[loc])): > -- > 1.7.10.2 that certainly seems to have solved my issue with using "own-mirrors". rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-27 14:52 ` [PATCH 20/20] fetch: allow regexps in mirror protocol Enrico Scholz @ 2012-06-27 20:35 ` Richard Purdie 2012-06-27 20:35 ` [bitbake-devel] " Richard Purdie 1 sibling, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-27 20:35 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Wed, 2012-06-27 at 16:52 +0200, Enrico Scholz wrote: > Last mirror rewrite caused a regression not accepting > > .*://.*/.* file://${DL_DIR}/../local/ > > like specifications anymore. Patch restores old behavior by using regexp > matching when checking protocol. > > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> > --- > lib/bb/fetch2/__init__.py | 2 +- > 1 Datei geändert, 1 Zeile hinzugefügt(+), 1 Zeile entfernt(-) > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > index 6f3d88c..75ce01b 100644 > --- a/lib/bb/fetch2/__init__.py > +++ b/lib/bb/fetch2/__init__.py > @@ -207,7 +207,7 @@ def uri_replace(ud, uri_find, uri_replace, d): > elif loc == 0: > # Principle of least surprise. We could end up with https matching against http and > # generating "files://" urls if we use the regexp engine below. > - if i != uri_decoded[loc]: > + if not re.match(i, uri_decoded[loc]): > return None > result_decoded[loc] = uri_replace_decoded[loc] > elif (re.match(i, uri_decoded[loc])): I'm not picking on you (Enrico) here, there is a problem with my change and we probably should revert my change in this area. However the above patch fails "bitbake-selftest" and introduces a regression. I wrote regression tests for the fetcher for a reason. The trouble is its sees: https://.*/.* file:///someplace/ but returns a url like files:// which the fetcher doesn't understand. Suggestions on how to fix this are welcome. Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [bitbake-devel] [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-27 20:35 ` Richard Purdie 0 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-27 20:35 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Wed, 2012-06-27 at 16:52 +0200, Enrico Scholz wrote: > Last mirror rewrite caused a regression not accepting > > .*://.*/.* file://${DL_DIR}/../local/ > > like specifications anymore. Patch restores old behavior by using regexp > matching when checking protocol. > > Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> > --- > lib/bb/fetch2/__init__.py | 2 +- > 1 Datei geändert, 1 Zeile hinzugefügt(+), 1 Zeile entfernt(-) > > diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py > index 6f3d88c..75ce01b 100644 > --- a/lib/bb/fetch2/__init__.py > +++ b/lib/bb/fetch2/__init__.py > @@ -207,7 +207,7 @@ def uri_replace(ud, uri_find, uri_replace, d): > elif loc == 0: > # Principle of least surprise. We could end up with https matching against http and > # generating "files://" urls if we use the regexp engine below. > - if i != uri_decoded[loc]: > + if not re.match(i, uri_decoded[loc]): > return None > result_decoded[loc] = uri_replace_decoded[loc] > elif (re.match(i, uri_decoded[loc])): I'm not picking on you (Enrico) here, there is a problem with my change and we probably should revert my change in this area. However the above patch fails "bitbake-selftest" and introduces a regression. I wrote regression tests for the fetcher for a reason. The trouble is its sees: https://.*/.* file:///someplace/ but returns a url like files:// which the fetcher doesn't understand. Suggestions on how to fix this are welcome. Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-27 20:35 ` [bitbake-devel] " Richard Purdie @ 2012-06-28 0:18 ` Enrico Scholz -1 siblings, 0 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-28 0:18 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core Richard Purdie <richard.purdie@linuxfoundation.org> writes: >> # Principle of least surprise. We could end up with https matching against http and >> # generating "files://" urls if we use the regexp engine below. >> - if i != uri_decoded[loc]: >> + if not re.match(i, uri_decoded[loc]): >> return None >> result_decoded[loc] = uri_replace_decoded[loc] >> elif (re.match(i, uri_decoded[loc])): > > I'm not picking on you (Enrico) here, there is a problem with my change > and we probably should revert my change in this area. > > However the above patch fails "bitbake-selftest" and introduces a > regression. selftest fails here in | ERROR: test_gitfetch_premirror3 (bb.tests.fetch.FetcherTest) | CalledProcessError: Command 'git clone git://git.openembedded.org/bitbake /tmp/tmpt_dDVD/sourcemirror.git 2> /dev/null' returned non-zero exit status 128 and | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] | ? ^ | | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] | ? ^ (I am some days behind current bitbake master, so these might be fixed in the meantime) Nothing which seems to be related to the patch. > The trouble is its sees: > > https://.*/.* file:///someplace/ > > but returns a url like files:// which the fetcher doesn't understand. > Suggestions on how to fix this are welcome. I do not see how my patch can cause such a rewrite. The troublesome 're.sub()' is done in a branch for loc != 0 only and won't be applied on the protocol part. Enrico ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [bitbake-devel] [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-28 0:18 ` Enrico Scholz 0 siblings, 0 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-28 0:18 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core Richard Purdie <richard.purdie@linuxfoundation.org> writes: >> # Principle of least surprise. We could end up with https matching against http and >> # generating "files://" urls if we use the regexp engine below. >> - if i != uri_decoded[loc]: >> + if not re.match(i, uri_decoded[loc]): >> return None >> result_decoded[loc] = uri_replace_decoded[loc] >> elif (re.match(i, uri_decoded[loc])): > > I'm not picking on you (Enrico) here, there is a problem with my change > and we probably should revert my change in this area. > > However the above patch fails "bitbake-selftest" and introduces a > regression. selftest fails here in | ERROR: test_gitfetch_premirror3 (bb.tests.fetch.FetcherTest) | CalledProcessError: Command 'git clone git://git.openembedded.org/bitbake /tmp/tmpt_dDVD/sourcemirror.git 2> /dev/null' returned non-zero exit status 128 and | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] | ? ^ | | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] | ? ^ (I am some days behind current bitbake master, so these might be fixed in the meantime) Nothing which seems to be related to the patch. > The trouble is its sees: > > https://.*/.* file:///someplace/ > > but returns a url like files:// which the fetcher doesn't understand. > Suggestions on how to fix this are welcome. I do not see how my patch can cause such a rewrite. The troublesome 're.sub()' is done in a branch for loc != 0 only and won't be applied on the protocol part. Enrico ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-28 0:18 ` [bitbake-devel] " Enrico Scholz @ 2012-06-28 0:27 ` Enrico Scholz -1 siblings, 0 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-28 0:27 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core Enrico Scholz <enrico.scholz@sigma-chemnitz.de> writes: >>> - if i != uri_decoded[loc]: >>> + if not re.match(i, uri_decoded[loc]): > > | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) > | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... > | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', > | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > | ? ^ > | > | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > | ? ^ > > Nothing which seems to be related to the patch. I have to correct me... the new line should be | + if not re.match(i + '$', uri_decoded[loc]): to match the complete protocol. Enrico ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [bitbake-devel] [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-28 0:27 ` Enrico Scholz 0 siblings, 0 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-28 0:27 UTC (permalink / raw) To: Richard Purdie; +Cc: bitbake-devel, openembedded-core Enrico Scholz <enrico.scholz@sigma-chemnitz.de> writes: >>> - if i != uri_decoded[loc]: >>> + if not re.match(i, uri_decoded[loc]): > > | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) > | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... > | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', > | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > | ? ^ > | > | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > | ? ^ > > Nothing which seems to be related to the patch. I have to correct me... the new line should be | + if not re.match(i + '$', uri_decoded[loc]): to match the complete protocol. Enrico ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-28 0:27 ` [bitbake-devel] " Enrico Scholz @ 2012-06-28 11:42 ` Richard Purdie -1 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-28 11:42 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Thu, 2012-06-28 at 02:27 +0200, Enrico Scholz wrote: > Enrico Scholz <enrico.scholz@sigma-chemnitz.de> writes: > > >>> - if i != uri_decoded[loc]: > >>> + if not re.match(i, uri_decoded[loc]): > > > > | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) > > | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... > > | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', > > | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > > | ? ^ > > | > > | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > > | ? ^ > > > > Nothing which seems to be related to the patch. > > I have to correct me... the new line should be > > | + if not re.match(i + '$', uri_decoded[loc]): > > to match the complete protocol. Agreed, this is going to make most sense. I've merged a patch which reverts my original change and adds something like this (but checks the pattern doesn't end with this already). Hopefully this resolves the issues everyone was having. Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [bitbake-devel] [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-28 11:42 ` Richard Purdie 0 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-28 11:42 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Thu, 2012-06-28 at 02:27 +0200, Enrico Scholz wrote: > Enrico Scholz <enrico.scholz@sigma-chemnitz.de> writes: > > >>> - if i != uri_decoded[loc]: > >>> + if not re.match(i, uri_decoded[loc]): > > > > | FAIL: test_urilist2 (bb.tests.fetch.FetcherTest) > > | AssertionError: Lists differ: ['file:///somepath/downloads/b... != ['file:///someotherpath/downlo... > > | - ['file:///somepath/downloads/bitbake-1.0.tar.gz', > > | - 'file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > > | ? ^ > > | > > | + ['file:///someotherpath/downloads/bitbake-1.0.tar.gz'] > > | ? ^ > > > > Nothing which seems to be related to the patch. > > I have to correct me... the new line should be > > | + if not re.match(i + '$', uri_decoded[loc]): > > to match the complete protocol. Agreed, this is going to make most sense. I've merged a patch which reverts my original change and adds something like this (but checks the pattern doesn't end with this already). Hopefully this resolves the issues everyone was having. Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 20/20] fetch: allow regexps in mirror protocol 2012-06-28 0:18 ` [bitbake-devel] " Enrico Scholz @ 2012-06-28 11:43 ` Richard Purdie -1 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-28 11:43 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Thu, 2012-06-28 at 02:18 +0200, Enrico Scholz wrote: > Richard Purdie <richard.purdie@linuxfoundation.org> writes: > > >> # Principle of least surprise. We could end up with https matching against http and > >> # generating "files://" urls if we use the regexp engine below. > >> - if i != uri_decoded[loc]: > >> + if not re.match(i, uri_decoded[loc]): > >> return None > >> result_decoded[loc] = uri_replace_decoded[loc] > >> elif (re.match(i, uri_decoded[loc])): > > > > I'm not picking on you (Enrico) here, there is a problem with my change > > and we probably should revert my change in this area. > > > > However the above patch fails "bitbake-selftest" and introduces a > > regression. > > selftest fails here in > > | ERROR: test_gitfetch_premirror3 (bb.tests.fetch.FetcherTest) > | CalledProcessError: Command 'git clone git://git.openembedded.org/bitbake /tmp/tmpt_dDVD/sourcemirror.git 2> /dev/null' returned non-zero exit status 128 I've pushed a fix for this issue. That one was a bug in the test code (which needed a chdir adding since cwd from the previous test was removed causing the error). Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [bitbake-devel] [PATCH 20/20] fetch: allow regexps in mirror protocol @ 2012-06-28 11:43 ` Richard Purdie 0 siblings, 0 replies; 21+ messages in thread From: Richard Purdie @ 2012-06-28 11:43 UTC (permalink / raw) To: Enrico Scholz; +Cc: bitbake-devel, openembedded-core On Thu, 2012-06-28 at 02:18 +0200, Enrico Scholz wrote: > Richard Purdie <richard.purdie@linuxfoundation.org> writes: > > >> # Principle of least surprise. We could end up with https matching against http and > >> # generating "files://" urls if we use the regexp engine below. > >> - if i != uri_decoded[loc]: > >> + if not re.match(i, uri_decoded[loc]): > >> return None > >> result_decoded[loc] = uri_replace_decoded[loc] > >> elif (re.match(i, uri_decoded[loc])): > > > > I'm not picking on you (Enrico) here, there is a problem with my change > > and we probably should revert my change in this area. > > > > However the above patch fails "bitbake-selftest" and introduces a > > regression. > > selftest fails here in > > | ERROR: test_gitfetch_premirror3 (bb.tests.fetch.FetcherTest) > | CalledProcessError: Command 'git clone git://git.openembedded.org/bitbake /tmp/tmpt_dDVD/sourcemirror.git 2> /dev/null' returned non-zero exit status 128 I've pushed a fix for this issue. That one was a bug in the test code (which needed a chdir adding since cwd from the previous test was removed causing the error). Cheers, Richard ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications 2012-06-27 10:34 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Richard Purdie ` (2 preceding siblings ...) (?) @ 2012-06-27 14:54 ` Enrico Scholz -1 siblings, 0 replies; 21+ messages in thread From: Enrico Scholz @ 2012-06-27 14:54 UTC (permalink / raw) To: openembedded-core > I'm not sure what to do about fixing this... should be trivial by regexp matching the protocol part instead of comparing it with '='. See my parallel posting for a patch. Enrico ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2012-06-28 11:54 UTC | newest] Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-06-21 14:34 [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications Richard Purdie 2012-06-26 17:31 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: " Martin Jansa 2012-06-26 17:31 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Martin Jansa 2012-06-27 10:34 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: " Richard Purdie 2012-06-27 10:34 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Richard Purdie 2012-06-27 11:06 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: " Martin Jansa 2012-06-27 11:06 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] " Martin Jansa 2012-06-27 14:52 ` [PATCH 20/20] fetch: allow regexps in mirror protocol Enrico Scholz 2012-06-27 14:59 ` [OE-core] " Robert P. J. Day 2012-06-27 14:59 ` Robert P. J. Day 2012-06-27 20:35 ` Richard Purdie 2012-06-27 20:35 ` [bitbake-devel] " Richard Purdie 2012-06-28 0:18 ` Enrico Scholz 2012-06-28 0:18 ` [bitbake-devel] " Enrico Scholz 2012-06-28 0:27 ` Enrico Scholz 2012-06-28 0:27 ` [bitbake-devel] " Enrico Scholz 2012-06-28 11:42 ` Richard Purdie 2012-06-28 11:42 ` [bitbake-devel] " Richard Purdie 2012-06-28 11:43 ` Richard Purdie 2012-06-28 11:43 ` [bitbake-devel] " Richard Purdie 2012-06-27 14:54 ` (PRE)MIRRORS doesn't work with https?$:// anymore Was: [bitbake-devel] [PATCH] fetch2: Add new mirror syntax to simplify mirror specifications Enrico Scholz
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.