# HG changeset patch # User Sean Farley # Date 1390324814 21600 # Node ID a3545c3104aacb97cf98a22ee4a2e472f406708b # Parent e8203629371bd85b45179dce50936b1a9501933a 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. diff -r e8203629371b -r a3545c3104aa hgext/convert/convcmd.py --- 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()