On 5/30/20 8:26 PM, Mike Gilbert wrote:
> Bug: https://bugs.gentoo.org/719810
> Signed-off-by: Mike Gilbert <flop...@gentoo.org>
> ---
>  lib/portage/package/ebuild/fetch.py | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/portage/package/ebuild/fetch.py 
> b/lib/portage/package/ebuild/fetch.py
> index 28e7caf53..47c3ad28f 100644
> --- a/lib/portage/package/ebuild/fetch.py
> +++ b/lib/portage/package/ebuild/fetch.py
> @@ -26,6 +26,11 @@ try:
>  except ImportError:
>       from urlparse import urlparse
>  
> +try:
> +     from urllib.parse import quote as urlquote
> +except ImportError:
> +     from urllib import quote as urlquote
> +
>  import portage
>  portage.proxy.lazyimport.lazyimport(globals(),
>       'portage.package.ebuild.config:check_config_instance,config',
> @@ -351,7 +356,7 @@ _size_suffix_map = {
>  
>  class FlatLayout(object):
>       def get_path(self, filename):
> -             return filename
> +             return urlquote(filename)
>  
>       def get_filenames(self, distdir):
>               for dirpath, dirnames, filenames in os.walk(distdir,
> @@ -382,7 +387,7 @@ class FilenameHashLayout(object):
>                       c = c // 4
>                       ret += fnhash[:c] + '/'
>                       fnhash = fnhash[c:]
> -             return ret + filename
> +             return ret + urlquote(filename)
>  
>       def get_filenames(self, distdir):
>               pattern = ''
> 

In order to ensure that the filename will not have an extra level of quoting
in the mirror path, we'll have to do something like this wherever we
translate a uri in SRC_URI to a filename:

diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py
index 08af17bcd..99d8ab720 100644
--- a/lib/portage/dbapi/porttree.py
+++ b/lib/portage/dbapi/porttree.py
@@ -1547,7 +1547,7 @@ def _parse_uri_map(cpv, metadata, use=None):
                        myuris.pop()
                        distfile = myuris.pop()
                else:
-                       distfile = os.path.basename(uri)
+                       distfile = unquote(os.path.basename(uri))
                        if not distfile:
                                raise portage.exception.InvalidDependString(
                                        ("getFetchMap(): '%s' SRC_URI has no 
file " + \

-- 
Thanks,
Zac

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to