Mercurial > hg
diff mercurial/metadata.py @ 45571:7543b5072e84
sidedata: add a `decode_files_sidedata` function
Right now the function mostly gather existing code to build a consistent object.
However having this function allow us prepare all user code independently from
the actual side data format change (and associated encoding/decoding changes)
Strictly speaking, we could not need to passe the sidedata explicitly since we
have access to it though the `changelogrevision` object. However, the short
term goal is to drop that first parameter to only pass the sidedata binaries.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 23 Sep 2020 15:13:44 +0200 |
parents | 64d18e9e8508 |
children | 3d5b2b8e93fd |
line wrap: on
line diff
--- a/mercurial/metadata.py Tue Sep 15 15:37:32 2020 +0200 +++ b/mercurial/metadata.py Wed Sep 23 15:13:44 2020 +0200 @@ -342,6 +342,32 @@ return sidedata +def decode_files_sidedata(changelogrevision, sidedata): + """Return a ChangingFiles instance from a changelogrevision using sidata + """ + touched = changelogrevision.files + + rawindices = sidedata.get(sidedatamod.SD_FILESADDED) + added = decodefileindices(touched, rawindices) + + rawindices = sidedata.get(sidedatamod.SD_FILESREMOVED) + removed = decodefileindices(touched, rawindices) + + rawcopies = sidedata.get(sidedatamod.SD_P1COPIES) + p1_copies = decodecopies(touched, rawcopies) + + rawcopies = sidedata.get(sidedatamod.SD_P2COPIES) + p2_copies = decodecopies(touched, rawcopies) + + return ChangingFiles( + touched=touched, + added=added, + removed=removed, + p1_copies=p1_copies, + p2_copies=p2_copies, + ) + + def _getsidedata(srcrepo, rev): ctx = srcrepo[rev] filescopies = computechangesetcopies(ctx)