git_handler: support wildcards for Git branch name matching

This is quite similar to syntax Git supports. In the future maybe core
Mercurial could be extended to support this, but I think this independently
makes sense in hg-git.
This commit is contained in:
Siddharth Agarwal 2014-10-31 11:14:35 -07:00
parent 52c656bd2b
commit 079686eb01
2 changed files with 90 additions and 6 deletions

View File

@ -1055,13 +1055,20 @@ class GitHandler(object):
(r, r[r.find('/', r.find('/')+1)+1:])
for r in refs]
for h in heads:
r = [pair[0] for pair in stripped_refs if pair[1] == h]
if not r:
raise hgutil.Abort("ref %s not found on remote server" % h)
elif len(r) == 1:
filteredrefs.append(r[0])
if h.endswith('/*'):
prefix = h[:-1] # include the / but not the *
r = [pair[0] for pair in stripped_refs
if pair[1].startswith(prefix)]
r.sort()
filteredrefs.extend(r)
else:
raise hgutil.Abort("ambiguous reference %s: %r" % (h, r))
r = [pair[0] for pair in stripped_refs if pair[1] == h]
if not r:
raise hgutil.Abort("ref %s not found on remote server" % h)
elif len(r) == 1:
filteredrefs.append(r[0])
else:
raise hgutil.Abort("ambiguous reference %s: %r" % (h, r))
else:
for ref, sha in refs.iteritems():
if (not ref.endswith('^{}')

View File

@ -179,3 +179,80 @@ pull the merge
date: Mon Jan 01 00:00:10 2007 +0000
summary: add alpha
pull with wildcards
$ cd gitrepo
$ git checkout -qb releases/v1 master
$ echo zeta > zeta
$ git add zeta
$ fn_git_commit -m 'add zeta'
$ git checkout -qb releases/v2 master
$ echo eta > eta
$ git add eta
$ fn_git_commit -m 'add eta'
$ git checkout -qb notreleases/v1 master
$ echo theta > theta
$ git add theta
$ fn_git_commit -m 'add theta'
ensure that releases/v1 and releases/v2 are pulled but not notreleases/v1
$ cd ..
$ hg -R hgrepo pull -r 'releases/*'
pulling from $TESTTMP/gitrepo
importing git objects into hg
(run 'hg heads .' to see heads, 'hg merge' to merge)
$ hg -R hgrepo log --graph
o changeset: 6:bdc34645137e
| bookmark: releases/v2
| tag: default/releases/v2
| tag: tip
| parent: 4:892d20308ddf
| user: test <test@example.org>
| date: Mon Jan 01 00:00:15 2007 +0000
| summary: add eta
|
| o changeset: 5:3e35a45c61f9
|/ bookmark: releases/v1
| tag: default/releases/v1
| user: test <test@example.org>
| date: Mon Jan 01 00:00:14 2007 +0000
| summary: add zeta
|
o changeset: 4:892d20308ddf
|\ bookmark: master
| | tag: default/master
| | parent: 3:56cabe48c4b0
| | parent: 1:7bcd915dc873
| | user: test <test@example.org>
| | date: Mon Jan 01 00:00:13 2007 +0000
| | summary: Merge branch 'beta'
| |
| o changeset: 3:56cabe48c4b0
| | parent: 0:3442585be8a6
| | user: test <test@example.org>
| | date: Mon Jan 01 00:00:13 2007 +0000
| | summary: add gamma
| |
| | o changeset: 2:4d41070bf840
| |/ bookmark: delta
| | tag: default/delta
| | parent: 0:3442585be8a6
| | user: test <test@example.org>
| | date: Mon Jan 01 00:00:12 2007 +0000
| | summary: add delta
| |
o | changeset: 1:7bcd915dc873
|/ bookmark: beta
| tag: default/beta
| tag: t_beta
| user: test <test@example.org>
| date: Mon Jan 01 00:00:11 2007 +0000
| summary: add beta
|
@ changeset: 0:3442585be8a6
bookmark: epsilon
tag: default/epsilon
tag: t_alpha
user: test <test@example.org>
date: Mon Jan 01 00:00:10 2007 +0000
summary: add alpha