Mercurial > hg
changeset 50123:4e95341c89aa
dirstate: distinct transaction callback from largefile
This has not caused any issue so far because the large-files dirstate bypass the
transaction logic. We might want to change that.
In anyway, let us disarm this bug nest before it actually explode.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 20 Feb 2023 23:46:20 +0100 |
parents | 72b4d9284411 |
children | 18149ecb5122 |
files | hgext/largefiles/lfutil.py mercurial/dirstate.py |
diffstat | 2 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/largefiles/lfutil.py Mon Feb 20 16:31:36 2023 +0100 +++ b/hgext/largefiles/lfutil.py Mon Feb 20 23:46:20 2023 +0100 @@ -160,6 +160,7 @@ class largefilesdirstate(dirstate.dirstate): _large_file_dirstate = True + _tr_key_suffix = b'-large-files' def __getitem__(self, key): return super(largefilesdirstate, self).__getitem__(unixpath(key))
--- a/mercurial/dirstate.py Mon Feb 20 16:31:36 2023 +0100 +++ b/mercurial/dirstate.py Mon Feb 20 23:46:20 2023 +0100 @@ -133,6 +133,10 @@ @interfaceutil.implementer(intdirstate.idirstate) class dirstate: + + # used by largefile to avoid overwritting transaction callbacK + _tr_key_suffix = b'' + def __init__( self, opener, @@ -951,7 +955,10 @@ # make sure we invalidate the current change on abort if tr is not None: - tr.addabort(b'dirstate-invalidate', on_abort) + tr.addabort( + b'dirstate-invalidate%s' % self._tr_key_suffix, + on_abort, + ) self._attached_to_a_transaction = True @@ -961,7 +968,7 @@ # delay writing in-memory changes out tr.addfilegenerator( - b'dirstate-1-main', + b'dirstate-1-main%s' % self._tr_key_suffix, (self._filename,), on_success, location=b'plain', @@ -969,7 +976,7 @@ ) if write_key: tr.addfilegenerator( - b'dirstate-2-key-post', + b'dirstate-2-key-post%s' % self._tr_key_suffix, (self._filename_th,), lambda f: self._write_tracked_hint(tr, f), location=b'plain',