comparison mercurial/commands.py @ 38361:2ceea1554d1e

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
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 14 Jun 2018 15:17:47 -0700
parents 57dc72b56b6c
children 7fbb5d76c555
comparison
equal deleted inserted replaced
38360:c1fca51c26f3 38361:2ceea1554d1e
38 formatter, 38 formatter,
39 graphmod, 39 graphmod,
40 hbisect, 40 hbisect,
41 help, 41 help,
42 hg, 42 hg,
43 lock as lockmod,
44 logcmdutil, 43 logcmdutil,
45 merge as mergemod, 44 merge as mergemod,
46 obsolete, 45 obsolete,
47 obsutil, 46 obsutil,
48 patch, 47 patch,
64 ) 63 )
65 from .utils import ( 64 from .utils import (
66 dateutil, 65 dateutil,
67 stringutil, 66 stringutil,
68 ) 67 )
69
70 release = lockmod.release
71 68
72 table = {} 69 table = {}
73 table.update(debugcommandsmod.command._table) 70 table.update(debugcommandsmod.command._table)
74 71
75 command = registrar.command(table) 72 command = registrar.command(table)
3109 raise error.Abort(_('cannot use --exact with --edit')) 3106 raise error.Abort(_('cannot use --exact with --edit'))
3110 if opts.get('prefix'): 3107 if opts.get('prefix'):
3111 raise error.Abort(_('cannot use --exact with --prefix')) 3108 raise error.Abort(_('cannot use --exact with --prefix'))
3112 3109
3113 base = opts["base"] 3110 base = opts["base"]
3114 dsguard = lock = tr = None
3115 msgs = [] 3111 msgs = []
3116 ret = 0 3112 ret = 0
3117 3113
3118 with repo.wlock(): 3114 with repo.wlock():
3119 try: 3115 if update:
3120 if update: 3116 cmdutil.checkunfinished(repo)
3121 cmdutil.checkunfinished(repo) 3117 if (exact or not opts.get('force')):
3122 if (exact or not opts.get('force')): 3118 cmdutil.bailifchanged(repo)
3123 cmdutil.bailifchanged(repo) 3119
3124 3120 if not opts.get('no_commit'):
3125 if not opts.get('no_commit'): 3121 lock = repo.lock
3126 lock = repo.lock() 3122 tr = lambda: repo.transaction('import')
3127 tr = repo.transaction('import') 3123 dsguard = util.nullcontextmanager
3128 else: 3124 else:
3129 dsguard = dirstateguard.dirstateguard(repo, 'import') 3125 lock = util.nullcontextmanager
3126 tr = util.nullcontextmanager
3127 dsguard = lambda: dirstateguard.dirstateguard(repo, 'import')
3128 with lock(), tr(), dsguard():
3130 parents = repo[None].parents() 3129 parents = repo[None].parents()
3131 for patchurl in patches: 3130 for patchurl in patches:
3132 if patchurl == '-': 3131 if patchurl == '-':
3133 ui.status(_('applying patch from stdin\n')) 3132 ui.status(_('applying patch from stdin\n'))
3134 patchfile = ui.fin 3133 patchfile = ui.fin
3160 break 3159 break
3161 3160
3162 if not haspatch: 3161 if not haspatch:
3163 raise error.Abort(_('%s: no diffs found') % patchurl) 3162 raise error.Abort(_('%s: no diffs found') % patchurl)
3164 3163
3165 if tr:
3166 tr.close()
3167 if msgs: 3164 if msgs:
3168 repo.savecommitmessage('\n* * *\n'.join(msgs)) 3165 repo.savecommitmessage('\n* * *\n'.join(msgs))
3169 if dsguard: 3166 return ret
3170 dsguard.close()
3171 return ret
3172 finally:
3173 if tr:
3174 tr.release()
3175 release(lock, dsguard)
3176 3167
3177 @command('incoming|in', 3168 @command('incoming|in',
3178 [('f', 'force', None, 3169 [('f', 'force', None,
3179 _('run even if remote repository is unrelated')), 3170 _('run even if remote repository is unrelated')),
3180 ('n', 'newest-first', None, _('show newest record first')), 3171 ('n', 'newest-first', None, _('show newest record first')),