Mercurial > hg
diff mercurial/cmdutil.py @ 36239:428de1a59f2d
cmdutil: narrow scope of KeyError in makefilename()
It seemed too broad to catch a standard Python exception.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 07 Jan 2018 11:26:16 +0900 |
parents | cc46e68f050f |
children | f62369667a7c |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Wed Feb 14 21:34:12 2018 -0500 +++ b/mercurial/cmdutil.py Sun Jan 07 11:26:16 2018 +0900 @@ -903,34 +903,33 @@ '%': lambda: '%', 'b': lambda: os.path.basename(ctx.repo().root), } - - try: - if total is not None: - expander['N'] = lambda: '%d' % total - if seqno is not None: - expander['n'] = lambda: '%d' % seqno - if total is not None and seqno is not None: - expander['n'] = (lambda: ('%d' % seqno).zfill(len('%d' % total))) - if pathname is not None: - expander['s'] = lambda: os.path.basename(pathname) - expander['d'] = lambda: os.path.dirname(pathname) or '.' - expander['p'] = lambda: pathname - - newname = [] - patlen = len(pat) - i = 0 - while i < patlen: + if total is not None: + expander['N'] = lambda: '%d' % total + if seqno is not None: + expander['n'] = lambda: '%d' % seqno + if total is not None and seqno is not None: + expander['n'] = (lambda: ('%d' % seqno).zfill(len('%d' % total))) + if pathname is not None: + expander['s'] = lambda: os.path.basename(pathname) + expander['d'] = lambda: os.path.dirname(pathname) or '.' + expander['p'] = lambda: pathname + + newname = [] + patlen = len(pat) + i = 0 + while i < patlen: + c = pat[i:i + 1] + if c == '%': + i += 1 c = pat[i:i + 1] - if c == '%': - i += 1 - c = pat[i:i + 1] + try: c = expander[c]() - newname.append(c) - i += 1 - return ''.join(newname) - except KeyError as inst: - raise error.Abort(_("invalid format spec '%%%s' in output filename") % - inst.args[0]) + except KeyError: + raise error.Abort(_("invalid format spec '%%%s' in output " + "filename") % c) + newname.append(c) + i += 1 + return ''.join(newname) def isstdiofilename(pat): """True if the given pat looks like a filename denoting stdin/stdout"""