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