comparison mercurial/repair.py @ 17410:7c865f30e2b8 stable

strip: fix revset usage (issue3604) The `repair` code builds a giant revset query instead of using the "%lr" idiom. It is inefficient and crash when the number of stripped changeset is too big. This changeset replaces the bad code by a better revset usage.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Fri, 31 Aug 2012 23:27:26 +0200
parents ec7b9bec19c9
children 1b51638bf44a
comparison
equal deleted inserted replaced
17409:1fc45b9a1300 17410:7c865f30e2b8
109 if saverevs: 109 if saverevs:
110 descendants = set(cl.descendants(saverevs)) 110 descendants = set(cl.descendants(saverevs))
111 saverevs.difference_update(descendants) 111 saverevs.difference_update(descendants)
112 savebases = [cl.node(r) for r in saverevs] 112 savebases = [cl.node(r) for r in saverevs]
113 stripbases = [cl.node(r) for r in tostrip] 113 stripbases = [cl.node(r) for r in tostrip]
114 rset = ' or '.join([str(r) for r in tostrip]) 114 newbmtarget = repo.revs('sort(heads((::%ld) - (%ld)), -rev)',
115 newbmtarget = repo.revs('sort(heads(ancestors(%r) - (%r)), -rev)', 115 tostrip, tostrip)
116 rset, rset)
117 if newbmtarget: 116 if newbmtarget:
118 newbmtarget = newbmtarget[0] 117 newbmtarget = newbmtarget[0]
119 else: 118 else:
120 newbmtarget = '.' 119 newbmtarget = '.'
121 120