Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 47133:5e5fad5166e6
revlog: adjust rewrite_sidedata code to not delete existing revlog content
The "w+" file mode is deleting all the content of the opened file. Which is bad?
This is not caught by the test because the test only check for a full, initial
pull where not pre-existing content exists. So we need to fix our test coverage
here.
However they are another issue that prevent "incremental" pull to work here. See
next changeset for details.
Differential Revision: https://phab.mercurial-scm.org/D10543
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 03 May 2021 12:18:48 +0200 |
parents | 8bd769b5c941 |
children | 1b33e38d4b6d |
comparison
equal
deleted
inserted
replaced
47132:65e6970042c5 | 47133:5e5fad5166e6 |
---|---|
3116 fp.write(serialized_sidedata) | 3116 fp.write(serialized_sidedata) |
3117 new_entries.append(entry) | 3117 new_entries.append(entry) |
3118 current_offset += len(serialized_sidedata) | 3118 current_offset += len(serialized_sidedata) |
3119 | 3119 |
3120 # rewrite the new index entries | 3120 # rewrite the new index entries |
3121 with self._indexfp(b'w+') as fp: | 3121 with self._indexfp(b'r+') as fp: |
3122 fp.seek(startrev * self.index.entry_size) | 3122 fp.seek(startrev * self.index.entry_size) |
3123 for i, e in enumerate(new_entries): | 3123 for i, e in enumerate(new_entries): |
3124 rev = startrev + i | 3124 rev = startrev + i |
3125 self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) | 3125 self.index.replace_sidedata_info(rev, e[8], e[9], e[0]) |
3126 packed = self.index.entry_binary(rev) | 3126 packed = self.index.entry_binary(rev) |