D2912: rebase: register status file generator only once when using single transaction
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Mar 21 18:11:16 UTC 2018
martinvonz created this revision.
martinvonz added a reviewer: phillco.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
rebase.storestatus() behaved differently depending on whether a
transaction is passed to it. If a transaction is passed, it registers
a "file generator" that runs when the transaction commits. If no
transaction was passed, it writes the rebase state immediately. This
imprecise timing of the writing makes it hard to reason about, so
let's make it more explicit which behavior we're getting by checking
if we have a transaction before calling it. For the single-transaction
case, move the call to storestatus(tr) early and do it only once since
it's only going to write the file (at most) once anyway.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D2912
AFFECTED FILES
hgext/rebase.py
CHANGE DETAILS
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -420,6 +420,10 @@
# Store the state before we begin so users can run 'hg rebase --abort'
# if we fail before the transaction closes.
self.storestatus()
+ if tr:
+ # When using single transaction, store state when transaction
+ # commits.
+ self.storestatus(tr)
cands = [k for k, v in self.state.iteritems() if v == revtodo]
total = len(cands)
@@ -480,7 +484,8 @@
p1, p2, base = defineparents(repo, rev, self.destmap,
self.state, self.skipped,
self.obsoletenotrebased)
- self.storestatus(tr=tr)
+ if not tr:
+ self.storestatus()
if len(repo[None].parents()) == 2:
repo.ui.debug('resuming interrupted rebase\n')
else:
To: martinvonz, phillco, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list