tests/testlib/ext-sidedata.py
changeset 47084 27f1191b1305
parent 47012 d55b71393907
child 47085 3aab2330b7d3
equal deleted inserted replaced
47083:81eb7091c494 47084:27f1191b1305
    10 import hashlib
    10 import hashlib
    11 import struct
    11 import struct
    12 
    12 
    13 from mercurial.node import nullrev
    13 from mercurial.node import nullrev
    14 from mercurial import (
    14 from mercurial import (
       
    15     changegroup,
    15     extensions,
    16     extensions,
    16     requirements,
    17     requirements,
    17     revlog,
    18     revlog,
    18 )
    19 )
    19 
    20 
    20 from mercurial.upgrade_utils import engine as upgrade_engine
    21 from mercurial.upgrade_utils import engine as upgrade_engine
    21 
    22 
       
    23 from mercurial.revlogutils import constants
    22 from mercurial.revlogutils import sidedata
    24 from mercurial.revlogutils import sidedata
    23 
    25 
    24 
    26 
    25 def wrapaddrevision(
    27 def wrapaddrevision(
    26     orig, self, text, transaction, link, p1, p2, *args, **kwargs
    28     orig, self, text, transaction, link, p1, p2, *args, **kwargs
    52         if expected is not None and got != expected:
    54         if expected is not None and got != expected:
    53             raise RuntimeError('sha256 mismatch')
    55             raise RuntimeError('sha256 mismatch')
    54     return text, sd
    56     return text, sd
    55 
    57 
    56 
    58 
    57 def wrapgetsidedatacompanion(orig, srcrepo, dstrepo):
    59 def wrapget_sidedata_helpers(orig, srcrepo, dstrepo):
    58     sidedatacompanion = orig(srcrepo, dstrepo)
    60     repo, computers, removers = orig(srcrepo, dstrepo)
       
    61     assert not computers and not removers  # deal with composition later
    59     addedreqs = dstrepo.requirements - srcrepo.requirements
    62     addedreqs = dstrepo.requirements - srcrepo.requirements
       
    63 
    60     if requirements.SIDEDATA_REQUIREMENT in addedreqs:
    64     if requirements.SIDEDATA_REQUIREMENT in addedreqs:
    61         assert sidedatacompanion is None  # deal with composition later
       
    62 
    65 
    63         def sidedatacompanion(revlog, rev):
    66         def computer(repo, revlog, rev, old_sidedata):
       
    67             assert not old_sidedata  # not supported yet
    64             update = {}
    68             update = {}
    65             revlog.sidedatanocheck = True
    69             revlog.sidedatanocheck = True
    66             try:
    70             try:
    67                 text = revlog.revision(rev)
    71                 text = revlog.revision(rev)
    68             finally:
    72             finally:
    71             # text length
    75             # text length
    72             update[sidedata.SD_TEST1] = struct.pack('>I', len(text))
    76             update[sidedata.SD_TEST1] = struct.pack('>I', len(text))
    73             # and sha2 hashes
    77             # and sha2 hashes
    74             sha256 = hashlib.sha256(text).digest()
    78             sha256 = hashlib.sha256(text).digest()
    75             update[sidedata.SD_TEST2] = struct.pack('>32s', sha256)
    79             update[sidedata.SD_TEST2] = struct.pack('>32s', sha256)
    76             return False, (), update, 0, 0
    80             return update, (0, 0)
    77 
    81 
    78     return sidedatacompanion
    82         srcrepo.register_sidedata_computer(
       
    83             constants.KIND_CHANGELOG,
       
    84             b"whatever",
       
    85             (sidedata.SD_TEST1, sidedata.SD_TEST2),
       
    86             computer,
       
    87             0,
       
    88         )
       
    89         dstrepo.register_wanted_sidedata(b"whatever")
       
    90 
       
    91     return changegroup.get_sidedata_helpers(srcrepo, dstrepo._wanted_sidedata)
    79 
    92 
    80 
    93 
    81 def extsetup(ui):
    94 def extsetup(ui):
    82     extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision)
    95     extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision)
    83     extensions.wrapfunction(revlog.revlog, '_revisiondata', wrap_revisiondata)
    96     extensions.wrapfunction(revlog.revlog, '_revisiondata', wrap_revisiondata)
    84     extensions.wrapfunction(
    97     extensions.wrapfunction(
    85         upgrade_engine, 'getsidedatacompanion', wrapgetsidedatacompanion
    98         upgrade_engine, 'get_sidedata_helpers', wrapget_sidedata_helpers
    86     )
    99     )
    87 
   100 
    88 
   101 
    89 def reposetup(ui, repo):
   102 def reposetup(ui, repo):
    90     # We don't register sidedata computers because we don't care within these
   103     # We don't register sidedata computers because we don't care within these