public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
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



  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