diff hgext/rebase.py @ 33056:2312e70cf78b

rebase: clean up rebasestate from active transaction Previously, rebase assumes the following pattern: rebase: with transaction as tr: # top-level ... tr.__close__ writes rebasestate unlink('rebasestate') However it's possible that "rebase" was called inside a transaction: with transaction as tr1: rebase: with transaction as tr2: # not top-level ... tr2.__close__ does not write rebasestate unlink('rebasestate') tr1.__close__ writes rebasestate That leaves a rebasestate on disk incorrectly. This patch adds "removefilegenerator" to notify transaction code that the state file is no longer needed therefore fixes the issue.
author Jun Wu <quark@fb.com>
date Sat, 24 Jun 2017 21:13:48 -0700
parents 04c9dd951a41
children 40ee74bfa111
line wrap: on
line diff
--- a/hgext/rebase.py	Sat Jun 24 21:01:28 2017 -0700
+++ b/hgext/rebase.py	Sat Jun 24 21:13:48 2017 -0700
@@ -1148,6 +1148,10 @@
 def clearstatus(repo):
     'Remove the status files'
     _clearrebasesetvisibiliy(repo)
+    # Make sure the active transaction won't write the state file
+    tr = repo.currenttransaction()
+    if tr:
+        tr.removefilegenerator('rebasestate')
     repo.vfs.unlinkpath("rebasestate", ignoremissing=True)
 
 def needupdate(repo, state):