diff -r db8037e38085 -r a4c19a162615 mercurial/debugcommands.py --- a/mercurial/debugcommands.py Mon Feb 15 14:40:17 2021 -0500 +++ b/mercurial/debugcommands.py Mon Feb 15 14:48:36 2021 -0500 @@ -471,17 +471,20 @@ """lists the capabilities of a remote peer""" opts = pycompat.byteskwargs(opts) peer = hg.peer(ui, opts, path) - caps = peer.capabilities() - ui.writenoi18n(b'Main capabilities:\n') - for c in sorted(caps): - ui.write(b' %s\n' % c) - b2caps = bundle2.bundle2caps(peer) - if b2caps: - ui.writenoi18n(b'Bundle2 capabilities:\n') - for key, values in sorted(pycompat.iteritems(b2caps)): - ui.write(b' %s\n' % key) - for v in values: - ui.write(b' %s\n' % v) + try: + caps = peer.capabilities() + ui.writenoi18n(b'Main capabilities:\n') + for c in sorted(caps): + ui.write(b' %s\n' % c) + b2caps = bundle2.bundle2caps(peer) + if b2caps: + ui.writenoi18n(b'Bundle2 capabilities:\n') + for key, values in sorted(pycompat.iteritems(b2caps)): + ui.write(b' %s\n' % key) + for v in values: + ui.write(b' %s\n' % v) + finally: + peer.close() @command( @@ -2615,12 +2618,17 @@ with ui.configoverride(overrides): peer = hg.peer(ui, {}, path) - local = peer.local() is not None - canpush = peer.canpush() - - ui.write(_(b'url: %s\n') % peer.url()) - ui.write(_(b'local: %s\n') % (_(b'yes') if local else _(b'no'))) - ui.write(_(b'pushable: %s\n') % (_(b'yes') if canpush else _(b'no'))) + try: + local = peer.local() is not None + canpush = peer.canpush() + + ui.write(_(b'url: %s\n') % peer.url()) + ui.write(_(b'local: %s\n') % (_(b'yes') if local else _(b'no'))) + ui.write( + _(b'pushable: %s\n') % (_(b'yes') if canpush else _(b'no')) + ) + finally: + peer.close() @command( @@ -2723,26 +2731,30 @@ """ target = hg.peer(ui, {}, repopath) - if keyinfo: - key, old, new = keyinfo - with target.commandexecutor() as e: - r = e.callcommand( - b'pushkey', - { - b'namespace': namespace, - b'key': key, - b'old': old, - b'new': new, - }, - ).result() - - ui.status(pycompat.bytestr(r) + b'\n') - return not r - else: - for k, v in sorted(pycompat.iteritems(target.listkeys(namespace))): - ui.write( - b"%s\t%s\n" % (stringutil.escapestr(k), stringutil.escapestr(v)) - ) + try: + if keyinfo: + key, old, new = keyinfo + with target.commandexecutor() as e: + r = e.callcommand( + b'pushkey', + { + b'namespace': namespace, + b'key': key, + b'old': old, + b'new': new, + }, + ).result() + + ui.status(pycompat.bytestr(r) + b'\n') + return not r + else: + for k, v in sorted(pycompat.iteritems(target.listkeys(namespace))): + ui.write( + b"%s\t%s\n" + % (stringutil.escapestr(k), stringutil.escapestr(v)) + ) + finally: + target.close() @command(b'debugpvec', [], _(b'A B')) @@ -4095,19 +4107,22 @@ def debugwireargs(ui, repopath, *vals, **opts): opts = pycompat.byteskwargs(opts) repo = hg.peer(ui, opts, repopath) - for opt in cmdutil.remoteopts: - del opts[opt[1]] - args = {} - for k, v in pycompat.iteritems(opts): - if v: - args[k] = v - args = pycompat.strkwargs(args) - # run twice to check that we don't mess up the stream for the next command - res1 = repo.debugwireargs(*vals, **args) - res2 = repo.debugwireargs(*vals, **args) - ui.write(b"%s\n" % res1) - if res1 != res2: - ui.warn(b"%s\n" % res2) + try: + for opt in cmdutil.remoteopts: + del opts[opt[1]] + args = {} + for k, v in pycompat.iteritems(opts): + if v: + args[k] = v + args = pycompat.strkwargs(args) + # run twice to check that we don't mess up the stream for the next command + res1 = repo.debugwireargs(*vals, **args) + res2 = repo.debugwireargs(*vals, **args) + ui.write(b"%s\n" % res1) + if res1 != res2: + ui.warn(b"%s\n" % res2) + finally: + repo.close() def _parsewirelangblocks(fh):