Mercurial > public > mercurial-scm > hg
diff mercurial/context.py @ 42407:602469a91550
context: get filesadded() and filesremoved() from changeset if configured
This adds the read side for getting the sets of added and removed
files from the changeset extras. I timed this command on the hg repo:
hg log -T '{rev}\n {files}\n %:{file_mods}\n +{file_adds}\n -{file_dels}\n'
It took 1m21s before and 6.4s after. I also used that command to check
that the result didn't change compared to calculating the values from
the manifests on the fly (it didn't change).
In the mozilla-unified repo, the same command run on
FIREFOX_BETA_58_END::FIREFOX_BETA_59_END went from 29s to 0.67s.
Differential Revision: https://phab.mercurial-scm.org/D6417
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 14 May 2019 22:20:10 -0700 |
parents | 65fa61ca20af |
children | 87a34c767384 |
line wrap: on
line diff
--- a/mercurial/context.py Tue May 14 22:19:51 2019 -0700 +++ b/mercurial/context.py Tue May 14 22:20:10 2019 -0700 @@ -469,12 +469,24 @@ modified.difference_update(self.filesremoved()) return sorted(modified) def filesadded(self): + source = self._repo.ui.config('experimental', 'copies.read-from') + if (source == 'changeset-only' or + (source == 'compatibility' and + self._changeset.filesadded is not None)): + return self._changeset.filesadded or [] + added = [] for f in self.files(): if not any(f in p for p in self.parents()): added.append(f) return added def filesremoved(self): + source = self._repo.ui.config('experimental', 'copies.read-from') + if (source == 'changeset-only' or + (source == 'compatibility' and + self._changeset.filesremoved is not None)): + return self._changeset.filesremoved or [] + removed = [] for f in self.files(): if f not in self: