HomePhabricator

dirstate: clean up when restoring identical backups

Authored by mbthomas.

Description

dirstate: clean up when restoring identical backups

When a dirstate backup is restored, it is possible that no actual changes to
the dirstate have been made. In this case, the backup is still a hardlink
to the original dirstate.

Unfortunately, os.rename silently fails (nothing happens, and no error
occurs) when src and dst are hardlinks to the same file. As a result,
the backup is left lying around. Over time, these files accumulate.

When restoring dirstate backups, check if the backup and the dirstate are
the same file, and if so, just delete the backup.

Differential Revision: https://phab.mercurial-scm.org/D1201