1 |
This adds dblink._contents_contains, _contents_iter, and _contents_key |
2 |
methods that provide an interface for contents operations with "implicit" |
3 |
case handling. |
4 |
|
5 |
X-Gentoo-Bug: 524236 |
6 |
X-Gentoo-Url: https://bugs.gentoo.org/show_bug.cgi?id=524236 |
7 |
--- |
8 |
pym/portage/dbapi/vartree.py | 43 +++++++++++++++++++++++++++++++++++++++++++ |
9 |
1 file changed, 43 insertions(+) |
10 |
|
11 |
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py |
12 |
index 8b06f4c..2d1003f 100644 |
13 |
--- a/pym/portage/dbapi/vartree.py |
14 |
+++ b/pym/portage/dbapi/vartree.py |
15 |
@@ -1515,6 +1515,8 @@ class dblink(object): |
16 |
self.contentscache = None |
17 |
self._contents_inodes = None |
18 |
self._contents_basenames = None |
19 |
+ self._contents_case_insensitive = None |
20 |
+ self._contents_case_reverse_map = None |
21 |
self._linkmap_broken = False |
22 |
self._device_path_map = {} |
23 |
self._hardlink_merge_map = {} |
24 |
@@ -1526,6 +1528,15 @@ class dblink(object): |
25 |
# compliance with RESTRICT=preserve-libs. |
26 |
self._preserve_libs = "preserve-libs" in mysettings.features |
27 |
|
28 |
+ if "case-insensitive-fs" in self.settings.features: |
29 |
+ self._contents_key = self._contents_key_case_insensitive |
30 |
+ self._contents_contains = self._contents_contains_case_insensitive |
31 |
+ self._contents_iter = self._contents_iter_case_insensitive |
32 |
+ else: |
33 |
+ self._contents_key = self._contents_key_case_sensitive |
34 |
+ self._contents_contains = self._contents_contains_case_sensitive |
35 |
+ self._contents_iter = self._contents_iter_case_sensitive |
36 |
+ |
37 |
def __hash__(self): |
38 |
return hash(self._hash_key) |
39 |
|
40 |
@@ -1612,6 +1623,8 @@ class dblink(object): |
41 |
self.contentscache = None |
42 |
self._contents_inodes = None |
43 |
self._contents_basenames = None |
44 |
+ self._contents_case_insensitive = None |
45 |
+ self._contents_case_reverse_map = None |
46 |
|
47 |
def getcontents(self): |
48 |
""" |
49 |
@@ -1716,6 +1729,36 @@ class dblink(object): |
50 |
self.contentscache = pkgfiles |
51 |
return pkgfiles |
52 |
|
53 |
+ def _contents_case_insensitive_init(self): |
54 |
+ self._contents_case_insensitive = dict( |
55 |
+ (k.lower(), v) for k, v in self.getcontents().items()) |
56 |
+ self._contents_case_reverse_map = dict( |
57 |
+ (k.lower(), k) for k in self.getcontents()) |
58 |
+ |
59 |
+ def _contents_iter_case_insensitive(self): |
60 |
+ if self._contents_case_insensitive is None: |
61 |
+ self._contents_case_insensitive_init() |
62 |
+ return iter(self._contents_case_insensitive) |
63 |
+ |
64 |
+ def _contents_key_case_insensitive(self, key): |
65 |
+ if self._contents_case_reverse_map is None: |
66 |
+ self._contents_case_insensitive_init() |
67 |
+ return self._contents_case_reverse_map[key] |
68 |
+ |
69 |
+ def _contents_contains_case_insensitive(self, key): |
70 |
+ if self._contents_case_insensitive is None: |
71 |
+ self._contents_case_insensitive_init() |
72 |
+ return key.lower() in self._contents_case_insensitive |
73 |
+ |
74 |
+ def _contents_key_case_sensitive(self, key): |
75 |
+ return key |
76 |
+ |
77 |
+ def _contents_iter_case_sensitive(self): |
78 |
+ return iter(self.getcontents()) |
79 |
+ |
80 |
+ def _contents_contains_case_sensitive(self, key): |
81 |
+ return key in self.getcontents() |
82 |
+ |
83 |
def _prune_plib_registry(self, unmerge=False, |
84 |
needed=None, preserve_paths=None): |
85 |
# remove preserved libraries that don't have any consumers left |
86 |
-- |
87 |
2.0.4 |