diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -29,6 +29,39 @@ def recode(s): else: return s.decode('utf-8').encode(orig_encoding, 'replace') +def mapbranch(branch, branchmap): + ''' + >>> bmap = {'default': 'branch1'} + >>> for i in ['', None]: + ... mapbranch(i, bmap) + 'branch1' + 'branch1' + >>> bmap = {'None': 'branch2'} + >>> for i in ['', None]: + ... mapbranch(i, bmap) + 'branch2' + 'branch2' + >>> bmap = {'None': 'branch3', 'default': 'branch4'} + >>> for i in ['None', '', None, 'default', 'branch5']: + ... mapbranch(i, bmap) + 'branch3' + 'branch4' + 'branch4' + 'branch4' + 'branch5' + ''' + # If branch is None or empty, this commit is coming from the source + # repository's default branch and destined for the default branch in the + # destination repository. For such commits, using a literal "default" + # in branchmap below allows the user to map "default" to an alternate + # default branch in the destination repository. + branch = branchmap.get(branch or 'default', branch) + # At some point we used "None" literal to denote the default branch, + # attempt to use that for backward compatibility. + if (not branch): + branch = branchmap.get(str(None), branch) + return branch + source_converters = [ ('cvs', convert_cvs, 'branchsort'), ('git', convert_git, 'branchsort'), @@ -377,12 +410,7 @@ class converter(object): def cachecommit(self, rev): commit = self.source.getcommit(rev) commit.author = self.authors.get(commit.author, commit.author) - # If commit.branch is None, this commit is coming from the source - # repository's default branch and destined for the default branch in the - # destination repository. For such commits, passing a literal "None" - # string to branchmap.get() below allows the user to map "None" to an - # alternate default branch in the destination repository. - commit.branch = self.branchmap.get(str(commit.branch), commit.branch) + commit.branch = mapbranch(commit.branch, self.branchmap) self.commitcache[rev] = commit return commit diff --git a/hgext/convert/p4.py b/hgext/convert/p4.py --- a/hgext/convert/p4.py +++ b/hgext/convert/p4.py @@ -140,7 +140,7 @@ class p4_source(converter_source): date = (int(d["time"]), 0) # timezone not set c = commit(author=self.recode(d["user"]), date=util.datestr(date, '%Y-%m-%d %H:%M:%S %1%2'), - parents=parents, desc=desc, branch='', + parents=parents, desc=desc, branch=None, extra={"p4": change}) files = [] diff --git a/tests/test-convert-svn-branches.t b/tests/test-convert-svn-branches.t --- a/tests/test-convert-svn-branches.t +++ b/tests/test-convert-svn-branches.t @@ -99,7 +99,7 @@ Test hg failing to call itself Convert 'trunk' to branch other than 'default' $ cat > branchmap < None hgtrunk + > default hgtrunk > > > EOF @@ -121,9 +121,8 @@ Convert 'trunk' to branch other than 'de 0 last change to a $ cd C-hg - $ hg branches - hgtrunk 10:745f063703b4 - old 9:aa50d7b8d922 - old2 8:c85a22267b6e (inactive) + $ hg branches --template '{branch}\n' + hgtrunk + old + old2 $ cd .. - diff --git a/tests/test-doctest.py b/tests/test-doctest.py --- a/tests/test-doctest.py +++ b/tests/test-doctest.py @@ -31,6 +31,7 @@ testmod('mercurial.ui') testmod('mercurial.url') testmod('mercurial.util') testmod('mercurial.util', testtarget='platform') +testmod('hgext.convert.convcmd') testmod('hgext.convert.cvsps') testmod('hgext.convert.filemap') testmod('hgext.convert.p4')