D5622: localrepo: use context manager for transaction in commit()
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Jan 17 05:29:09 UTC 2019
martinvonz created this revision.
Herald added a reviewer: durin42.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
A side-effect is that the transaction is released a little earlier, so
the "commit message saved in ..." messages now comes after the
"rollback completed" message. That seems slightly better to me.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5622
AFFECTED FILES
mercurial/localrepo.py
tests/test-histedit-edit.t
tests/test-mq-qnew.t
tests/test-rollback.t
tests/test-tag.t
CHANGE DETAILS
diff --git a/tests/test-tag.t b/tests/test-tag.t
--- a/tests/test-tag.t
+++ b/tests/test-tag.t
@@ -320,9 +320,9 @@
HG: branch 'tag-and-branch-same-name'
HG: changed .hgtags
====
- note: commit message saved in .hg/last-message.txt
transaction abort!
rollback completed
+ note: commit message saved in .hg/last-message.txt
abort: pretxncommit.unexpectedabort hook exited with status 1
[255]
$ cat .hg/last-message.txt
diff --git a/tests/test-rollback.t b/tests/test-rollback.t
--- a/tests/test-rollback.t
+++ b/tests/test-rollback.t
@@ -113,9 +113,9 @@
> echo "another precious commit message" > "$1"
> __EOF__
$ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg --config hooks.pretxncommit=false commit 2>&1
- note: commit message saved in .hg/last-message.txt
transaction abort!
rollback completed
+ note: commit message saved in .hg/last-message.txt
abort: pretxncommit hook exited with status * (glob)
[255]
$ cat .hg/last-message.txt
diff --git a/tests/test-mq-qnew.t b/tests/test-mq-qnew.t
--- a/tests/test-mq-qnew.t
+++ b/tests/test-mq-qnew.t
@@ -305,9 +305,9 @@
HG: branch 'default'
HG: no files changed
====
- note: commit message saved in .hg/last-message.txt
transaction abort!
rollback completed
+ note: commit message saved in .hg/last-message.txt
abort: pretxncommit.unexpectedabort hook exited with status 1
[255]
$ cat .hg/last-message.txt
diff --git a/tests/test-histedit-edit.t b/tests/test-histedit-edit.t
--- a/tests/test-histedit-edit.t
+++ b/tests/test-histedit-edit.t
@@ -370,9 +370,9 @@
HG: branch 'default'
HG: added f
====
- note: commit message saved in .hg/last-message.txt
transaction abort!
rollback completed
+ note: commit message saved in .hg/last-message.txt
abort: pretxncommit.unexpectedabort hook exited with status 1
[255]
$ cat .hg/last-message.txt
@@ -394,9 +394,9 @@
HG: user: test
HG: branch 'default'
HG: added f
- note: commit message saved in .hg/last-message.txt
transaction abort!
rollback completed
+ note: commit message saved in .hg/last-message.txt
abort: pretxncommit.unexpectedabort hook exited with status 1
[255]
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -2408,7 +2408,7 @@
match.explicitdir = vdirs.append
match.bad = fail
- wlock = lock = tr = None
+ wlock = lock = None
try:
wlock = self.wlock()
lock = self.lock() # for recent changelog (see issue4368)
@@ -2472,21 +2472,20 @@
try:
self.hook("precommit", throw=True, parent1=hookp1,
parent2=hookp2)
- tr = self.transaction('commit')
- ret = self.commitctx(cctx, True)
- # update bookmarks, dirstate and mergestate
- bookmarks.update(self, [p1, p2], ret)
- cctx.markcommitted(ret)
- ms.reset()
- tr.close()
+ with self.transaction('commit'):
+ ret = self.commitctx(cctx, True)
+ # update bookmarks, dirstate and mergestate
+ bookmarks.update(self, [p1, p2], ret)
+ cctx.markcommitted(ret)
+ ms.reset()
except: # re-raises
if edited:
self.ui.write(
_('note: commit message saved in %s\n') % msgfn)
raise
finally:
- lockmod.release(tr, lock, wlock)
+ lockmod.release(lock, wlock)
def commithook(node=hex(ret), parent1=hookp1, parent2=hookp2):
# hack for command that use a temporary commit (eg: histedit)
To: martinvonz, durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list