~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-07-15 23:35:18 UTC
  • Revision ID: mbp@sourcefrog.net-20050715233518-04217797d302244f
- optimization for Inventory.id2path; access byid map directly rather than 
  through the __getitem__ on the inventory; rather faster

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
 
39
39
 
40
40
_QUOTE_RE = re.compile(r'([^a-zA-Z0-9.,:/_~-])')
41
 
 
42
 
_SLASH_RE = re.compile(r'[\\/]+')
43
 
 
44
41
def quotefn(f):
45
42
    """Return a quoted filename filename
46
43
 
134
131
 
135
132
def is_inside(dir, fname):
136
133
    """True if fname is inside dir.
137
 
    
138
 
    The parameters should typically be passed to os.path.normpath first, so
139
 
    that . and .. and repeated slashes are eliminated, and the separators
140
 
    are canonical for the platform.
141
 
    
142
 
    >>> is_inside('src', 'src/foo.c')
143
 
    True
144
 
    >>> is_inside('src', 'srccontrol')
145
 
    False
146
 
    >>> is_inside('src', 'src/a/a/a/foo.c')
147
 
    True
148
 
    >>> is_inside('foo.c', 'foo.c')
149
 
    True
150
134
    """
151
 
    # XXX: Most callers of this can actually do something smarter by 
152
 
    # looking at the inventory
153
 
 
154
 
    if dir == fname:
155
 
        return True
156
 
    
157
 
    if dir[-1] != os.sep:
158
 
        dir += os.sep
159
 
    
160
 
    return fname.startswith(dir)
 
135
    return os.path.commonprefix([dir, fname]) == dir
161
136
 
162
137
 
163
138
def is_inside_any(dir_list, fname):
164
139
    """True if fname is inside any of given dirs."""
 
140
    # quick scan for perfect match
 
141
    if fname in dir_list:
 
142
        return True
 
143
    
165
144
    for dirname in dir_list:
166
145
        if is_inside(dirname, fname):
167
146
            return True