~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-07-07 10:22:02 UTC
  • Revision ID: mbp@sourcefrog.net-20050707102201-2d2a13a25098b101
- rearrange and clear up merged weave

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
 
101
98
    finally:
102
99
        outf.close()
103
100
 
104
 
def rename(path_from, path_to):
105
 
    """Basically the same as os.rename() just special for win32"""
106
 
    if sys.platform == 'win32':
107
 
        try:
108
 
            os.remove(path_to)
109
 
        except OSError, e:
110
 
            if e.errno != e.ENOENT:
111
 
                raise
112
 
    os.rename(path_from, path_to)
113
 
 
114
 
 
115
101
 
116
102
 
117
103
 
134
120
 
135
121
def is_inside(dir, fname):
136
122
    """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
123
    """
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)
 
124
    return os.path.commonprefix([dir, fname]) == dir
170
125
 
171
126
 
172
127
def is_inside_any(dir_list, fname):
173
128
    """True if fname is inside any of given dirs."""
 
129
    # quick scan for perfect match
 
130
    if fname in dir_list:
 
131
        return True
 
132
    
174
133
    for dirname in dir_list:
175
134
        if is_inside(dirname, fname):
176
135
            return True
367
326
        tt = time.localtime(t)
368
327
        offset = local_time_offset(t)
369
328
    else:
370
 
        raise BzrError("unsupported timezone format %r" % timezone,
371
 
                       ['options are "utc", "original", "local"'])
 
329
        raise BzrError("unsupported timezone format %r",
 
330
                ['options are "utc", "original", "local"'])
372
331
 
373
332
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
374
333
            + ' %+03d%02d' % (offset / 3600, (offset / 60) % 60))