323 res += re.escape(c) |
323 res += re.escape(c) |
324 return head + res + tail |
324 return head + res + tail |
325 |
325 |
326 _globchars = {'[': 1, '{': 1, '*': 1, '?': 1} |
326 _globchars = {'[': 1, '{': 1, '*': 1, '?': 1} |
327 |
327 |
328 def pathto(n1, n2): |
328 def pathto(root, n1, n2): |
329 '''return the relative path from one place to another. |
329 '''return the relative path from one place to another. |
|
330 root should use os.sep to separate directories |
330 n1 should use os.sep to separate directories |
331 n1 should use os.sep to separate directories |
331 n2 should use "/" to separate directories |
332 n2 should use "/" to separate directories |
332 returns an os.sep-separated path. |
333 returns an os.sep-separated path. |
|
334 |
|
335 If n1 is a relative path, it's assumed it's |
|
336 relative to root. |
|
337 n2 should always be relative to root. |
333 ''' |
338 ''' |
334 if not n1: return localpath(n2) |
339 if not n1: return localpath(n2) |
|
340 if os.path.isabs(n1): |
|
341 if os.path.splitdrive(root)[0] != os.path.splitdrive(n1)[0]: |
|
342 return os.path.join(root, localpath(n2)) |
|
343 n2 = '/'.join((pconvert(root), n2)) |
335 a, b = n1.split(os.sep), n2.split('/') |
344 a, b = n1.split(os.sep), n2.split('/') |
336 a.reverse() |
345 a.reverse() |
337 b.reverse() |
346 b.reverse() |
338 while a and b and a[-1] == b[-1]: |
347 while a and b and a[-1] == b[-1]: |
339 a.pop() |
348 a.pop() |