Patchwork [5,of,5] shelve: restore unshelved dirstate explicitly after aborting transaction

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Oct. 7, 2015, 4:50 p.m.
Message ID <20da185f655fd34bc366.1444236628@feefifofum>
Download mbox | patch
Permalink /patch/10857/
State Accepted
Headers show

Comments

Katsunori FUJIWARA - Oct. 7, 2015, 4:50 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1444236090 -32400
#      Thu Oct 08 01:41:30 2015 +0900
# Node ID 20da185f655fd34bc366460ab7f2486f33eb7fd3
# Parent  d59f0de5ef4958855f23937763ccb592b08d9fef
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.
Pierre-Yves David - Oct. 8, 2015, 5:48 a.m.
On 10/07/2015 09:50 AM, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1444236090 -32400
> #      Thu Oct 08 01:41:30 2015 +0900
> # Node ID 20da185f655fd34bc366460ab7f2486f33eb7fd3
> # Parent  d59f0de5ef4958855f23937763ccb592b08d9fef
> shelve: restore unshelved dirstate explicitly after aborting transaction

Urg, this (patch3) is hacky.

Pushed to the clowncopter with many thanks.

Patch

diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -724,6 +724,8 @@ 
         repo.unfiltered().changelog.strip(oldtiprev, tr)
 
         unshelvecleanup(ui, repo, basename, opts)
+
+        _aborttransaction(repo)
     finally:
         ui.quiet = oldquiet
         if tr: