Re: [PATCH 13/16] remote-hg: allow refs with spaces
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 22, 2013, 22:32 UTC
- Message-ID
- <7v61zenqm4.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1366667724-567-14-git-send-email-felipe.contreras@gmail.com>
Felipe Contreras <felipe.contreras@gmail.com> writes:
> Mercurial supports them, Git doesn't.
Another important thing to note is that you represent a SP with three underscores on our side, no?
Show 97 quoted lines
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
> ---
> contrib/remote-helpers/git-remote-hg | 25 +++++++++++++++++--------
> 1 file changed, 17 insertions(+), 8 deletions(-)
>
> diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg
> index dbb4091..6f4afd7 100755
> --- a/contrib/remote-helpers/git-remote-hg
> +++ b/contrib/remote-helpers/git-remote-hg
> @@ -75,6 +75,12 @@ def hgmode(mode):
> def hghex(node):
> return hg.node.hex(node)
>
> +def hgref(ref):
> + return ref.replace('___', ' ')
> +
> +def gitref(ref):
> + return ref.replace(' ', '___')
> +
> def get_config(config):
> cmd = ['git', 'config', '--get', config]
> process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
> @@ -437,10 +443,10 @@ def export_ref(repo, name, kind, head):
> marks.set_tip(ename, rev)
>
> def export_tag(repo, tag):
> - export_ref(repo, tag, 'tags', repo[tag])
> + export_ref(repo, tag, 'tags', repo[hgref(tag)])
>
> def export_bookmark(repo, bmark):
> - head = bmarks[bmark]
> + head = bmarks[hgref(bmark)]
> export_ref(repo, bmark, 'bookmarks', head)
>
> def export_branch(repo, branch):
> @@ -479,14 +485,14 @@ def branch_tip(repo, branch):
> def get_branch_tip(repo, branch):
> global branches
>
> - heads = branches.get(branch, None)
> + heads = branches.get(hgref(branch), None)
> if not heads:
> return None
>
> # verify there's only one head
> if (len(heads) > 1):
> warn("Branch '%s' has more than one head, consider merging" % branch)
> - return branch_tip(repo, branch)
> + return branch_tip(repo, hgref(branch))
>
> return heads[0]
>
> @@ -508,6 +514,7 @@ def list_head(repo, cur):
> head = 'master'
> bmarks[head] = node
>
> + head = gitref(head)
> print "@refs/heads/%s HEAD" % head
> g_head = (head, node)
>
> @@ -529,15 +536,15 @@ def do_list(parser):
> branches[branch] = heads
>
> for branch in branches:
> - print "? refs/heads/branches/%s" % branch
> + print "? refs/heads/branches/%s" % gitref(branch)
>
> for bmark in bmarks:
> - print "? refs/heads/%s" % bmark
> + print "? refs/heads/%s" % gitref(bmark)
>
> for tag, node in repo.tagslist():
> if tag == 'tip':
> continue
> - print "? refs/tags/%s" % tag
> + print "? refs/tags/%s" % gitref(tag)
>
> print
>
> @@ -674,7 +681,8 @@ def parse_commit(parser):
>
> # Check if the ref is supposed to be a named branch
> if ref.startswith('refs/heads/branches/'):
> - extra['branch'] = ref[len('refs/heads/branches/'):]
> + branch = ref[len('refs/heads/branches/'):]
> + extra['branch'] = hgref(branch)
>
> if mode == 'hg':
> i = data.find('\n--HG--\n')
> @@ -803,6 +811,7 @@ def do_export(parser):
> continue
> elif ref.startswith('refs/tags/'):
> tag = ref[len('refs/tags/'):]
> + tag = hgref(tag)
> author, msg = parsed_tags.get(tag, (None, None))
> if mode == 'git':
> if not msg: