Mercurial > hgsubversion
diff hgsubversion/maps.py @ 821:f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
This prevents re-pulling the same revision over and over, which was a
problem when the most recent revision was a tagging revision that
wouldn't exist properly in the revmap. This should also allow users to
not re-pull huge volumes of commits that have no effect on the hg
repository.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Tue, 24 May 2011 21:07:27 -0500 |
parents | 09f7c1c09207 |
children | 033b86e0f56d |
line wrap: on
line diff
--- a/hgsubversion/maps.py +++ b/hgsubversion/maps.py @@ -182,13 +182,31 @@ class RevMap(dict): def __init__(self, repo): dict.__init__(self) self.path = os.path.join(repo.path, 'svn', 'rev_map') - self.youngest = 0 + self.ypath = os.path.join(repo.path, 'svn', 'lastpulled') + # TODO(durin42): Consider moving management of the youngest + # file to svnmeta itself rather than leaving it here. + self._youngest = 0 + # must load youngest file first, or else self._load() can + # clobber the info + if os.path.isfile(self.ypath): + self._youngest = int(open(self.ypath).read().strip()) self.oldest = 0 if os.path.isfile(self.path): self._load() else: self._write() + def _set_youngest(self, rev): + self._youngest = max(self._youngest, rev) + fp = open(self.ypath, 'wb') + fp.write(str(self._youngest) + '\n') + fp.close() + + def _get_youngest(self): + return self._youngest + + youngest = property(_get_youngest, _set_youngest) + def hashes(self): return dict((v, k) for (k, v) in self.iteritems())