# HG changeset patch # User FUJIWARA Katsunori # Date 2015-10-07 16:41:30 # Node ID 61c295d9d4027ddbff54dca56efe8c1275b4d73e # Parent 1d23bf6cd90a84067552eca8f8c009ad70b71e6a 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. diff --git a/hgext/shelve.py b/hgext/shelve.py --- a/hgext/shelve.py +++ b/hgext/shelve.py @@ -734,6 +734,8 @@ def unshelve(ui, repo, *shelved, **opts) repo.unfiltered().changelog.strip(oldtiprev, tr) unshelvecleanup(ui, repo, basename, opts) + + _aborttransaction(repo) finally: ui.quiet = oldquiet if tr: