~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:31:36 UTC
  • Revision ID: mbp@sourcefrog.net-20050707103135-9b4d911d8df6e880
- fix pwk help

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
 
    >>> 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
123
    """
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)
 
124
    return os.path.commonprefix([dir, fname]) == dir
161
125
 
162
126
 
163
127
def is_inside_any(dir_list, fname):
164
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
    
165
133
    for dirname in dir_list:
166
134
        if is_inside(dirname, fname):
167
135
            return True