Show More
@@ -199,33 +199,6 b' def earlygetopt(args, shortlist, namelis' | |||||
199 | parsedargs.extend(args[argcount + (not keepsep):]) |
|
199 | parsedargs.extend(args[argcount + (not keepsep):]) | |
200 | return parsedopts, parsedargs |
|
200 | return parsedopts, parsedargs | |
201 |
|
201 | |||
202 | def gnugetopt(args, options, longoptions): |
|
|||
203 | """Parse options mostly like getopt.gnu_getopt. |
|
|||
204 |
|
||||
205 | This is different from getopt.gnu_getopt in that an argument of - will |
|
|||
206 | become an argument of - instead of vanishing completely. |
|
|||
207 | """ |
|
|||
208 | extraargs = [] |
|
|||
209 | if '--' in args: |
|
|||
210 | stopindex = args.index('--') |
|
|||
211 | extraargs = args[stopindex + 1:] |
|
|||
212 | args = args[:stopindex] |
|
|||
213 | opts, parseargs = pycompat.getoptb(args, options, longoptions) |
|
|||
214 | args = [] |
|
|||
215 | while parseargs: |
|
|||
216 | arg = parseargs.pop(0) |
|
|||
217 | if arg and arg[0:1] == '-' and len(arg) > 1: |
|
|||
218 | parseargs.insert(0, arg) |
|
|||
219 | topts, newparseargs = pycompat.getoptb(parseargs,\ |
|
|||
220 | options, longoptions) |
|
|||
221 | opts = opts + topts |
|
|||
222 | parseargs = newparseargs |
|
|||
223 | else: |
|
|||
224 | args.append(arg) |
|
|||
225 | args.extend(extraargs) |
|
|||
226 | return opts, args |
|
|||
227 |
|
||||
228 |
|
||||
229 | def fancyopts(args, options, state, gnu=False, early=False, optaliases=None): |
|
202 | def fancyopts(args, options, state, gnu=False, early=False, optaliases=None): | |
230 | """ |
|
203 | """ | |
231 | read args, parse options, and store options in state |
|
204 | read args, parse options, and store options in state | |
@@ -312,7 +285,7 b' def fancyopts(args, options, state, gnu=' | |||||
312 | if early: |
|
285 | if early: | |
313 | parse = functools.partial(earlygetopt, gnu=gnu) |
|
286 | parse = functools.partial(earlygetopt, gnu=gnu) | |
314 | elif gnu: |
|
287 | elif gnu: | |
315 | parse = gnugetopt |
|
288 | parse = pycompat.gnugetoptb | |
316 | else: |
|
289 | else: | |
317 | parse = pycompat.getoptb |
|
290 | parse = pycompat.getoptb | |
318 | opts, args = parse(args, shortlist, namelist) |
|
291 | opts, args = parse(args, shortlist, namelist) |
@@ -214,7 +214,7 b' if ispy3:' | |||||
214 | def open(name, mode='r', buffering=-1): |
|
214 | def open(name, mode='r', buffering=-1): | |
215 | return builtins.open(name, sysstr(mode), buffering) |
|
215 | return builtins.open(name, sysstr(mode), buffering) | |
216 |
|
216 | |||
217 | def getoptb(args, shortlist, namelist): |
|
217 | def _getoptbwrapper(orig, args, shortlist, namelist): | |
218 | """ |
|
218 | """ | |
219 | Takes bytes arguments, converts them to unicode, pass them to |
|
219 | Takes bytes arguments, converts them to unicode, pass them to | |
220 | getopt.getopt(), convert the returned values back to bytes and then |
|
220 | getopt.getopt(), convert the returned values back to bytes and then | |
@@ -224,7 +224,7 b' if ispy3:' | |||||
224 | args = [a.decode('latin-1') for a in args] |
|
224 | args = [a.decode('latin-1') for a in args] | |
225 | shortlist = shortlist.decode('latin-1') |
|
225 | shortlist = shortlist.decode('latin-1') | |
226 | namelist = [a.decode('latin-1') for a in namelist] |
|
226 | namelist = [a.decode('latin-1') for a in namelist] | |
227 |
opts, args = |
|
227 | opts, args = orig(args, shortlist, namelist) | |
228 | opts = [(a[0].encode('latin-1'), a[1].encode('latin-1')) |
|
228 | opts = [(a[0].encode('latin-1'), a[1].encode('latin-1')) | |
229 | for a in opts] |
|
229 | for a in opts] | |
230 | args = [a.encode('latin-1') for a in args] |
|
230 | args = [a.encode('latin-1') for a in args] | |
@@ -291,8 +291,8 b' else:' | |||||
291 | def getdoc(obj): |
|
291 | def getdoc(obj): | |
292 | return getattr(obj, '__doc__', None) |
|
292 | return getattr(obj, '__doc__', None) | |
293 |
|
293 | |||
294 | def getoptb(args, shortlist, namelist): |
|
294 | def _getoptbwrapper(orig, args, shortlist, namelist): | |
295 |
return |
|
295 | return orig(args, shortlist, namelist) | |
296 |
|
296 | |||
297 | strkwargs = identity |
|
297 | strkwargs = identity | |
298 | byteskwargs = identity |
|
298 | byteskwargs = identity | |
@@ -320,3 +320,9 b" isjython = sysplatform.startswith('java'" | |||||
320 | isdarwin = sysplatform == 'darwin' |
|
320 | isdarwin = sysplatform == 'darwin' | |
321 | isposix = osname == 'posix' |
|
321 | isposix = osname == 'posix' | |
322 | iswindows = osname == 'nt' |
|
322 | iswindows = osname == 'nt' | |
|
323 | ||||
|
324 | def getoptb(args, shortlist, namelist): | |||
|
325 | return _getoptbwrapper(getopt.getopt, args, shortlist, namelist) | |||
|
326 | ||||
|
327 | def gnugetoptb(args, shortlist, namelist): | |||
|
328 | return _getoptbwrapper(getopt.gnu_getopt, args, shortlist, namelist) |
@@ -37,10 +37,17 b' Missing parameter for early option:' | |||||
37 | hg log [OPTION]... [FILE] |
|
37 | hg log [OPTION]... [FILE] | |
38 | (use 'hg log -h' to show more help) |
|
38 | (use 'hg log -h' to show more help) | |
39 |
|
39 | |||
40 | $ hg log -R -- 2>&1 | grep 'hg log' |
|
40 | "--" may be an option value: | |
41 | hg log: option -R requires argument |
|
41 | ||
42 | hg log [OPTION]... [FILE] |
|
42 | $ hg -R -- log | |
43 | (use 'hg log -h' to show more help) |
|
43 | abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo! | |
|
44 | [255] | |||
|
45 | $ hg log -R -- | |||
|
46 | abort: option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo! | |||
|
47 | [255] | |||
|
48 | $ hg log -T -- | |||
|
49 | -- (no-eol) | |||
|
50 | $ hg log -T -- -k nomatch | |||
44 |
|
51 | |||
45 | Parsing of early options should stop at "--": |
|
52 | Parsing of early options should stop at "--": | |
46 |
|
53 |
General Comments 0
You need to be logged in to leave comments.
Login now