1 |
Unquote the URL basename when fetching from upstream. |
2 |
Quote the filename when fetching from mirrors. |
3 |
|
4 |
Bug: https://bugs.gentoo.org/719810 |
5 |
Signed-off-by: Mike Gilbert <floppym@g.o> |
6 |
--- |
7 |
lib/portage/dbapi/porttree.py | 7 ++++++- |
8 |
lib/portage/package/ebuild/fetch.py | 9 +++++++-- |
9 |
2 files changed, 13 insertions(+), 3 deletions(-) |
10 |
|
11 |
diff --git a/lib/portage/dbapi/porttree.py b/lib/portage/dbapi/porttree.py |
12 |
index 08af17bcd..984263039 100644 |
13 |
--- a/lib/portage/dbapi/porttree.py |
14 |
+++ b/lib/portage/dbapi/porttree.py |
15 |
@@ -55,6 +55,11 @@ try: |
16 |
except ImportError: |
17 |
from urlparse import urlparse |
18 |
|
19 |
+try: |
20 |
+ from urllib.parse import unquote as urlunquote |
21 |
+except ImportError: |
22 |
+ from urllib import unquote as urlunquote |
23 |
+ |
24 |
if sys.hexversion >= 0x3000000: |
25 |
# pylint: disable=W0622 |
26 |
basestring = str |
27 |
@@ -1547,7 +1552,7 @@ def _parse_uri_map(cpv, metadata, use=None): |
28 |
myuris.pop() |
29 |
distfile = myuris.pop() |
30 |
else: |
31 |
- distfile = os.path.basename(uri) |
32 |
+ distfile = urlunquote(os.path.basename(uri)) |
33 |
if not distfile: |
34 |
raise portage.exception.InvalidDependString( |
35 |
("getFetchMap(): '%s' SRC_URI has no file " + \ |
36 |
diff --git a/lib/portage/package/ebuild/fetch.py b/lib/portage/package/ebuild/fetch.py |
37 |
index 28e7caf53..47c3ad28f 100644 |
38 |
--- a/lib/portage/package/ebuild/fetch.py |
39 |
+++ b/lib/portage/package/ebuild/fetch.py |
40 |
@@ -26,6 +26,11 @@ try: |
41 |
except ImportError: |
42 |
from urlparse import urlparse |
43 |
|
44 |
+try: |
45 |
+ from urllib.parse import quote as urlquote |
46 |
+except ImportError: |
47 |
+ from urllib import quote as urlquote |
48 |
+ |
49 |
import portage |
50 |
portage.proxy.lazyimport.lazyimport(globals(), |
51 |
'portage.package.ebuild.config:check_config_instance,config', |
52 |
@@ -351,7 +356,7 @@ _size_suffix_map = { |
53 |
|
54 |
class FlatLayout(object): |
55 |
def get_path(self, filename): |
56 |
- return filename |
57 |
+ return urlquote(filename) |
58 |
|
59 |
def get_filenames(self, distdir): |
60 |
for dirpath, dirnames, filenames in os.walk(distdir, |
61 |
@@ -382,7 +387,7 @@ class FilenameHashLayout(object): |
62 |
c = c // 4 |
63 |
ret += fnhash[:c] + '/' |
64 |
fnhash = fnhash[c:] |
65 |
- return ret + filename |
66 |
+ return ret + urlquote(filename) |
67 |
|
68 |
def get_filenames(self, distdir): |
69 |
pattern = '' |
70 |
-- |
71 |
2.27.0.rc2 |