Mercurial > public > mercurial-scm > hg
comparison mercurial/testing/storage.py @ 45788:a5206e71c536
revlog: extend addgroup() with callback for duplicates
The addgroup() interface currently doesn't allow the caller to keep
track of duplicated nodes except by looking at the returned node list.
Add an optional second callback for this purpose and change the return
type to a boolean. This allows follow-up changes to use more efficient
storage for the node list in places that are memory-sensitive.
Differential Revision: https://phab.mercurial-scm.org/D9231
author | Joerg Sonnenberger <joerg@bec.de> |
---|---|
date | Sun, 18 Oct 2020 22:18:02 +0200 |
parents | a1ee825fc6c5 |
children | 89a2afe31e82 |
comparison
equal
deleted
inserted
replaced
45787:225e513c444e | 45788:a5206e71c536 |
---|---|
1115 | 1115 |
1116 def linkmapper(node): | 1116 def linkmapper(node): |
1117 return 0 | 1117 return 0 |
1118 | 1118 |
1119 with self._maketransactionfn() as tr: | 1119 with self._maketransactionfn() as tr: |
1120 nodes = f.addgroup([], None, tr, addrevisioncb=cb) | 1120 nodes = [] |
1121 | |
1122 def onchangeset(cl, node): | |
1123 nodes.append(node) | |
1124 cb(cl, node) | |
1125 | |
1126 def ondupchangeset(cl, node): | |
1127 nodes.append(node) | |
1128 | |
1129 f.addgroup( | |
1130 [], | |
1131 None, | |
1132 tr, | |
1133 addrevisioncb=onchangeset, | |
1134 duplicaterevisioncb=ondupchangeset, | |
1135 ) | |
1121 | 1136 |
1122 self.assertEqual(nodes, []) | 1137 self.assertEqual(nodes, []) |
1123 self.assertEqual(callbackargs, []) | 1138 self.assertEqual(callbackargs, []) |
1124 self.assertEqual(len(f), 0) | 1139 self.assertEqual(len(f), 0) |
1125 | 1140 |
1134 deltas = [ | 1149 deltas = [ |
1135 (node0, nullid, nullid, nullid, nullid, delta0, 0), | 1150 (node0, nullid, nullid, nullid, nullid, delta0, 0), |
1136 ] | 1151 ] |
1137 | 1152 |
1138 with self._maketransactionfn() as tr: | 1153 with self._maketransactionfn() as tr: |
1139 nodes = f.addgroup(deltas, linkmapper, tr, addrevisioncb=cb) | 1154 nodes = [] |
1155 | |
1156 def onchangeset(cl, node): | |
1157 nodes.append(node) | |
1158 cb(cl, node) | |
1159 | |
1160 def ondupchangeset(cl, node): | |
1161 nodes.append(node) | |
1162 | |
1163 f.addgroup( | |
1164 deltas, | |
1165 linkmapper, | |
1166 tr, | |
1167 addrevisioncb=onchangeset, | |
1168 duplicaterevisioncb=ondupchangeset, | |
1169 ) | |
1140 | 1170 |
1141 self.assertEqual( | 1171 self.assertEqual( |
1142 nodes, | 1172 nodes, |
1143 [ | 1173 [ |
1144 b'\x49\xd8\xcb\xb1\x5c\xe2\x57\x92\x04\x47' | 1174 b'\x49\xd8\xcb\xb1\x5c\xe2\x57\x92\x04\x47' |
1173 delta = mdiff.trivialdiffheader(len(fulltext)) + fulltext | 1203 delta = mdiff.trivialdiffheader(len(fulltext)) + fulltext |
1174 | 1204 |
1175 deltas.append((nodes[i], nullid, nullid, nullid, nullid, delta, 0)) | 1205 deltas.append((nodes[i], nullid, nullid, nullid, nullid, delta, 0)) |
1176 | 1206 |
1177 with self._maketransactionfn() as tr: | 1207 with self._maketransactionfn() as tr: |
1178 self.assertEqual(f.addgroup(deltas, lambda x: 0, tr), nodes) | 1208 newnodes = [] |
1209 | |
1210 def onchangeset(cl, node): | |
1211 newnodes.append(node) | |
1212 | |
1213 f.addgroup( | |
1214 deltas, | |
1215 lambda x: 0, | |
1216 tr, | |
1217 addrevisioncb=onchangeset, | |
1218 duplicaterevisioncb=onchangeset, | |
1219 ) | |
1220 self.assertEqual(newnodes, nodes) | |
1179 | 1221 |
1180 self.assertEqual(len(f), len(deltas)) | 1222 self.assertEqual(len(f), len(deltas)) |
1181 self.assertEqual(list(f.revs()), [0, 1, 2]) | 1223 self.assertEqual(list(f.revs()), [0, 1, 2]) |
1182 self.assertEqual(f.rev(nodes[0]), 0) | 1224 self.assertEqual(f.rev(nodes[0]), 0) |
1183 self.assertEqual(f.rev(nodes[1]), 1) | 1225 self.assertEqual(f.rev(nodes[1]), 1) |