diff mercurial/changelog.py @ 43231:30570a056fa8

sidedatacopies: only store an entry if it has values This will make for a shorter storage and help use to write faster code in simple case. This change already provided a speed boost for copy tracing. For example here is combined time of running copies tracing on a 6989 pairs of revision on the pypy repos: before: 771s after: 631s - 18% This also has a very positive impact on changelog size. For example here are the number for the `00changelog.d` file of pypy. before: 30449712 Bytes after: 24973718 Bytes - 18% This give an overall quite acceptable overhead for storing copies into the changelog: filelog-only: 23370586 sidedata: 24973718 Bytes + 7% Differential Revision: https://phab.mercurial-scm.org/D7068
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 02 Oct 2019 14:38:34 -0400
parents e51f5d06a99c
children ec7ba79bf3db
line wrap: on
line diff
--- a/mercurial/changelog.py	Wed Oct 02 14:16:30 2019 -0400
+++ b/mercurial/changelog.py	Wed Oct 02 14:38:34 2019 -0400
@@ -693,14 +693,16 @@
                 extra[b'filesremoved'] = filesremoved
         elif self._copiesstorage == b'changeset-sidedata':
             sidedata = {}
-            if p1copies is not None:
+            if p1copies:
                 sidedata[sidedatamod.SD_P1COPIES] = p1copies
-            if p2copies is not None:
+            if p2copies:
                 sidedata[sidedatamod.SD_P2COPIES] = p2copies
-            if filesadded is not None:
+            if filesadded:
                 sidedata[sidedatamod.SD_FILESADDED] = filesadded
-            if filesremoved is not None:
+            if filesremoved:
                 sidedata[sidedatamod.SD_FILESREMOVED] = filesremoved
+            if not sidedata:
+                sidedata = None
 
         if extra:
             extra = encodeextra(extra)