[Pkg-bazaar-commits] ./bzr/unstable r969: - Add less-sucky is_within_any
Martin Pool
mbp at sourcefrog.net
Fri Apr 10 08:21:38 UTC 2009
------------------------------------------------------------
revno: 969
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Fri 2005-07-22 21:18:14 -0300
message:
- Add less-sucky is_within_any
modified:
bzrlib/osutils.py
bzrlib/selftest/__init__.py
bzrlib/selftest/testinv.py
-------------- next part --------------
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py 2005-07-11 07:33:45 +0000
+++ b/bzrlib/osutils.py 2005-07-23 00:18:14 +0000
@@ -38,6 +38,9 @@
_QUOTE_RE = re.compile(r'([^a-zA-Z0-9.,:/_~-])')
+
+_SLASH_RE = re.compile(r'[\\/]+')
+
def quotefn(f):
"""Return a quoted filename filename
@@ -131,9 +134,29 @@
def is_inside(dir, fname):
"""True if fname is inside dir.
+
+ The parameters should typically be passed to os.path.normpath first, so
+ that . and .. and repeated slashes are eliminated, and the separators
+ are canonical for the platform.
+
+ >>> is_inside('src', 'src/foo.c')
+ True
+ >>> is_inside('src', 'srccontrol')
+ False
+ >>> is_inside('src', 'src/a/a/a/foo.c')
+ True
+ >>> is_inside('foo.c', 'foo.c')
+ True
"""
- return os.path.commonprefix([dir, fname]) == dir
-
+ # XXX: Most callers of this can actually do something smarter by
+ # looking at the inventory
+
+ dir = dir.split(os.sep)
+ pl = len(dir)
+ fname = fname.split(os.sep)
+
+ return (len(fname) >= pl) and (dir == fname[:pl])
+
def is_inside_any(dir_list, fname):
"""True if fname is inside any of given dirs."""
=== modified file 'bzrlib/selftest/__init__.py'
--- a/bzrlib/selftest/__init__.py 2005-07-22 23:31:09 +0000
+++ b/bzrlib/selftest/__init__.py 2005-07-23 00:18:14 +0000
@@ -47,7 +47,8 @@
bzrlib.osutils, bzrlib.commands, bzrlib.merge3):
if m not in MODULES_TO_DOCTEST:
MODULES_TO_DOCTEST.append(m)
-
+
+ # ugly ugly!
for m in (bzrlib.selftest.whitebox,
bzrlib.selftest.versioning,
bzrlib.selftest.testinv,
=== modified file 'bzrlib/selftest/testinv.py'
--- a/bzrlib/selftest/testinv.py 2005-07-22 23:58:11 +0000
+++ b/bzrlib/selftest/testinv.py 2005-07-23 00:18:14 +0000
@@ -18,6 +18,7 @@
from bzrlib.inventory import Inventory, InventoryEntry
+
class TestIsWithin(TestBase):
def runTest(self):
from bzrlib.osutils import is_inside_any
@@ -28,6 +29,11 @@
]:
self.assert_(is_inside_any(dirs, fn))
+ for dirs, fn in [(['src'], 'srccontrol'),
+ (['src'], 'srccontrol/foo')]:
+ self.assertFalse(is_inside_any(dirs, fn))
+
+
class TestInventoryIds(TestBase):
def runTest(self):
More information about the Pkg-bazaar-commits
mailing list