import: use context manager for lock, dirstateguard, transaction
A tiny side-effect is that the transaction is now closed after saving
the commit message.
Differential Revision: https://phab.mercurial-scm.org/D3748
--- a/mercurial/commands.py Sun Jun 17 23:03:23 2018 -0400
+++ b/mercurial/commands.py Thu Jun 14 15:17:47 2018 -0700
@@ -40,7 +40,6 @@
hbisect,
help,
hg,
- lock as lockmod,
logcmdutil,
merge as mergemod,
obsolete,
@@ -67,8 +66,6 @@
stringutil,
)
-release = lockmod.release
-
table = {}
table.update(debugcommandsmod.command._table)
@@ -3111,22 +3108,24 @@
raise error.Abort(_('cannot use --exact with --prefix'))
base = opts["base"]
- dsguard = lock = tr = None
msgs = []
ret = 0
with repo.wlock():
- try:
- if update:
- cmdutil.checkunfinished(repo)
- if (exact or not opts.get('force')):
- cmdutil.bailifchanged(repo)
-
- if not opts.get('no_commit'):
- lock = repo.lock()
- tr = repo.transaction('import')
- else:
- dsguard = dirstateguard.dirstateguard(repo, 'import')
+ if update:
+ cmdutil.checkunfinished(repo)
+ if (exact or not opts.get('force')):
+ cmdutil.bailifchanged(repo)
+
+ if not opts.get('no_commit'):
+ lock = repo.lock
+ tr = lambda: repo.transaction('import')
+ dsguard = util.nullcontextmanager
+ else:
+ lock = util.nullcontextmanager
+ tr = util.nullcontextmanager
+ dsguard = lambda: dirstateguard.dirstateguard(repo, 'import')
+ with lock(), tr(), dsguard():
parents = repo[None].parents()
for patchurl in patches:
if patchurl == '-':
@@ -3162,17 +3161,9 @@
if not haspatch:
raise error.Abort(_('%s: no diffs found') % patchurl)
- if tr:
- tr.close()
if msgs:
repo.savecommitmessage('\n* * *\n'.join(msgs))
- if dsguard:
- dsguard.close()
- return ret
- finally:
- if tr:
- tr.release()
- release(lock, dsguard)
+ return ret
@command('incoming|in',
[('f', 'force', None,