# HG changeset patch # User Vitaliy Filippov # Date 1327071992 -14400 # Node ID 7ca3d1b08d676c2dbbb8bb27d8e5a4d94ff4a1c3 # Parent 8cf8ff0f52fedcd67af92c5f47f324862bb3558e Save filemap into .hg/svn/filemap just like other maps diff --git a/hgsubversion/maps.py b/hgsubversion/maps.py --- a/hgsubversion/maps.py +++ b/hgsubversion/maps.py @@ -21,7 +21,7 @@ class AuthorMap(dict): The ui argument is used to print diagnostic messages. The path argument is the location of the backing store, - typically .hg/authormap. + typically .hg/svn/authors. ''' self.ui = ui self.path = path @@ -252,13 +252,24 @@ class RevMap(dict): class FileMap(object): - def __init__(self, repo): - self.ui = repo.ui + VERSION = 1 + + def __init__(self, ui, path): + '''Initialise a new FileMap. + + The ui argument is used to print diagnostic messages. + + The path argument is the location of the backing store, + typically .hg/svn/filemap. + ''' + self.ui = ui + self.path = path self.include = {} self.exclude = {} - filemap = repo.ui.config('hgsubversion', 'filemap') - if filemap and os.path.exists(filemap): - self.load(filemap) + if os.path.isfile(self.path): + self._load() + else: + self._write() def _rpairs(self, name): yield '.', name @@ -301,10 +312,18 @@ class FileMap(object): bits = m.strip('e'), path self.ui.debug('%sing %s\n' % bits) mapping[path] = path + if fn != self.path: + f = open(self.path, 'a') + f.write(m + ' ' + path + '\n') + f.close() def load(self, fn): self.ui.note('reading file map from %s\n' % fn) f = open(fn, 'r') + self.load_fd(f, fn) + f.close() + + def load_fd(self, f, fn): for line in f: if line.strip() == '' or line.strip()[0] == '#': continue @@ -319,6 +338,20 @@ class FileMap(object): except IndexError: msg = 'ignoring bad line in filemap %s: %s\n' self.ui.warn(msg % (fn, line.rstrip())) + + def _load(self): + self.ui.note('reading in-repo file map from %s\n' % self.path) + f = open(self.path) + ver = int(f.readline()) + if ver != self.VERSION: + print 'filemap too new -- please upgrade' + raise NotImplementedError + self.load_fd(f, self.path) + f.close() + + def _write(self): + f = open(self.path, 'w') + f.write('%s\n' % self.VERSION) f.close() class BranchMap(dict): diff --git a/hgsubversion/svnmeta.py b/hgsubversion/svnmeta.py --- a/hgsubversion/svnmeta.py +++ b/hgsubversion/svnmeta.py @@ -55,6 +55,7 @@ class SVNMeta(object): 'usebranchnames', True) branchmap = self.ui.config('hgsubversion', 'branchmap') tagmap = self.ui.config('hgsubversion', 'tagmap') + filemap = self.ui.config('hgsubversion', 'filemap') self.branches = {} if os.path.exists(self.branch_info_file): @@ -94,8 +95,11 @@ class SVNMeta(object): if tagmap: self.tagmap.load(tagmap) + self.filemap = maps.FileMap(self.ui, self.filemap_file) + if filemap: + self.filemap.load(filemap) + self.lastdate = '1970-01-01 00:00:00 -0000' - self.filemap = maps.FileMap(repo) self.addedtags = {} self.deletedtags = {} @@ -191,6 +195,10 @@ class SVNMeta(object): def authors_file(self): return os.path.join(self.meta_data_dir, 'authors') + @property + def filemap_file(self): + return os.path.join(self.meta_data_dir, 'filemap') + @property def branchmapfile(self): return os.path.join(self.meta_data_dir, 'branchmap')