Mercurial > hg-stable
changeset 26523:1d23bf6cd90a
shelve: restore shelved dirstate explicitly after aborting transaction
Before this patch, "hg shelve" uses aborting a current transaction to
discard temporary changes while shelving.
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.
This patch replaces 'if tr: tr.abort()' by 'lockmod.release(tr)',
because the former is already done in '_aborttransaction()' (and the
latter has no effect), if current transaction is aborted in it
successfully. Otherwise, the latter is enough to trigger aborting.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Thu, 08 Oct 2015 01:41:30 +0900 |
parents | 10f14bb22950 |
children | 61c295d9d402 |
files | hgext/shelve.py |
diffstat | 1 files changed, 3 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/shelve.py Thu Oct 08 01:41:30 2015 +0900 +++ b/hgext/shelve.py Thu Oct 08 01:41:30 2015 +0900 @@ -340,10 +340,10 @@ desc = util.ellipsis(desc, ui.termwidth()) ui.status(_('shelved as %s\n') % name) hg.update(repo, parent.node()) + + _aborttransaction(repo) finally: - if tr: - tr.abort() - lockmod.release(lock, wlock) + lockmod.release(tr, lock, wlock) def cleanupcmd(ui, repo): """subcommand that deletes all shelves"""