Mercurial > public > mercurial-scm > hg
diff hgext/convert/common.py @ 5510:11d7908a3ea8
convert: abstract map files into a class
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 07 Nov 2007 17:06:02 -0800 |
parents | f0a3918abd42 |
children | 8cd26ccc68f8 |
line wrap: on
line diff
--- a/hgext/convert/common.py Mon Nov 05 13:20:24 2007 -0800 +++ b/hgext/convert/common.py Wed Nov 07 17:06:02 2007 -0800 @@ -1,5 +1,5 @@ # common code for the convert extension -import base64 +import base64, errno import cPickle as pickle from mercurial import util @@ -54,11 +54,8 @@ def after(self): pass - def setrevmap(self, revmap, order): - """set the map of already-converted revisions - - order is a list with the keys from revmap in the order they - appear in the revision map file.""" + def setrevmap(self, revmap): + """set the map of already-converted revisions""" pass def getheads(self): @@ -190,3 +187,41 @@ filter empty revisions. """ pass + + +class mapfile(dict): + def __init__(self, ui, path): + super(mapfile, self).__init__() + self.ui = ui + self.path = path + self.fp = None + self.order = [] + self._read() + + def _read(self): + try: + fp = open(self.path, 'r') + except IOError, err: + if err.errno != errno.ENOENT: + raise + return + for line in fp: + key, value = line[:-1].split(' ', 1) + if key not in self: + self.order.append(key) + super(mapfile, self).__setitem__(key, value) + fp.close() + + def __setitem__(self, key, value): + if self.fp is None: + try: + self.fp = open(self.path, 'a') + except IOError, err: + raise util.Abort(_('could not open map file %r: %s') % + (self.path, err.strerror)) + self.fp.write('%s %s\n' % (key, value)) + self.fp.flush() + super(mapfile, self).__setitem__(key, value) + + def close(self): + self.fp.close()