diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -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) @@ -3108,22 +3105,27 @@ 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() + if update: + cmdutil.checkunfinished(repo) + if (exact or not opts.get('force')): + cmdutil.bailifchanged(repo) + + if not opts.get('no_commit'): + lock = repo.lock() + try: tr = repo.transaction('import') - else: - dsguard = dirstateguard.dirstateguard(repo, 'import') + except: + lock.release() + dsguard = util.nullcontextmanager() + else: + lock = util.nullcontextmanager() + tr = util.nullcontextmanager() + dsguard = dirstateguard.dirstateguard(repo, 'import') + with lock, tr, dsguard: parents = repo[None].parents() for patchurl in patches: if patchurl == '-': @@ -3159,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,