# HG changeset patch # User FUJIWARA Katsunori # Date 2016-06-12 20:11:56 # Node ID a9ccd9af48efccfa5b5b348cf095c5af241c6780 # Parent 37c7f9fb7040a1a10d27872e09a904b4a9b6505a transaction: avoid ambiguity of file stat at restoring from backup In some cases below, copying from backup is used to restore original contents of a file, which is backuped via addfilegenerator(). If copying keeps ctime, mtime and size of a file, restoring is overlooked, and old contents cached before restoring isn't invalidated as expected. - failure of transaction (from '.hg/journal.backup.*') - rollback of previous transaction (from '.hg/undo.backup.*') To avoid ambiguity of file stat at restoring, this patch invokes util.copyfile() with checkambig=True. This patch is a part of "Exact Cache Validation Plan": https://www.mercurial-scm.org/wiki/ExactCacheValidationPlan diff --git a/mercurial/transaction.py b/mercurial/transaction.py --- a/mercurial/transaction.py +++ b/mercurial/transaction.py @@ -72,7 +72,7 @@ def _playback(journal, report, opener, v filepath = vfs.join(f) backuppath = vfs.join(b) try: - util.copyfile(backuppath, filepath) + util.copyfile(backuppath, filepath, checkambig=True) backupfiles.append(b) except IOError: report(_("failed to recover %s\n") % f)