On Wed, Oct 23, 2013 at 5:44 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote: > Antoine Pelisse <apelisse@xxxxxxxxx> writes: > >>> def c_style_unescape(string): >>> if string[0] == string[-1] == '"': >>> return string.decode('string-escape')[1:-1] >>> return string >>> >>> It's in git-remote-bzr.py. >> >> Yeah, that's certainly better, >> >> Thanks, > > OK, so an amended one will look like this? The commit message needs to be updated as well. > -- >8 -- > From: Antoine Pelisse <apelisse@xxxxxxxxx> > Subject: 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 result in the following situation: s/result/&s/ > - clone a mercurial repository with git > - Add a file with space: `mkdir dir/foo\ bar` - Add a file with space in a directory: `>dir/foo\ bar` > - Commit that new file, and push the change to mercurial > - The mercurial repository as now a new directory named '"dir', which > contains a file named 'foo bar"' I'm so ashamed I'd rather not report this one: s/as/has/ > Use python ast.literal_eval to unquote the string if it starts with ". 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 <apelisse@xxxxxxxxx> > Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> > --- > contrib/remote-helpers/git-remote-hg | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg > index 0194c67..85abbed 100755 > --- a/contrib/remote-helpers/git-remote-hg > +++ b/contrib/remote-helpers/git-remote-hg > @@ -678,6 +678,11 @@ def get_merge_files(repo, p1, p2, files): > f = { 'ctx' : repo[p1][e] } > files[e] = f > > +def c_style_unescape(string): > + if string[0] == string[-1] == '"': > + return string.decode('string-escape')[1:-1] > + return string > + > def parse_commit(parser): > global marks, blob_marks, parsed_refs > global mode > @@ -720,6 +725,7 @@ def parse_commit(parser): > f = { 'deleted' : True } > else: > die('Unknown file command: %s' % line) > + path = c_style_unescape(path).decode('utf-8') > files[path] = f > > # only export the commits if we are on an internal proxy repo That is consistent with git-remote-bzr, Thanks -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html