# HG changeset patch # User Martin von Zweigbergk # Date 2019-02-05 04:49:45 # Node ID 630af04d4ae464892ec3f450eea74a9e7976fcf3 # Parent 8785188d1915474ad1b47a827c84f811f7b8d081 shelve: fix broken backup of conflicting untracked file Differential Revision: https://phab.mercurial-scm.org/D5852 diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -679,7 +679,8 @@ def mergefiles(ui, repo, wctx, shelvectx # revert will overwrite unknown files, so move them out of the way for file in repo.status(unknown=True).unknown: if file in files: - util.rename(file, scmutil.origpath(ui, repo, file)) + util.rename(repo.wjoin(file), + scmutil.backuppath(ui, repo, file)) ui.pushbuffer(True) cmdutil.revert(ui, repo, shelvectx, repo.dirstate.parents(), *pathtofiles(repo, files), diff --git a/tests/test-shelve2.t b/tests/test-shelve2.t --- a/tests/test-shelve2.t +++ b/tests/test-shelve2.t @@ -139,21 +139,13 @@ restores backup of unknown file to right 0 files updated, 0 files merged, 2 files removed, 0 files unresolved $ echo z > e $ mkdir dir -BROKEN: should work the same as when not using --cwd $ hg unshelve --cwd dir unshelving change 'default' - abort: $ENOENT$ - [255] $ rmdir dir $ cat e + e + $ cat e.orig z - $ test -f e.orig && cat e.orig - [1] -restore broken state - $ touch d - $ echo e > e - $ hg add d e - $ hg shelve --delete default unshelve and conflicts with tracked and untracked files