Mercurial > hg
changeset 16105:ebaa0aa749e2 stable
convert: turn splicemap into a simple dictionary
Parsing the splicemap as a mapfile was a pain because map does not let us
override its parsing code and splicemap entries are not key/values. Besides we
had no need for mapfiles extra features. Just parse the splicemap and return a
dictionary.
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Fri, 10 Feb 2012 22:25:49 +0100 |
parents | 3e1efb458e8b |
children | d75aa756149b |
files | hgext/convert/common.py hgext/convert/convcmd.py tests/test-convert-splicemap.t |
diffstat | 3 files changed, 26 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/convert/common.py Fri Feb 10 14:46:09 2012 +0100 +++ b/hgext/convert/common.py Fri Feb 10 22:25:49 2012 +0100 @@ -407,3 +407,25 @@ if self.fp: self.fp.close() self.fp = None + +def parsesplicemap(path): + """Parse a splicemap, return a child/parents dictionary.""" + m = {} + try: + fp = open(path, 'r') + for i, line in enumerate(fp): + try: + child, parents = line.splitlines()[0].rstrip().rsplit(' ', 1) + parents = parents.replace(',', ' ').split() + except ValueError: + raise util.Abort(_('syntax error in %s(%d): child parent1' + '[,parent2] expected') % (path, i + 1)) + pp = [] + for p in parents: + if p not in pp: + pp.append(p) + m[child] = pp + except IOError, e: + if e.errno != errno.ENOENT: + raise + return m
--- a/hgext/convert/convcmd.py Fri Feb 10 14:46:09 2012 +0100 +++ b/hgext/convert/convcmd.py Fri Feb 10 22:25:49 2012 +0100 @@ -15,7 +15,7 @@ from gnuarch import gnuarch_source from bzr import bzr_source from p4 import p4_source -import filemap +import filemap, common import os, shutil from mercurial import hg, util, encoding @@ -118,7 +118,7 @@ self.readauthormap(opts.get('authormap')) self.authorfile = self.dest.authorfile() - self.splicemap = mapfile(ui, opts.get('splicemap')) + self.splicemap = common.parsesplicemap(opts.get('splicemap')) self.branchmap = mapfile(ui, opts.get('branchmap')) def walktree(self, heads): @@ -319,7 +319,7 @@ self.commitcache[prev].branch)) self.dest.setbranch(commit.branch, pbranches) try: - parents = self.splicemap[rev].replace(',', ' ').split() + parents = self.splicemap[rev] self.ui.status(_('spliced in %s as parents of %s\n') % (parents, rev)) parents = [self.map.get(p, p) for p in parents]
--- a/tests/test-convert-splicemap.t Fri Feb 10 14:46:09 2012 +0100 +++ b/tests/test-convert-splicemap.t Fri Feb 10 22:25:49 2012 +0100 @@ -43,7 +43,7 @@ > $CHILDID2 > EOF $ hg convert --splicemap splicemap repo2 repo1 - abort: syntax error in splicemap(1): key/value pair expected + abort: syntax error in splicemap(1): child parent1[,parent2] expected [255] splice repo2 on repo1