##// END OF EJS Templates
delta-find: fix pulled-delta-reuse-policy=forced behavior...
marmoute -
r51550:e77ca247 stable
parent child Browse files
Show More
@@ -1262,8 +1262,10 b' class deltacomputer:'
1262 gather_debug = self._gather_debug
1262 gather_debug = self._gather_debug
1263 cachedelta = revinfo.cachedelta
1263 cachedelta = revinfo.cachedelta
1264 revlog = self.revlog
1264 revlog = self.revlog
1265 p1r = p2r = None
1265
1266
1266 p1r = p2r = None
1267 if excluded_bases is None:
1268 excluded_bases = set()
1267
1269
1268 if gather_debug:
1270 if gather_debug:
1269 start = util.timer()
1271 start = util.timer()
@@ -1310,15 +1312,80 b' class deltacomputer:'
1310 'delta-base'
1312 'delta-base'
1311 ] = deltainfo.base # pytype: disable=attribute-error
1313 ] = deltainfo.base # pytype: disable=attribute-error
1312 dbg['search_round_count'] = 0
1314 dbg['search_round_count'] = 0
1313 dbg['using-cached-base'] = True
1315 dbg['using-cached-base'] = False
1314 dbg['delta_try_count'] = 0
1316 dbg['delta_try_count'] = 0
1315 dbg['type'] = b"full"
1317 dbg['type'] = b"full"
1316 dbg['snapshot-depth'] = 0
1318 dbg['snapshot-depth'] = 0
1317 self._dbg_process_data(dbg)
1319 self._dbg_process_data(dbg)
1318 return deltainfo
1320 return deltainfo
1319
1321
1320 if excluded_bases is None:
1322 deltainfo = None
1321 excluded_bases = set()
1323
1324 # If this source delta are to be forcibly reuse, let us comply early.
1325 if (
1326 revlog._generaldelta
1327 and revinfo.cachedelta is not None
1328 and revinfo.cachedelta[2] == DELTA_BASE_REUSE_FORCE
1329 ):
1330 base = revinfo.cachedelta[0]
1331 if base == nullrev:
1332 dbg_type = b"full"
1333 deltainfo = self._fullsnapshotinfo(fh, revinfo, target_rev)
1334 if gather_debug:
1335 snapshotdepth = 0
1336 elif base not in excluded_bases:
1337 delta = revinfo.cachedelta[1]
1338 header, data = revlog.compress(delta)
1339 deltalen = len(header) + len(data)
1340 if gather_debug:
1341 offset = revlog.end(len(revlog) - 1)
1342 chainbase = revlog.chainbase(base)
1343 distance = deltalen + offset - revlog.start(chainbase)
1344 chainlen, compresseddeltalen = revlog._chaininfo(base)
1345 chainlen += 1
1346 compresseddeltalen += deltalen
1347 if base == p1r or base == p2r:
1348 dbg_type = b"delta"
1349 snapshotdepth = None
1350 elif not revlog.issnapshot(base):
1351 snapshotdepth = None
1352 else:
1353 dbg_type = b"snapshot"
1354 snapshotdepth = revlog.snapshotdepth(base) + 1
1355 else:
1356 distance = None
1357 chainbase = None
1358 chainlen = None
1359 compresseddeltalen = None
1360 snapshotdepth = None
1361 deltainfo = _deltainfo(
1362 distance=distance,
1363 deltalen=deltalen,
1364 data=(header, data),
1365 base=base,
1366 chainbase=chainbase,
1367 chainlen=chainlen,
1368 compresseddeltalen=compresseddeltalen,
1369 snapshotdepth=snapshotdepth,
1370 )
1371
1372 if deltainfo is not None:
1373 if gather_debug:
1374 end = util.timer()
1375 dbg['duration'] = end - start
1376 dbg[
1377 'delta-base'
1378 ] = deltainfo.base # pytype: disable=attribute-error
1379 dbg['search_round_count'] = 0
1380 dbg['using-cached-base'] = True
1381 dbg['delta_try_count'] = 0
1382 dbg['type'] = b"full"
1383 if snapshotdepth is None:
1384 dbg['snapshot-depth'] = 0
1385 else:
1386 dbg['snapshot-depth'] = snapshotdepth
1387 self._dbg_process_data(dbg)
1388 return deltainfo
1322
1389
1323 # count the number of different delta we tried (for debug purpose)
1390 # count the number of different delta we tried (for debug purpose)
1324 dbg_try_count = 0
1391 dbg_try_count = 0
@@ -1326,7 +1393,6 b' class deltacomputer:'
1326 dbg_try_rounds = 0
1393 dbg_try_rounds = 0
1327 dbg_type = b'unknown'
1394 dbg_type = b'unknown'
1328
1395
1329 deltainfo = None
1330 if p1r is None:
1396 if p1r is None:
1331 p1r = revlog.rev(revinfo.p1)
1397 p1r = revlog.rev(revinfo.p1)
1332 p2r = revlog.rev(revinfo.p2)
1398 p2r = revlog.rev(revinfo.p2)
@@ -329,8 +329,8 b' more subtle to test this behavior.'
329 DBG-DELTAS: CHANGELOG: * (glob)
329 DBG-DELTAS: CHANGELOG: * (glob)
330 DBG-DELTAS: MANIFESTLOG: * (glob)
330 DBG-DELTAS: MANIFESTLOG: * (glob)
331 DBG-DELTAS: MANIFESTLOG: * (glob)
331 DBG-DELTAS: MANIFESTLOG: * (glob)
332 DBG-DELTAS: FILELOG:my-file.txt: rev=3: delta-base=2 is-cached=1 *search-rounds=1 try-count=1* (glob)
332 DBG-DELTAS: FILELOG:my-file.txt: rev=3: delta-base=2 is-cached=1 *search-rounds=0 try-count=0* (glob)
333 DBG-DELTAS: FILELOG:my-file.txt: rev=4: delta-base=3 is-cached=1 *search-rounds=1 try-count=1* (glob)
333 DBG-DELTAS: FILELOG:my-file.txt: rev=4: delta-base=3 is-cached=1 *search-rounds=0 try-count=0* (glob)
334
334
335 Check that running "forced" on a non-general delta repository does not corrupt it
335 Check that running "forced" on a non-general delta repository does not corrupt it
336 ---------------------------------------------------------------------------------
336 ---------------------------------------------------------------------------------
General Comments 0
You need to be logged in to leave comments. Login now