Mercurial > hg
changeset 49357:5b7a10ddb42f
sparse: directly inline the `rebuild` wrapping
Core is already aware of sparse, so lets move the handful of line of code that
deal with it in `dirstate.rebuild` for the sake of simplicity.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 11 Jun 2022 00:59:11 +0200 |
parents | a87443d4aec0 |
children | 05da1f1612db |
files | hgext/sparse.py mercurial/dirstate.py |
diffstat | 2 files changed, 14 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/sparse.py Sat Jun 11 00:58:41 2022 +0200 +++ b/hgext/sparse.py Sat Jun 11 00:59:11 2022 +0200 @@ -212,24 +212,6 @@ and to prevent modifications to files outside the checkout. """ - # dirstate.rebuild should not add non-matching files - def _rebuild(orig, self, parent, allfiles, changedfiles=None): - matcher = self._sparsematcher - if matcher is not None and not matcher.always(): - allfiles = [f for f in allfiles if matcher(f)] - if changedfiles: - changedfiles = [f for f in changedfiles if matcher(f)] - - if changedfiles is not None: - # In _rebuild, these files will be deleted from the dirstate - # when they are not found to be in allfiles - dirstatefilestoremove = {f for f in self if not matcher(f)} - changedfiles = dirstatefilestoremove.union(changedfiles) - - return orig(self, parent, allfiles, changedfiles) - - extensions.wrapfunction(dirstate.dirstate, b'rebuild', _rebuild) - # Prevent adding files that are outside the sparse checkout editfuncs = [ b'set_tracked',
--- a/mercurial/dirstate.py Sat Jun 11 00:58:41 2022 +0200 +++ b/mercurial/dirstate.py Sat Jun 11 00:59:11 2022 +0200 @@ -670,6 +670,20 @@ self._dirty = True def rebuild(self, parent, allfiles, changedfiles=None): + + matcher = self._sparsematcher + if matcher is not None and not matcher.always(): + # should not add non-matching files + allfiles = [f for f in allfiles if matcher(f)] + if changedfiles: + changedfiles = [f for f in changedfiles if matcher(f)] + + if changedfiles is not None: + # these files will be deleted from the dirstate when they are + # not found to be in allfiles + dirstatefilestoremove = {f for f in self if not matcher(f)} + changedfiles = dirstatefilestoremove.union(changedfiles) + if changedfiles is None: # Rebuild entire dirstate to_lookup = allfiles