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())