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: