34 return orig(self, text, transaction, link, p1, p2, *args, **kwargs) |
36 return orig(self, text, transaction, link, p1, p2, *args, **kwargs) |
35 |
37 |
36 |
38 |
37 def wraprevision(orig, self, nodeorrev, *args, **kwargs): |
39 def wraprevision(orig, self, nodeorrev, *args, **kwargs): |
38 text = orig(self, nodeorrev, *args, **kwargs) |
40 text = orig(self, nodeorrev, *args, **kwargs) |
|
41 if getattr(self, 'sidedatanocheck', False): |
|
42 return text |
39 if nodeorrev != node.nullrev and nodeorrev != node.nullid: |
43 if nodeorrev != node.nullrev and nodeorrev != node.nullid: |
40 sd = self.sidedata(nodeorrev) |
44 sd = self.sidedata(nodeorrev) |
41 if len(text) != struct.unpack('>I', sd[sidedata.SD_TEST1])[0]: |
45 if len(text) != struct.unpack('>I', sd[sidedata.SD_TEST1])[0]: |
42 raise RuntimeError('text size mismatch') |
46 raise RuntimeError('text size mismatch') |
43 expected = sd[sidedata.SD_TEST2] |
47 expected = sd[sidedata.SD_TEST2] |
45 if got != expected: |
49 if got != expected: |
46 raise RuntimeError('sha256 mismatch') |
50 raise RuntimeError('sha256 mismatch') |
47 return text |
51 return text |
48 |
52 |
49 |
53 |
|
54 def wrapgetsidedatacompanion(orig, srcrepo, dstrepo): |
|
55 sidedatacompanion = orig(srcrepo, dstrepo) |
|
56 addedreqs = dstrepo.requirements - srcrepo.requirements |
|
57 if localrepo.SIDEDATA_REQUIREMENT in addedreqs: |
|
58 assert sidedatacompanion is None # deal with composition later |
|
59 |
|
60 def sidedatacompanion(revlog, rev): |
|
61 update = {} |
|
62 revlog.sidedatanocheck = True |
|
63 try: |
|
64 text = revlog.revision(rev) |
|
65 finally: |
|
66 del revlog.sidedatanocheck |
|
67 ## let's store some arbitrary data just for testing |
|
68 # text length |
|
69 update[sidedata.SD_TEST1] = struct.pack('>I', len(text)) |
|
70 # and sha2 hashes |
|
71 sha256 = hashlib.sha256(text).digest() |
|
72 update[sidedata.SD_TEST2] = struct.pack('>32s', sha256) |
|
73 return False, (), update |
|
74 |
|
75 return sidedatacompanion |
|
76 |
|
77 |
50 def extsetup(ui): |
78 def extsetup(ui): |
51 extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision) |
79 extensions.wrapfunction(revlog.revlog, 'addrevision', wrapaddrevision) |
52 extensions.wrapfunction(revlog.revlog, 'revision', wraprevision) |
80 extensions.wrapfunction(revlog.revlog, 'revision', wraprevision) |
|
81 extensions.wrapfunction( |
|
82 upgrade, 'getsidedatacompanion', wrapgetsidedatacompanion |
|
83 ) |