diff --git a/hggit/git_handler.py b/hggit/git_handler.py index 0178dc6409..08b1849341 100644 --- a/hggit/git_handler.py +++ b/hggit/git_handler.py @@ -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('^{}') diff --git a/tests/test-pull.t b/tests/test-pull.t index 536c40b44e..3396f11de8 100644 --- a/tests/test-pull.t +++ b/tests/test-pull.t @@ -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 + | 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 + | 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 + | | date: Mon Jan 01 00:00:13 2007 +0000 + | | summary: Merge branch 'beta' + | | + | o changeset: 3:56cabe48c4b0 + | | parent: 0:3442585be8a6 + | | user: test + | | 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 + | | 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 + | 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 + date: Mon Jan 01 00:00:10 2007 +0000 + summary: add alpha +