shelve: restore unshelved dirstate explicitly after aborting transaction
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Thu, 08 Oct 2015 01:41:30 +0900
changeset 26524 61c295d9d402
parent 26523 1d23bf6cd90a
child 26525 abc2327e382a
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.
hgext/shelve.py
--- 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: