~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-07-22 23:31:09 UTC
  • Revision ID: mbp@sourcefrog.net-20050722233109-7b030502e5311685
- selftest is less verbose by default, and takes a -v option if you want it

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
 
    The empty string as a dir name is taken as top-of-tree and matches 
143
 
    everything.
144
 
    
145
 
    >>> is_inside('src', 'src/foo.c')
146
 
    True
147
 
    >>> is_inside('src', 'srccontrol')
148
 
    False
149
 
    >>> is_inside('src', 'src/a/a/a/foo.c')
150
 
    True
151
 
    >>> is_inside('foo.c', 'foo.c')
152
 
    True
153
 
    >>> is_inside('foo.c', '')
154
 
    False
155
 
    >>> is_inside('', 'foo.c')
156
 
    True
157
134
    """
158
 
    # XXX: Most callers of this can actually do something smarter by 
159
 
    # looking at the inventory
160
 
    if dir == fname:
161
 
        return True
162
 
    
163
 
    if dir == '':
164
 
        return True
165
 
    
166
 
    if dir[-1] != os.sep:
167
 
        dir += os.sep
168
 
    
169
 
    return fname.startswith(dir)
 
135
    return os.path.commonprefix([dir, fname]) == dir
170
136
 
171
137
 
172
138
def is_inside_any(dir_list, fname):
173
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
    
174
144
    for dirname in dir_list:
175
145
        if is_inside(dirname, fname):
176
146
            return True
367
337
        tt = time.localtime(t)
368
338
        offset = local_time_offset(t)
369
339
    else:
370
 
        raise BzrError("unsupported timezone format %r" % timezone,
371
 
                       ['options are "utc", "original", "local"'])
 
340
        raise BzrError("unsupported timezone format %r",
 
341
                ['options are "utc", "original", "local"'])
372
342
 
373
343
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
374
344
            + ' %+03d%02d' % (offset / 3600, (offset / 60) % 60))