shelve: restore unshelved dirstate explicitly after aborting transaction
Before this patch, "hg unshelve" uses aborting a current transaction
to discard temporary changes while unshelving.
This assumes that dirstate changes in a transaction scope are kept
even after aborting it. But this assumption will be broken by
"transactional dirstate". See the wiki page below for detail about it.
https://mercurial.selenic.com/wiki/DirstateTransactionPlan
This patch explicitly saves shelved dirstate just before aborting
current transaction, and restore dirstate with it after aborting by
utility function '_aborttransaction()' added by previous patch.
--- a/hgext/shelve.py Thu Oct 08 01:41:30 2015 +0900
+++ b/hgext/shelve.py Thu Oct 08 01:41:30 2015 +0900
@@ -734,6 +734,8 @@
repo.unfiltered().changelog.strip(oldtiprev, tr)
unshelvecleanup(ui, repo, basename, opts)
+
+ _aborttransaction(repo)
finally:
ui.quiet = oldquiet
if tr: