diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py index 1f28172cfce97a988296980cba7c4fb5564f547a_bWVyY3VyaWFsL2RpcnN0YXRlLnB5..9313d8666a0fc0adef5d6d08136e6622bbc38480_bWVyY3VyaWFsL2RpcnN0YXRlLnB5 100644 --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -1530,14 +1530,7 @@ tr.registertmp(filename, location=b'plain') self._opener.tryunlink(backupname) - # hardlink backup is okay because _writedirstate is always called - # with an "atomictemp=True" file. - util.copyfile( - self._opener.join(filename), - self._opener.join(backupname), - hardlink=True, - ) - data_pair = self._new_backup_data_filename(backupname) - if data_pair is not None: - data_filename, bck_data_filename = data_pair + if True: + # hardlink backup is okay because _writedirstate is always called + # with an "atomictemp=True" file. util.copyfile( @@ -1543,5 +1536,5 @@ util.copyfile( - self._opener.join(data_filename), - self._opener.join(bck_data_filename), + self._opener.join(filename), + self._opener.join(backupname), hardlink=True, ) @@ -1546,10 +1539,18 @@ hardlink=True, ) - if tr is not None: - # ensure that pending file written above is unlinked at - # failure, even if tr.writepending isn't invoked until the - # end of this transaction - tr.registertmp(bck_data_filename, location=b'plain') + data_pair = self._new_backup_data_filename(backupname) + if data_pair is not None: + data_filename, bck_data_filename = data_pair + util.copyfile( + self._opener.join(data_filename), + self._opener.join(bck_data_filename), + hardlink=True, + ) + if tr is not None: + # ensure that pending file written above is unlinked at + # failure, even if tr.writepending isn't invoked until the + # end of this transaction + tr.registertmp(bck_data_filename, location=b'plain') def restorebackup(self, tr, backupname): '''Restore dirstate by backup file'''