From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 951771389F5 for ; Sun, 16 Nov 2014 10:42:20 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 71729E09CD; Sun, 16 Nov 2014 10:42:19 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 09482E09BF for ; Sun, 16 Nov 2014 10:42:18 +0000 (UTC) Received: from localhost.localdomain (ip70-181-96-121.oc.oc.cox.net [70.181.96.121]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: zmedico) by smtp.gentoo.org (Postfix) with ESMTPSA id 131B73404BB; Sun, 16 Nov 2014 10:42:18 +0000 (UTC) From: Zac Medico To: gentoo-portage-dev@lists.gentoo.org Cc: Zac Medico Subject: [gentoo-portage-dev] [PATCH 1/2] dblink: case insensitive support for bug #524236 Date: Sun, 16 Nov 2014 02:41:54 -0800 Message-Id: <1416134515-31943-1-git-send-email-zmedico@gentoo.org> X-Mailer: git-send-email 2.0.4 In-Reply-To: <5464F129.6080404@gentoo.org> References: <5464F129.6080404@gentoo.org> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-portage-dev@lists.gentoo.org Reply-to: gentoo-portage-dev@lists.gentoo.org X-Archives-Salt: 187fab42-d30f-4b89-815d-e186fc61a191 X-Archives-Hash: 3f9d0c30f96fc448dd822d414f8992fa 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