# HG changeset patch # User Matt Mackall # Date 2013-07-26 22:08:05 # Node ID 8b190adb7ee3c780495f52a2e5aae5e89e007110 # Parent 8963a706e075e25e0b65ce2f3372f9aba2c2f8a6 revert: make backup when unforgetting a file (issue3423) This skips the backup if it would be a duplicate. diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -1976,7 +1976,7 @@ def revert(ui, repo, ctx, parents, *pats # make backup if not in target manifest (modified, revert, remove, True, True), (added, revert, remove, True, False), - (removed, undelete, None, False, False), + (removed, undelete, None, True, False), (deleted, revert, remove, False, False), ) @@ -1986,7 +1986,8 @@ def revert(ui, repo, ctx, parents, *pats def handle(xlist, dobackup): xlist[0].append(abs) if (dobackup and not opts.get('no_backup') and - os.path.lexists(target)): + os.path.lexists(target) and + repo[None][abs].cmp(ctx[abs])): bakname = "%s.orig" % rel ui.note(_('saving current version of %s as %s\n') % (rel, bakname)) diff --git a/tests/test-issue660.t b/tests/test-issue660.t --- a/tests/test-issue660.t +++ b/tests/test-issue660.t @@ -73,6 +73,15 @@ Revert all - should succeed: $ hg st +Issue3423: + + $ hg forget a + $ echo zed > a + $ hg revert a + $ hg st + ? a.orig + $ rm a.orig + addremove: $ rm -r a b