diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -679,7 +679,8 @@ # 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 @@ 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