Skip to content

Commit 1136265

Browse files
apelissegitster
authored andcommitted
remote-hg: unquote C-style paths when exporting
git-fast-import documentation says that paths can be C-style quoted. Unfortunately, the current remote-hg helper doesn't unquote quoted path and pass them as-is to Mercurial when the commit is created. This results in the following situation: - clone a mercurial repository with git - add a file with space in a directory: `>dir/foo\ bar` - commit that new file, and push the change to mercurial - the mercurial repository now has a new directory named '"dir', which contains a file named 'foo bar"' Use Python str.decode('string-escape') to unquote the string if it starts and ends with ". It has been tested with quotes, spaces, and utf-8 encoded file-names. Signed-off-by: Antoine Pelisse <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5f737ac commit 1136265

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

contrib/remote-helpers/git-remote-hg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,11 @@ def get_merge_files(repo, p1, p2, files):
678678
f = { 'ctx' : repo[p1][e] }
679679
files[e] = f
680680

681+
def c_style_unescape(string):
682+
if string[0] == string[-1] == '"':
683+
return string.decode('string-escape')[1:-1]
684+
return string
685+
681686
def parse_commit(parser):
682687
global marks, blob_marks, parsed_refs
683688
global mode
@@ -720,6 +725,7 @@ def parse_commit(parser):
720725
f = { 'deleted' : True }
721726
else:
722727
die('Unknown file command: %s' % line)
728+
path = c_style_unescape(path).decode('utf-8')
723729
files[path] = f
724730

725731
# only export the commits if we are on an internal proxy repo

0 commit comments

Comments
 (0)