Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/rewrite.py @ 47467:3ab267f0cbe4
censor: extract the part about writing the censored revision in a function
The v2_censor function is huge, now that its content has settled a bit it is a
good time to split individual part inside dedicated function. We start with a
small function that process the censored revision.
Differential Revision: https://phab.mercurial-scm.org/D10898
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 22 Jun 2021 21:41:33 +0200 |
parents | f7a94e2d4470 |
children | 9b70aa7bcbab |
comparison
equal
deleted
inserted
replaced
47466:f7a94e2d4470 | 47467:3ab267f0cbe4 |
---|---|
259 new_data_file.seek(0, os.SEEK_END) | 259 new_data_file.seek(0, os.SEEK_END) |
260 assert new_data_file.tell() == data_cutoff | 260 assert new_data_file.tell() == data_cutoff |
261 new_sidedata_file.seek(0, os.SEEK_END) | 261 new_sidedata_file.seek(0, os.SEEK_END) |
262 assert new_sidedata_file.tell() == sidedata_cutoff | 262 assert new_sidedata_file.tell() == sidedata_cutoff |
263 | 263 |
264 ### writing the censored revision | 264 # writing the censored revision |
265 entry = old_index[censor_rev] | 265 _rewrite_censor( |
266 | 266 rl, |
267 # XXX consider trying the default compression too | 267 old_index, |
268 new_data_size = len(tombstone) | 268 open_files, |
269 new_data_offset = new_data_file.tell() | 269 censor_rev, |
270 new_data_file.write(tombstone) | 270 tombstone, |
271 | |
272 # we are not adding any sidedata as they might leak info about the censored version | |
273 | |
274 new_entry = revlogutils.entry( | |
275 flags=constants.REVIDX_ISCENSORED, | |
276 data_offset=new_data_offset, | |
277 data_compressed_length=new_data_size, | |
278 data_uncompressed_length=new_data_size, | |
279 data_delta_base=censor_rev, | |
280 link_rev=entry[ENTRY_LINK_REV], | |
281 parent_rev_1=entry[ENTRY_PARENT_1], | |
282 parent_rev_2=entry[ENTRY_PARENT_2], | |
283 node_id=entry[ENTRY_NODE_ID], | |
284 sidedata_offset=0, | |
285 sidedata_compressed_length=0, | |
286 data_compression_mode=COMP_MODE_PLAIN, | |
287 sidedata_compression_mode=COMP_MODE_PLAIN, | |
288 ) | 271 ) |
289 rl.index.append(new_entry) | |
290 entry_bin = rl.index.entry_binary(censor_rev) | |
291 new_index_file.write(entry_bin) | |
292 docket.index_end = new_index_file.tell() | |
293 docket.data_end = new_data_file.tell() | |
294 | 272 |
295 #### Writing all subsequent revisions | 273 #### Writing all subsequent revisions |
296 for rev in range(censor_rev + 1, len(old_index)): | 274 for rev in range(censor_rev + 1, len(old_index)): |
297 entry = old_index[rev] | 275 entry = old_index[rev] |
298 flags = entry[ENTRY_DATA_OFFSET] & 0xFFFF | 276 flags = entry[ENTRY_DATA_OFFSET] & 0xFFFF |
356 docket.index_end = new_index_file.tell() | 334 docket.index_end = new_index_file.tell() |
357 docket.data_end = new_data_file.tell() | 335 docket.data_end = new_data_file.tell() |
358 docket.sidedata_end = new_sidedata_file.tell() | 336 docket.sidedata_end = new_sidedata_file.tell() |
359 | 337 |
360 docket.write(transaction=None, stripping=True) | 338 docket.write(transaction=None, stripping=True) |
339 | |
340 | |
341 def _rewrite_censor( | |
342 revlog, | |
343 old_index, | |
344 all_files, | |
345 rev, | |
346 tombstone, | |
347 ): | |
348 """rewrite and append a censored revision""" | |
349 ( | |
350 old_data_file, | |
351 old_sidedata_file, | |
352 new_index_file, | |
353 new_data_file, | |
354 new_sidedata_file, | |
355 ) = all_files | |
356 entry = old_index[rev] | |
357 | |
358 # XXX consider trying the default compression too | |
359 new_data_size = len(tombstone) | |
360 new_data_offset = new_data_file.tell() | |
361 new_data_file.write(tombstone) | |
362 | |
363 # we are not adding any sidedata as they might leak info about the censored version | |
364 | |
365 link_rev = entry[ENTRY_LINK_REV] | |
366 | |
367 p1 = entry[ENTRY_PARENT_1] | |
368 p2 = entry[ENTRY_PARENT_2] | |
369 | |
370 new_entry = revlogutils.entry( | |
371 flags=constants.REVIDX_ISCENSORED, | |
372 data_offset=new_data_offset, | |
373 data_compressed_length=new_data_size, | |
374 data_uncompressed_length=new_data_size, | |
375 data_delta_base=rev, | |
376 link_rev=link_rev, | |
377 parent_rev_1=p1, | |
378 parent_rev_2=p2, | |
379 node_id=entry[ENTRY_NODE_ID], | |
380 sidedata_offset=0, | |
381 sidedata_compressed_length=0, | |
382 data_compression_mode=COMP_MODE_PLAIN, | |
383 sidedata_compression_mode=COMP_MODE_PLAIN, | |
384 ) | |
385 revlog.index.append(new_entry) | |
386 entry_bin = revlog.index.entry_binary(rev) | |
387 new_index_file.write(entry_bin) | |
388 revlog._docket.index_end = new_index_file.tell() | |
389 revlog._docket.data_end = new_data_file.tell() |