From: Zac Medico <zmedico@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Cc: Zac Medico <zmedico@gentoo.org>
Subject: [gentoo-portage-dev] [PATCH 1/2] dblink: case insensitive support for bug #524236
Date: Sun, 16 Nov 2014 02:41:54 -0800 [thread overview]
Message-ID: <1416134515-31943-1-git-send-email-zmedico@gentoo.org> (raw)
In-Reply-To: <5464F129.6080404@gentoo.org>
This adds dblink._contents_contains, _contents_iter, and _contents_key
methods that provide an interface for contents operations with "implicit"
case handling.
X-Gentoo-Bug: 524236
X-Gentoo-Url: https://bugs.gentoo.org/show_bug.cgi?id=524236
---
pym/portage/dbapi/vartree.py | 43 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 8b06f4c..2d1003f 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1515,6 +1515,8 @@ class dblink(object):
self.contentscache = None
self._contents_inodes = None
self._contents_basenames = None
+ self._contents_case_insensitive = None
+ self._contents_case_reverse_map = None
self._linkmap_broken = False
self._device_path_map = {}
self._hardlink_merge_map = {}
@@ -1526,6 +1528,15 @@ class dblink(object):
# compliance with RESTRICT=preserve-libs.
self._preserve_libs = "preserve-libs" in mysettings.features
+ if "case-insensitive-fs" in self.settings.features:
+ self._contents_key = self._contents_key_case_insensitive
+ self._contents_contains = self._contents_contains_case_insensitive
+ self._contents_iter = self._contents_iter_case_insensitive
+ else:
+ self._contents_key = self._contents_key_case_sensitive
+ self._contents_contains = self._contents_contains_case_sensitive
+ self._contents_iter = self._contents_iter_case_sensitive
+
def __hash__(self):
return hash(self._hash_key)
@@ -1612,6 +1623,8 @@ class dblink(object):
self.contentscache = None
self._contents_inodes = None
self._contents_basenames = None
+ self._contents_case_insensitive = None
+ self._contents_case_reverse_map = None
def getcontents(self):
"""
@@ -1716,6 +1729,36 @@ class dblink(object):
self.contentscache = pkgfiles
return pkgfiles
+ def _contents_case_insensitive_init(self):
+ self._contents_case_insensitive = dict(
+ (k.lower(), v) for k, v in self.getcontents().items())
+ self._contents_case_reverse_map = dict(
+ (k.lower(), k) for k in self.getcontents())
+
+ def _contents_iter_case_insensitive(self):
+ if self._contents_case_insensitive is None:
+ self._contents_case_insensitive_init()
+ return iter(self._contents_case_insensitive)
+
+ def _contents_key_case_insensitive(self, key):
+ if self._contents_case_reverse_map is None:
+ self._contents_case_insensitive_init()
+ return self._contents_case_reverse_map[key]
+
+ def _contents_contains_case_insensitive(self, key):
+ if self._contents_case_insensitive is None:
+ self._contents_case_insensitive_init()
+ return key.lower() in self._contents_case_insensitive
+
+ def _contents_key_case_sensitive(self, key):
+ return key
+
+ def _contents_iter_case_sensitive(self):
+ return iter(self.getcontents())
+
+ def _contents_contains_case_sensitive(self, key):
+ return key in self.getcontents()
+
def _prune_plib_registry(self, unmerge=False,
needed=None, preserve_paths=None):
# remove preserved libraries that don't have any consumers left
--
2.0.4
next prev parent reply other threads:[~2014-11-16 10:42 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-13 1:22 [gentoo-portage-dev] [PATCH] FEATURES=case-insensitive-fs for bug #524236 Zac Medico
2014-11-13 10:29 ` Alexander Berntsen
2014-11-13 17:58 ` Zac Medico
2014-11-16 10:41 ` Zac Medico [this message]
2014-11-16 10:41 ` [gentoo-portage-dev] [PATCH 2/2] " Zac Medico
2014-11-16 18:11 ` [gentoo-portage-dev] [PATCH 1/2] dblink: case insensitive support " Brian Dolbec
2014-11-17 1:29 ` [gentoo-portage-dev] [PATCH v2 " Zac Medico
2014-11-17 1:29 ` [gentoo-portage-dev] [PATCH v2 2/2] FEATURES=case-insensitive-fs " Zac Medico
2014-11-17 4:58 ` [gentoo-portage-dev] [PATCH v2 1/2] dblink: case insensitive support " Brian Dolbec
2014-11-17 20:29 ` [gentoo-portage-dev] [PATCH v3 " Zac Medico
2014-11-17 20:29 ` [gentoo-portage-dev] [PATCH v3 2/2] FEATURES=case-insensitive-fs " Zac Medico
2014-11-17 22:09 ` [gentoo-portage-dev] [PATCH v3 1/2] dblink: case insensitive support " Brian Dolbec
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1416134515-31943-1-git-send-email-zmedico@gentoo.org \
--to=zmedico@gentoo.org \
--cc=gentoo-portage-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox