# HG changeset patch # User Jun Wu # Date 1463254437 -3600 # Node ID 372afb75f465ef3c9d124cd435d0715a17f835cc # Parent 0094f222c5dc9eb17ddd290c931c08d4e9f7d91d 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. diff --git a/hgsubversion/maps.py b/hgsubversion/maps.py --- 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())