import: use context manager for lock, dirstateguard, transaction
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 14 Jun 2018 15:17:47 -0700
changeset 38361 2ceea1554d1e
parent 38360 c1fca51c26f3
child 38362 e53879421ecd
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
mercurial/commands.py
--- 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,