~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Aaron Bentley
  • Date: 2005-07-26 14:06:11 UTC
  • mto: (1092.1.41) (1185.3.4) (974.1.47)
  • mto: This revision was merged to the branch mainline in revision 982.
  • Revision ID: abentley@panoramicfeedback.com-20050726140611-403e366f3c79c1f1
Fixed python invocation

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
 
41
44
def quotefn(f):
42
45
    """Return a quoted filename filename
43
46
 
98
101
    finally:
99
102
        outf.close()
100
103
 
 
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
 
101
115
 
102
116
 
103
117
 
120
134
 
121
135
def is_inside(dir, fname):
122
136
    """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
123
150
    """
124
 
    return os.path.commonprefix([dir, fname]) == dir
 
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)
125
161
 
126
162
 
127
163
def is_inside_any(dir_list, fname):
128
164
    """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
 
    
133
165
    for dirname in dir_list:
134
166
        if is_inside(dirname, fname):
135
167
            return True