equal
deleted
inserted
replaced
1 import os, errno, stat |
1 import os, errno, stat, posixpath |
2 |
2 |
3 import encoding |
3 import encoding |
4 import util |
4 import util |
5 from i18n import _ |
5 from i18n import _ |
6 |
6 |
186 if len(p) != len(os.sep): |
186 if len(p) != len(os.sep): |
187 return path + os.sep |
187 return path + os.sep |
188 else: |
188 else: |
189 return path |
189 return path |
190 |
190 |
191 def join(path, *paths): |
191 def join(*args): |
192 '''Join two or more pathname components, inserting '/' as needed. |
192 '''Join two or more pathname components, inserting '/' as needed. |
193 |
193 |
194 Based on the posix os.path.join() implementation. |
194 Based on the posix os.path.join() implementation. |
195 |
195 |
196 >>> join('foo', 'bar') |
196 >>> join('foo', 'bar') |
212 >>> join('', '', '') |
212 >>> join('', '', '') |
213 '' |
213 '' |
214 >>> join ('foo', '', '', 'bar') |
214 >>> join ('foo', '', '', 'bar') |
215 'foo/bar' |
215 'foo/bar' |
216 ''' |
216 ''' |
217 sep = '/' |
217 return posixpath.join(*args) |
218 if not paths: |
|
219 path[:0] + sep #23780: Ensure compatible data type even if p is null. |
|
220 for piece in paths: |
|
221 if piece.startswith(sep): |
|
222 path = piece |
|
223 elif not path or path.endswith(sep): |
|
224 path += piece |
|
225 else: |
|
226 path += sep + piece |
|
227 return path |
|
228 |
218 |
229 def dirname(path): |
219 def dirname(path): |
230 '''returns the directory portion of the given path |
220 '''returns the directory portion of the given path |
231 |
221 |
232 Based on the posix os.path.split() implementation. |
222 Based on the posix os.path.split() implementation. |
244 >>> dirname('/foo//bar/poo') |
234 >>> dirname('/foo//bar/poo') |
245 '/foo//bar' |
235 '/foo//bar' |
246 >>> dirname('/foo//bar') |
236 >>> dirname('/foo//bar') |
247 '/foo' |
237 '/foo' |
248 ''' |
238 ''' |
249 sep = '/' |
239 return posixpath.dirname(path) |
250 i = path.rfind(sep) + 1 |
|
251 dirname = path[:i] |
|
252 if dirname and dirname != sep * len(dirname): |
|
253 dirname = dirname.rstrip(sep) |
|
254 return dirname |
|