changeset 1422:372afb75f465

maps: add the "branchmaxrevnum" method to RevMap Iterating the RevMap can be very expensive for large repos. To prevent future code from iterating the possibly huge RevMap causing performance issues, it's a good idea to clean all iterating code outside RevMap. This patch adds a method used by "get_parent_svn_branch_and_rev". In the future, we will have a SqliteRevMap, which will have an efficient implementation for this query, and it will disable "__iter__" to prevent future performance issues.
author Jun Wu <quark@fb.com>
date Sat, 14 May 2016 20:33:57 +0100
parents 0094f222c5dc
children 52749d8aba99
files hgsubversion/maps.py
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgsubversion/maps.py
+++ b/hgsubversion/maps.py
@@ -355,6 +355,13 @@ class RevMap(dict):
         check = lambda x: x[0][1] == branch and x[0][0] < rev.revnum
         return sorted(filter(check, self.iteritems()), reverse=True)
 
+    def branchmaxrevnum(self, branch, maxrevnum):
+        result = 0
+        for num, br in self.iterkeys():
+            if br == branch and num <= maxrevnum and num > result:
+                result = num
+        return result
+
     @property
     def lasthash(self):
         lines = list(self._readmapfile())