1 |
Make the =* glob match only on boundaries between version parts, in order |
2 |
to eliminate ambiguity (so that 1* does not match version 10). Only break |
3 |
compatibility in cases where dependencies have been specified ambiguously. |
4 |
|
5 |
X-Gentoo-Bug: 560466 |
6 |
X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=560466 |
7 |
--- |
8 |
pym/portage/dep/__init__.py | 7 ++++++- |
9 |
pym/portage/tests/dep/test_match_from_list.py | 21 +++++++++++++++------ |
10 |
2 files changed, 21 insertions(+), 7 deletions(-) |
11 |
|
12 |
diff --git a/pym/portage/dep/__init__.py b/pym/portage/dep/__init__.py |
13 |
index 0a13d9f..5dd1638 100644 |
14 |
--- a/pym/portage/dep/__init__.py |
15 |
+++ b/pym/portage/dep/__init__.py |
16 |
@@ -2250,7 +2250,12 @@ def match_from_list(mydep, candidate_list): |
17 |
pkg.cp + "-" + xs[2], |
18 |
pkg.cp + "-" + myver, 1) |
19 |
if xcpv.startswith(mycpv_cmp): |
20 |
- mylist.append(x) |
21 |
+ # =* glob matches only on boundaries between version parts, |
22 |
+ # so 1* does not match 10 (bug 560466). |
23 |
+ next_char = xcpv[len(mycpv_cmp):len(mycpv_cmp)+1] |
24 |
+ if (not next_char or next_char in '._-' or |
25 |
+ mycpv_cmp[-1].isdigit() != next_char.isdigit()): |
26 |
+ mylist.append(x) |
27 |
|
28 |
elif operator == "~": # version, any revision, match |
29 |
for x in candidate_list: |
30 |
diff --git a/pym/portage/tests/dep/test_match_from_list.py b/pym/portage/tests/dep/test_match_from_list.py |
31 |
index 75ac8fd..3080479 100644 |
32 |
--- a/pym/portage/tests/dep/test_match_from_list.py |
33 |
+++ b/pym/portage/tests/dep/test_match_from_list.py |
34 |
@@ -73,12 +73,21 @@ class Test_match_from_list(TestCase): |
35 |
("sys-apps/portage:0", [Package("=sys-apps/portage-045:0")], ["sys-apps/portage-045"]), |
36 |
("sys-apps/portage:0", [Package("=sys-apps/portage-045:1")], []), |
37 |
("=cat/pkg-1-r1*", ["cat/pkg-1_alpha1"], []), |
38 |
- ("=cat/pkg-1-r1*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]), |
39 |
- ("=cat/pkg-1-r1*", ["cat/pkg-01-r11"], ["cat/pkg-01-r11"]), |
40 |
- ("=cat/pkg-01-r1*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]), |
41 |
- ("=cat/pkg-01-r1*", ["cat/pkg-001-r11"], ["cat/pkg-001-r11"]), |
42 |
- ("=sys-fs/udev-1*", ["sys-fs/udev-123"], ["sys-fs/udev-123"]), |
43 |
- ("=sys-fs/udev-4*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]), |
44 |
+ # =* glob matches only on boundaries between version parts, |
45 |
+ # so 1* does not match 10 (bug 560466). |
46 |
+ ("=cat/pkg-1.1*", ["cat/pkg-1.1-r1", "cat/pkg-1.10-r1"], ["cat/pkg-1.1-r1"]), |
47 |
+ ("=cat/pkg-1-r1*", ["cat/pkg-1-r11"], []), |
48 |
+ ("=cat/pkg-1_pre*", ["cat/pkg-1_pre1"], ["cat/pkg-1_pre1"]), |
49 |
+ ("=cat/pkg-1-r1*", ["cat/pkg-1-r1"], ["cat/pkg-1-r1"]), |
50 |
+ ("=cat/pkg-1-r11*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]), |
51 |
+ ("=cat/pkg-1-r11*", ["cat/pkg-01-r11"], ["cat/pkg-01-r11"]), |
52 |
+ ("=cat/pkg-01-r11*", ["cat/pkg-1-r11"], ["cat/pkg-1-r11"]), |
53 |
+ ("=cat/pkg-01-r11*", ["cat/pkg-001-r11"], ["cat/pkg-001-r11"]), |
54 |
+ ("=sys-fs/udev-1*", ["sys-fs/udev-123", "sys-fs/udev-123-r1"], []), |
55 |
+ ("=sys-fs/udev-123*", ["sys-fs/udev-123"], ["sys-fs/udev-123"]), |
56 |
+ ("=sys-fs/udev-123*", ["sys-fs/udev-123-r1"], ["sys-fs/udev-123-r1"]), |
57 |
+ ("=sys-fs/udev-4*", ["sys-fs/udev-456", "sys-fs/udev-456-r1"], []), |
58 |
+ ("=sys-fs/udev-456*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]), |
59 |
("*/*", ["sys-fs/udev-456"], ["sys-fs/udev-456"]), |
60 |
("*/*:0", ["sys-fs/udev-456:0"], ["sys-fs/udev-456:0"]), |
61 |
("*/*:1", ["sys-fs/udev-456:0"], []), |
62 |
-- |
63 |
2.4.6 |