[PATCH] shelve: fix crash on unshelve without .shelve metadata file
Augie Fackler
raf at durin42.com
Sat Sep 1 14:38:40 UTC 2018
queued
> On Aug 31, 2018, at 8:30 AM, Yuya Nishihara <yuya at tcha.org> wrote:
>
> # HG changeset patch
> # User Yuya Nishihara <yuya at tcha.org>
> # Date 1535717428 -32400
> # Fri Aug 31 21:10:28 2018 +0900
> # Node ID 1eae14fe0f9b3ed85929b6ce806c6d5a6a355117
> # Parent b64d36e5ca31cc25e159f0fc3e710dbf46b89546
> shelve: fix crash on unshelve without .shelve metadata file
>
> Follow up for c67c94c0e7ae and 38373da1af02.
>
> The inline comment says "we should keep track of the unshelve node in case
> we need to reuse it." Perhaps such case isn't tested, and this patch does
> NOT add a test for the reuse of the unbundled revision.
>
> Also, I have no idea what should be done if new revision is unbundled
> because of "node not in repo".
>
> diff --git a/hgext/shelve.py b/hgext/shelve.py
> --- a/hgext/shelve.py
> +++ b/hgext/shelve.py
> @@ -765,6 +765,7 @@ def _commitworkingcopychanges(ui, repo,
> def _unshelverestorecommit(ui, repo, basename):
> """Recreate commit in the repository during the unshelve"""
> repo = repo.unfiltered()
> + node = None
> if shelvedfile(repo, basename, 'shelve').exists():
> node = shelvedfile(repo, basename, 'shelve').readinfo()['node']
> if node is None or node not in repo:
> @@ -774,7 +775,7 @@ def _unshelverestorecommit(ui, repo, bas
> # We might not strip the unbundled changeset, so we should keep track of
> # the unshelve node in case we need to reuse it (eg: unshelve --keep)
> if node is None:
> - info = {'node': nodemod.hex(node)}
> + info = {'node': nodemod.hex(shelvectx.node())}
> shelvedfile(repo, basename, 'shelve').writeinfo(info)
> else:
> shelvectx = repo[node]
> diff --git a/tests/test-shelve.t b/tests/test-shelve.t
> --- a/tests/test-shelve.t
> +++ b/tests/test-shelve.t
> @@ -1793,5 +1793,23 @@ putting v1 shelvedstate file in place of
> mercurial does not crash
> $ hg unshelve --continue
> unshelve of 'ashelve' complete
> +
> +Unshelve without .shelve metadata:
> +
> + $ hg shelve
> + shelved as default
> + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> + $ rm .hg/shelved/default.shelve
> + $ echo 3 > a
> + $ hg unshelve
> + unshelving change 'default'
> + temporarily committing pending changes (restore with 'hg unshelve --abort')
> + rebasing shelved changes
> + merging a
> + warning: conflicts while merging a! (edit, then use 'hg resolve --mark')
> + unresolved conflicts (see 'hg resolve', then 'hg unshelve --continue')
> + [1]
> + $ cat .hg/shelved/default.shelve
> + node=82e0cb9893247d12667017593ce1e5655860f1ac
> +
> $ cd ..
> -
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list