Mercurial > hg
changeset 47470:d6afe1478a2a
censor: extract the part about creating and opening new files 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.
The last part is the file copying and opening logic. It now have its own
function.
Differential Revision: https://phab.mercurial-scm.org/D10901
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 22 Jun 2021 22:28:51 +0200 |
parents | 60c48458ee6c |
children | aab064416f0c |
files | mercurial/revlogutils/rewrite.py |
diffstat | 1 files changed, 79 insertions(+), 54 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/rewrite.py Tue Jun 22 22:10:22 2021 +0200 +++ b/mercurial/revlogutils/rewrite.py Tue Jun 22 22:28:51 2021 +0200 @@ -163,55 +163,12 @@ tmp_storage, ) - old_index_filepath = rl.opener.join(docket.index_filepath()) - old_data_filepath = rl.opener.join(docket.data_filepath()) - old_sidedata_filepath = rl.opener.join(docket.sidedata_filepath()) - - new_index_filepath = rl.opener.join(docket.new_index_file()) - new_data_filepath = rl.opener.join(docket.new_data_file()) - new_sidedata_filepath = rl.opener.join(docket.new_sidedata_file()) - - util.copyfile( - old_index_filepath, new_index_filepath, nb_bytes=index_cutoff - ) - util.copyfile( - old_data_filepath, new_data_filepath, nb_bytes=data_cutoff - ) - util.copyfile( - old_sidedata_filepath, - new_sidedata_filepath, - nb_bytes=sidedata_cutoff, + all_files = _setup_new_files( + rl, + index_cutoff, + data_cutoff, + sidedata_cutoff, ) - rl.opener.register_file(docket.index_filepath()) - rl.opener.register_file(docket.data_filepath()) - rl.opener.register_file(docket.sidedata_filepath()) - - docket.index_end = index_cutoff - docket.data_end = data_cutoff - docket.sidedata_end = sidedata_cutoff - - # reload the revlog internal information - rl.clearcaches() - rl._loadindex(docket=docket) - - @contextlib.contextmanager - def all_files(): - # hide opening in an helper function to please check-code, black - # and various python ersion at the same time - with open(old_data_filepath, 'rb') as old_data_file: - with open(old_sidedata_filepath, 'rb') as old_sidedata_file: - with open(new_index_filepath, 'r+b') as new_index_file: - with open(new_data_filepath, 'r+b') as new_data_file: - with open( - new_sidedata_filepath, 'r+b' - ) as new_sidedata_file: - yield ( - old_data_file, - old_sidedata_file, - new_index_file, - new_data_file, - new_sidedata_file, - ) # we dont need to open the old index file since its content already # exist in a usable form in `old_index`. @@ -223,12 +180,6 @@ new_data_file, new_sidedata_file, ) = open_files - new_index_file.seek(0, os.SEEK_END) - assert new_index_file.tell() == index_cutoff - new_data_file.seek(0, os.SEEK_END) - assert new_data_file.tell() == data_cutoff - new_sidedata_file.seek(0, os.SEEK_END) - assert new_sidedata_file.tell() == sidedata_cutoff # writing the censored revision _rewrite_censor( @@ -305,6 +256,80 @@ return rewritten_entries +def _setup_new_files( + revlog, + index_cutoff, + data_cutoff, + sidedata_cutoff, +): + """ + + return a context manager to open all the relevant files: + - old_data_file, + - old_sidedata_file, + - new_index_file, + - new_data_file, + - new_sidedata_file, + + The old_index_file is not here because it is accessed through the + `old_index` object if the caller function. + """ + docket = revlog._docket + old_index_filepath = revlog.opener.join(docket.index_filepath()) + old_data_filepath = revlog.opener.join(docket.data_filepath()) + old_sidedata_filepath = revlog.opener.join(docket.sidedata_filepath()) + + new_index_filepath = revlog.opener.join(docket.new_index_file()) + new_data_filepath = revlog.opener.join(docket.new_data_file()) + new_sidedata_filepath = revlog.opener.join(docket.new_sidedata_file()) + + util.copyfile(old_index_filepath, new_index_filepath, nb_bytes=index_cutoff) + util.copyfile(old_data_filepath, new_data_filepath, nb_bytes=data_cutoff) + util.copyfile( + old_sidedata_filepath, + new_sidedata_filepath, + nb_bytes=sidedata_cutoff, + ) + revlog.opener.register_file(docket.index_filepath()) + revlog.opener.register_file(docket.data_filepath()) + revlog.opener.register_file(docket.sidedata_filepath()) + + docket.index_end = index_cutoff + docket.data_end = data_cutoff + docket.sidedata_end = sidedata_cutoff + + # reload the revlog internal information + revlog.clearcaches() + revlog._loadindex(docket=docket) + + @contextlib.contextmanager + def all_files_opener(): + # hide opening in an helper function to please check-code, black + # and various python version at the same time + with open(old_data_filepath, 'rb') as old_data_file: + with open(old_sidedata_filepath, 'rb') as old_sidedata_file: + with open(new_index_filepath, 'r+b') as new_index_file: + with open(new_data_filepath, 'r+b') as new_data_file: + with open( + new_sidedata_filepath, 'r+b' + ) as new_sidedata_file: + new_index_file.seek(0, os.SEEK_END) + assert new_index_file.tell() == index_cutoff + new_data_file.seek(0, os.SEEK_END) + assert new_data_file.tell() == data_cutoff + new_sidedata_file.seek(0, os.SEEK_END) + assert new_sidedata_file.tell() == sidedata_cutoff + yield ( + old_data_file, + old_sidedata_file, + new_index_file, + new_data_file, + new_sidedata_file, + ) + + return all_files_opener + + def _rewrite_simple( revlog, old_index,