Mercurial > hg
changeset 25749:f2748cc43b2a
convert: support multiple specifed revs in git source
This allows specifying multiple revs/branches to convert from a git repo.
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 08 Jul 2015 10:29:11 -0700 |
parents | baea47cafe75 |
children | c9093d4d1ff6 |
files | hgext/convert/git.py tests/test-convert-git.t |
diffstat | 2 files changed, 42 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/convert/git.py Wed Jul 08 10:27:43 2015 -0700 +++ b/hgext/convert/git.py Wed Jul 08 10:29:11 2015 -0700 @@ -89,10 +89,6 @@ def __init__(self, ui, path, revs=None): super(convert_git, self).__init__(ui, path, revs=revs) - if revs and len(revs) > 1: - raise util.Abort(_("git source does not support specifying " - "multiple revs")) - if os.path.isdir(path + "/.git"): path += "/.git" if not os.path.exists(path + "/objects"): @@ -126,12 +122,15 @@ if not self.revs: heads, ret = self.gitread('git rev-parse --branches --remotes') heads = heads.splitlines() + if ret: + raise util.Abort(_('cannot retrieve git heads')) else: - heads, ret = self.gitread("git rev-parse --verify %s" % - self.revs[0]) - heads = [heads[:-1]] - if ret: - raise util.Abort(_('cannot retrieve git heads')) + heads = [] + for rev in self.revs: + rawhead, ret = self.gitread("git rev-parse --verify %s" % rev) + heads.append(rawhead[:-1]) + if ret: + raise util.Abort(_('cannot retrieve git head "%s"') % rev) return heads def catfile(self, rev, type):
--- a/tests/test-convert-git.t Wed Jul 08 10:27:43 2015 -0700 +++ b/tests/test-convert-git.t Wed Jul 08 10:29:11 2015 -0700 @@ -442,6 +442,40 @@ abort: --sourcesort is not supported by this data source [255] +test converting certain branches + + $ mkdir git-testrevs + $ cd git-testrevs + $ git init + Initialized empty Git repository in $TESTTMP/git-testrevs/.git/ + $ echo a >> a ; git add a > /dev/null; git commit -m 'first' > /dev/null + $ echo a >> a ; git add a > /dev/null; git commit -m 'master commit' > /dev/null + $ git checkout -b goodbranch 'HEAD^' + Switched to a new branch 'goodbranch' + $ echo a >> b ; git add b > /dev/null; git commit -m 'good branch commit' > /dev/null + $ git checkout -b badbranch 'HEAD^' + Switched to a new branch 'badbranch' + $ echo a >> c ; git add c > /dev/null; git commit -m 'bad branch commit' > /dev/null + $ cd .. + $ hg convert git-testrevs hg-testrevs --rev master --rev goodbranch + initializing destination hg-testrevs repository + scanning source... + sorting... + converting... + 2 first + 1 good branch commit + 0 master commit + updating bookmarks + $ cd hg-testrevs + $ hg log -G -T '{rev} {bookmarks}' + o 2 master + | + | o 1 goodbranch + |/ + o 0 + + $ cd .. + test sub modules $ mkdir git-repo5