comparison 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
comparison
equal deleted inserted replaced
36238:f574cc00831a 36239:428de1a59f2d
901 ctx.description().rstrip().splitlines()[0]), 901 ctx.description().rstrip().splitlines()[0]),
902 'r': lambda: ('%d' % ctx.rev()).zfill(revwidth or 0), 902 'r': lambda: ('%d' % ctx.rev()).zfill(revwidth or 0),
903 '%': lambda: '%', 903 '%': lambda: '%',
904 'b': lambda: os.path.basename(ctx.repo().root), 904 'b': lambda: os.path.basename(ctx.repo().root),
905 } 905 }
906 906 if total is not None:
907 try: 907 expander['N'] = lambda: '%d' % total
908 if total is not None: 908 if seqno is not None:
909 expander['N'] = lambda: '%d' % total 909 expander['n'] = lambda: '%d' % seqno
910 if seqno is not None: 910 if total is not None and seqno is not None:
911 expander['n'] = lambda: '%d' % seqno 911 expander['n'] = (lambda: ('%d' % seqno).zfill(len('%d' % total)))
912 if total is not None and seqno is not None: 912 if pathname is not None:
913 expander['n'] = (lambda: ('%d' % seqno).zfill(len('%d' % total))) 913 expander['s'] = lambda: os.path.basename(pathname)
914 if pathname is not None: 914 expander['d'] = lambda: os.path.dirname(pathname) or '.'
915 expander['s'] = lambda: os.path.basename(pathname) 915 expander['p'] = lambda: pathname
916 expander['d'] = lambda: os.path.dirname(pathname) or '.' 916
917 expander['p'] = lambda: pathname 917 newname = []
918 918 patlen = len(pat)
919 newname = [] 919 i = 0
920 patlen = len(pat) 920 while i < patlen:
921 i = 0 921 c = pat[i:i + 1]
922 while i < patlen: 922 if c == '%':
923 i += 1
923 c = pat[i:i + 1] 924 c = pat[i:i + 1]
924 if c == '%': 925 try:
925 i += 1
926 c = pat[i:i + 1]
927 c = expander[c]() 926 c = expander[c]()
928 newname.append(c) 927 except KeyError:
929 i += 1 928 raise error.Abort(_("invalid format spec '%%%s' in output "
930 return ''.join(newname) 929 "filename") % c)
931 except KeyError as inst: 930 newname.append(c)
932 raise error.Abort(_("invalid format spec '%%%s' in output filename") % 931 i += 1
933 inst.args[0]) 932 return ''.join(newname)
934 933
935 def isstdiofilename(pat): 934 def isstdiofilename(pat):
936 """True if the given pat looks like a filename denoting stdin/stdout""" 935 """True if the given pat looks like a filename denoting stdin/stdout"""
937 return not pat or pat == '-' 936 return not pat or pat == '-'
938 937