Mercurial > hg
view hgext/strip.py @ 45999:c4c7a6b61146
match: skip walking up the directory hierarchy if the number of pats are small
Previously, we would receive a path like abc/def/ghi and "walk up" the directory
hierarchy, checking abc/def, abc, and `b''` to see if they were in the set of
prefixes that this matcher covered. We did this indiscriminately - we generated
all of these paths even if the set of prefixes the matcher covered was
completely empty, which is the case for a lot of repos at my company (the narrow
matcher we use is usually non-recursive).
This brings the time for a rebase in one of my repos from 12.20s to 10.87s. In
this particular repo, this is entirely due to the `len(prefix_set) == 0` check,
as I do not have any recursive patterns in the narrowspec.
Differential Revision: https://phab.mercurial-scm.org/D9488
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Mon, 30 Nov 2020 12:30:58 -0800 |
parents | d7a508a75d72 |
children | 6000f5b25c9b |
line wrap: on
line source
"""strip changesets and their descendants from history (DEPRECATED) The functionality of this extension has been included in core Mercurial since version 5.7. Please use :hg:`debugstrip ...` instead. This extension allows you to strip changesets and all their descendants from the repository. See the command help for details. """ from __future__ import absolute_import from mercurial import commands # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should # be specifying the version(s) of Mercurial they are tested with, or # leave the attribute unspecified. testedwith = b'ships-with-hg-core' # This is a bit ugly, but a uisetup function that defines strip as an # alias for debugstrip would override any user alias for strip, # including aliases like "strip = strip --no-backup". commands.command.rename(old=b'debugstrip', new=b'debugstrip|strip')