Mercurial > public > mercurial-scm > hg-stable
diff tests/testlib/ext-sidedata.py @ 46731:ba8e508a8e69
sidedata-exchange: rewrite sidedata on-the-fly whenever possible
When a A exchanges with B, the difference of their supported sidedata categories
is made, and the responsibility is always with the client to generated it:
- If A pushes to B and B requires category `foo` that A does not have, A
will need to generate it when sending it to B.
- If A pulls from B and A needs category `foo`, it will generate `foo`
before the end of the transaction.
- Any category that is not required is removed. If peers are not compatible,
abort.
It is forbidden to rewrite sidedata for a rev that already has sidedata, since
that would introduce unreachable (garbage) data in the data file, something
we're not prepared for yet.
Differential Revision: https://phab.mercurial-scm.org/D10032
author | Rapha?l Gom?s <rgomes@octobus.net> |
---|---|
date | Fri, 19 Feb 2021 11:24:50 +0100 |
parents | 3d740058b467 |
children | d55b71393907 |
line wrap: on
line diff
--- a/tests/testlib/ext-sidedata.py Mon Feb 15 11:08:28 2021 +0100 +++ b/tests/testlib/ext-sidedata.py Fri Feb 19 11:24:50 2021 +0100 @@ -1,6 +1,6 @@ # ext-sidedata.py - small extension to test the sidedata logic # -# Copyright 2019 Pierre-Yves David <pierre-yves.david@octobus.net) +# Copyright 2019 Pierre-Yves David <pierre-yves.david@octobus.net> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. @@ -47,11 +47,12 @@ if self.version & 0xFFFF != 2: return text, sd if nodeorrev != nullrev and nodeorrev != nullid: - if len(text) != struct.unpack('>I', sd[sidedata.SD_TEST1])[0]: + cat1 = sd.get(sidedata.SD_TEST1) + if cat1 is not None and len(text) != struct.unpack('>I', cat1)[0]: raise RuntimeError('text size mismatch') - expected = sd[sidedata.SD_TEST2] + expected = sd.get(sidedata.SD_TEST2) got = hashlib.sha256(text).digest() - if got != expected: + if expected is not None and got != expected: raise RuntimeError('sha256 mismatch') return text, sd @@ -86,3 +87,10 @@ extensions.wrapfunction( upgrade_engine, 'getsidedatacompanion', wrapgetsidedatacompanion ) + + +def reposetup(ui, repo): + # We don't register sidedata computers because we don't care within these + # tests + repo.register_wanted_sidedata(sidedata.SD_TEST1) + repo.register_wanted_sidedata(sidedata.SD_TEST2)