Mercurial > hg
diff mercurial/cmdutil.py @ 31134:c22253c4c1b8
revert: remove set(mf) because it's O(manifest)
The revert code had a 'set(manifest)' line in it, which has a runtime equivalent
to the size of the manifest. With alternative manifest implementations, like
treemanifest, this can be extra expensive. Let's rewrite it to be O(changes)
instead of O(manifest size).
author | Durham Goode <durham@fb.com> |
---|---|
date | Wed, 01 Mar 2017 19:51:05 -0800 |
parents | a113284f54a0 |
children | accdd5e62066 |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Mon Feb 13 14:05:24 2017 +0100 +++ b/mercurial/cmdutil.py Wed Mar 01 19:51:05 2017 -0800 @@ -2976,11 +2976,11 @@ clean = set(changes.clean) modadded = set() - # split between files known in target manifest and the others - smf = set(mf) - # determine the exact nature of the deleted changesets - deladded = _deleted - smf + deladded = set(_deleted) + for path in _deleted: + if path in mf: + deladded.remove(path) deleted = _deleted - deladded # We need to account for the state of the file in the dirstate, @@ -3024,7 +3024,10 @@ # in case of merge, files that are actually added can be reported as # modified, we need to post process the result if p2 != nullid: - mergeadd = dsmodified - smf + mergeadd = set(dsmodified) + for path in dsmodified: + if path in mf: + mergeadd.remove(path) dsadded |= mergeadd dsmodified -= mergeadd