Re: Re* [PATCH] remote-hg: unquote C-style paths when exporting
- From
Antoine Pelisse <apelisse@gmail.com>
- Date
- Oct 23, 2013, 15:53 UTC
- Message-ID
- <CALWbr2z-+S_rNFEKNH2fYJQmn1z9SyO2Z4sNDoz=Kh8P8Y_ccQ@mail.gmail.com>
- In-Reply-To
- <xmqqa9i0rnzo.fsf_-_@gitster.dls.corp.google.com>
On Wed, Oct 23, 2013 at 5:44 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 14 quoted lines
> Antoine Pelisse <apelisse@gmail.com> 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.
Show 9 quoted lines
> -- >8 -- > From: Antoine Pelisse <apelisse@gmail.com> > 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 ".
Show 32 quoted lines
> It has been tested with quotes, spaces, and utf-8 encoded file-names.
>
> Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> 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 repoThat is consistent with git-remote-bzr,
Thanks