commitctx: extract sidedata encoding inside its own function
This part of the code is quite independent from the rest. Thank to the new
ChangingFiles object, moving with the rest of the sidedata code (in metadata.py)
is simple.
The changelog.add method is simply passing the `files` object to the new
function. It will be easy to increase/change the data we gather and encode
without impacting the changelog method.
--- a/mercurial/changelog.py Sat Jul 25 15:55:09 2020 +0200
+++ b/mercurial/changelog.py Sat Jul 25 16:02:26 2020 +0200
@@ -558,27 +558,7 @@
sortedfiles = sorted(files.touched)
sidedata = None
if self._copiesstorage == b'changeset-sidedata':
- sidedata = {}
- p1copies = files.copied_from_p1
- if p1copies:
- p1copies = metadata.encodecopies(sortedfiles, p1copies)
- sidedata[sidedatamod.SD_P1COPIES] = p1copies
- p2copies = files.copied_from_p2
- if p2copies:
- p2copies = metadata.encodecopies(sortedfiles, p2copies)
- sidedata[sidedatamod.SD_P2COPIES] = p2copies
- filesadded = files.added
- if filesadded:
- filesadded = metadata.encodefileindices(sortedfiles, filesadded)
- sidedata[sidedatamod.SD_FILESADDED] = filesadded
- filesremoved = files.removed
- if filesremoved:
- filesremoved = metadata.encodefileindices(
- sortedfiles, filesremoved
- )
- sidedata[sidedatamod.SD_FILESREMOVED] = filesremoved
- if not sidedata:
- sidedata = None
+ sidedata = metadata.encode_copies_sidedata(files)
if extra:
extra = encodeextra(extra)
--- a/mercurial/metadata.py Sat Jul 25 15:55:09 2020 +0200
+++ b/mercurial/metadata.py Sat Jul 25 16:02:26 2020 +0200
@@ -254,6 +254,30 @@
return None
+def encode_copies_sidedata(files):
+ sortedfiles = sorted(files.touched)
+ sidedata = {}
+ p1copies = files.copied_from_p1
+ if p1copies:
+ p1copies = encodecopies(sortedfiles, p1copies)
+ sidedata[sidedatamod.SD_P1COPIES] = p1copies
+ p2copies = files.copied_from_p2
+ if p2copies:
+ p2copies = encodecopies(sortedfiles, p2copies)
+ sidedata[sidedatamod.SD_P2COPIES] = p2copies
+ filesadded = files.added
+ if filesadded:
+ filesadded = encodefileindices(sortedfiles, filesadded)
+ sidedata[sidedatamod.SD_FILESADDED] = filesadded
+ filesremoved = files.removed
+ if filesremoved:
+ filesremoved = encodefileindices(sortedfiles, filesremoved)
+ sidedata[sidedatamod.SD_FILESREMOVED] = filesremoved
+ if not sidedata:
+ sidedata = None
+ return sidedata
+
+
def _getsidedata(srcrepo, rev):
ctx = srcrepo[rev]
filescopies = computechangesetcopies(ctx)