Commit e62b4034 authored by Yasuhiro Matsumoto's avatar Yasuhiro Matsumoto Committed by Russ Cox

codereview: fix path slash issue.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5487057
parent 0e9ee93c
...@@ -1065,25 +1065,30 @@ class uiwrap(object): ...@@ -1065,25 +1065,30 @@ class uiwrap(object):
ui.verbose = self.oldVerbose ui.verbose = self.oldVerbose
return ui.popbuffer() return ui.popbuffer()
def to_slash(path):
if sys.platform == "win32":
return path.replace('\\', '/')
return path
def hg_matchPattern(ui, repo, *pats, **opts): def hg_matchPattern(ui, repo, *pats, **opts):
w = uiwrap(ui) w = uiwrap(ui)
hg_commands.status(ui, repo, *pats, **opts) hg_commands.status(ui, repo, *pats, **opts)
text = w.output() text = w.output()
ret = [] ret = []
prefix = os.path.realpath(repo.root)+'/' prefix = to_slash(os.path.realpath(repo.root))+'/'
for line in text.split('\n'): for line in text.split('\n'):
f = line.split() f = line.split()
if len(f) > 1: if len(f) > 1:
if len(pats) > 0: if len(pats) > 0:
# Given patterns, Mercurial shows relative to cwd # Given patterns, Mercurial shows relative to cwd
p = os.path.realpath(f[1]) p = to_slash(os.path.realpath(f[1]))
if not p.startswith(prefix): if not p.startswith(prefix):
print >>sys.stderr, "File %s not in repo root %s.\n" % (p, prefix) print >>sys.stderr, "File %s not in repo root %s.\n" % (p, prefix)
else: else:
ret.append(p[len(prefix):]) ret.append(p[len(prefix):])
else: else:
# Without patterns, Mercurial shows relative to root (what we want) # Without patterns, Mercurial shows relative to root (what we want)
ret.append(f[1]) ret.append(to_slash(f[1]))
return ret return ret
def hg_heads(ui, repo): def hg_heads(ui, repo):
...@@ -3139,7 +3144,7 @@ class VersionControlSystem(object): ...@@ -3139,7 +3144,7 @@ class VersionControlSystem(object):
unused, filename = line.split(':', 1) unused, filename = line.split(':', 1)
# On Windows if a file has property changes its filename uses '\' # On Windows if a file has property changes its filename uses '\'
# instead of '/'. # instead of '/'.
filename = filename.strip().replace('\\', '/') filename = to_slash(filename.strip())
files[filename] = self.GetBaseFile(filename) files[filename] = self.GetBaseFile(filename)
return files return files
...@@ -3357,7 +3362,7 @@ class MercurialVCS(VersionControlSystem): ...@@ -3357,7 +3362,7 @@ class MercurialVCS(VersionControlSystem):
# A path # A path
# M path # M path
# etc # etc
line = self.status[i].replace('\\', '/') line = to_slash(self.status[i])
if line[2:] == path: if line[2:] == path:
if i+1 < len(self.status) and self.status[i+1][:2] == ' ': if i+1 < len(self.status) and self.status[i+1][:2] == ' ':
return self.status[i:i+2] return self.status[i:i+2]
...@@ -3424,7 +3429,7 @@ def SplitPatch(data): ...@@ -3424,7 +3429,7 @@ def SplitPatch(data):
# When a file is modified, paths use '/' between directories, however # When a file is modified, paths use '/' between directories, however
# when a property is modified '\' is used on Windows. Make them the same # when a property is modified '\' is used on Windows. Make them the same
# otherwise the file shows up twice. # otherwise the file shows up twice.
temp_filename = temp_filename.strip().replace('\\', '/') temp_filename = to_slash(temp_filename.strip())
if temp_filename != filename: if temp_filename != filename:
# File has property changes but no modifications, create a new diff. # File has property changes but no modifications, create a new diff.
new_filename = temp_filename new_filename = temp_filename
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment