Index: scm.py |
=================================================================== |
--- scm.py (revision 35830) |
+++ scm.py (working copy) |
@@ -4,6 +4,7 @@ |
"""SCM-specific utility classes.""" |
+import glob |
import os |
import re |
import shutil |
@@ -19,6 +20,26 @@ |
is not None) |
+def GetCasedPath(path): |
+ """Elcheapos way to get the real path case on Windows.""" |
+ if sys.platform.startswith('win') and os.path.exists(path): |
+ # Reconstruct the path. |
+ path = os.path.abspath(path) |
+ paths = path.split('\\') |
bradn
2010/01/08 23:09:23
\\ -> os.pathsep
eh, whatever
|
+ for i in range(len(paths)): |
+ if i == 0: |
+ # Skip drive letter. |
+ continue |
+ subpath = '\\'.join(paths[:i+1]) |
+ prev = len('\\'.join(paths[:i])) |
+ # glob.glob will return the cased path for the last item only. This is why |
+ # we are calling it in a loop. Extract the data we want and put it back |
+ # into the list. |
+ paths[i] = glob.glob(subpath + '*')[0][prev+1:len(subpath)] |
bradn
2010/01/08 23:09:23
Can you drop the '*' come to think of it, glob sho
bradn
2010/01/08 23:09:23
actually what happens if its the shortname? oh yuc
|
+ path = '\\'.join(paths) |
+ return path |
+ |
+ |
class GIT(object): |
COMMAND = "git" |
@@ -587,7 +608,6 @@ |
file_content = ['+' + i for i in file_content.splitlines(True)] |
nb_lines = len(file_content) |
# We need to use / since patch on unix will fail otherwise. |
- filename = filename.replace('\\', '/') |
data = "Index: %s\n" % filename |
data += '=' * 67 + '\n' |
# Note: Should we use /dev/null instead? |
@@ -616,10 +636,11 @@ |
The diff will always use relative paths. |
""" |
previous_cwd = os.getcwd() |
- root = os.path.join(root or SVN.GetCheckoutRoot(previous_cwd), '') |
+ root = root or SVN.GetCheckoutRoot(previous_cwd) |
+ root = os.path.normcase(os.path.join(root, '')) |
def RelativePath(path, root): |
"""We must use relative paths.""" |
- if path.startswith(root): |
+ if os.path.normcase(path).startswith(root): |
return path[len(root):] |
return path |
try: |
@@ -707,4 +728,4 @@ |
"Repository Root") != cur_dir_repo_root): |
break |
directory = parent |
- return directory |
+ return GetCasedPath(directory) |