convert: add parseclosemap method
This is a copy of the parsesplicemap method and will serve as a way to specify
which changesets to close while converting.
--- a/hgext/convert/convcmd.py Tue Jan 21 11:34:55 2014 -0600
+++ b/hgext/convert/convcmd.py Tue Jan 21 11:20:14 2014 -0600
@@ -120,6 +120,42 @@
self.splicemap = self.parsesplicemap(opts.get('splicemap'))
self.branchmap = mapfile(ui, opts.get('branchmap'))
+ self.closemap = self.parseclosemap(opts.get('closemap'))
+
+ def parseclosemap(self, path):
+ """ check and validate the closemap format and
+ return a list of revs to close.
+ Format checking has two parts.
+ 1. generic format which is same across all source types
+ 2. specific format checking which may be different for
+ different source type. This logic is implemented in
+ checkrevformat function in source files like
+ hg.py, subversion.py etc.
+ """
+
+ if not path:
+ return []
+ m = []
+ try:
+ fp = open(path, 'r')
+ for i, line in enumerate(fp):
+ line = line.splitlines()[0].rstrip()
+ if not line:
+ # Ignore blank lines
+ continue
+ # split line
+ lex = shlex.shlex(line, posix=True)
+ lex.whitespace_split = True
+ lex.whitespace += ','
+ line = list(lex)
+ for part in line:
+ self.source.checkrevformat(part, 'closemap')
+ m.extend(line)
+ # if file does not exist or error reading, exit
+ except IOError:
+ raise util.Abort(_('closemap file not found or error reading %s:')
+ % path)
+ return m
def parsesplicemap(self, path):
""" check and validate the splicemap format and
@@ -408,6 +444,9 @@
except KeyError:
parents = [b[0] for b in pbranches]
source = progresssource(self.ui, self.source, len(files))
+ if self.closemap and rev in self.closemap:
+ commit.extra['close'] = 1
+
newnode = self.dest.putcommit(files, copies, parents, commit,
source, self.map)
source.close()