488 |
488 |
489 >>> args = ['x', '--cwd', 'foo', 'y'] |
489 >>> args = ['x', '--cwd', 'foo', 'y'] |
490 >>> _earlygetopt(['--cwd'], args), args |
490 >>> _earlygetopt(['--cwd'], args), args |
491 (['foo'], ['x', 'y']) |
491 (['foo'], ['x', 'y']) |
492 |
492 |
|
493 >>> args = ['x', '--cwd=bar', 'y'] |
|
494 >>> _earlygetopt(['--cwd'], args), args |
|
495 (['bar'], ['x', 'y']) |
|
496 |
493 >>> args = ['x', '-R', 'foo', 'y'] |
497 >>> args = ['x', '-R', 'foo', 'y'] |
494 >>> _earlygetopt(['-R'], args), args |
498 >>> _earlygetopt(['-R'], args), args |
495 (['foo'], ['x', 'y']) |
499 (['foo'], ['x', 'y']) |
496 |
500 |
497 >>> args = ['x', '-Rbar', 'y'] |
501 >>> args = ['x', '-Rbar', 'y'] |
504 argcount = len(args) |
508 argcount = len(args) |
505 shortopts = [opt for opt in aliases if len(opt) == 2] |
509 shortopts = [opt for opt in aliases if len(opt) == 2] |
506 values = [] |
510 values = [] |
507 pos = 0 |
511 pos = 0 |
508 while pos < argcount: |
512 while pos < argcount: |
509 if args[pos] in aliases: |
513 fullarg = arg = args[pos] |
510 if pos + 1 >= argcount: |
514 equals = arg.find('=') |
511 # ignore and let getopt report an error if there is no value |
515 if equals > -1: |
512 break |
516 arg = arg[:equals] |
|
517 if arg in aliases: |
513 del args[pos] |
518 del args[pos] |
514 values.append(args.pop(pos)) |
519 if equals > -1: |
515 argcount -= 2 |
520 values.append(fullarg[equals + 1:]) |
516 elif args[pos][:2] in shortopts: |
521 argcount -= 1 |
|
522 else: |
|
523 if pos + 1 >= argcount: |
|
524 # ignore and let getopt report an error if there is no value |
|
525 break |
|
526 values.append(args.pop(pos)) |
|
527 argcount -= 2 |
|
528 elif arg[:2] in shortopts: |
517 # short option can have no following space, e.g. hg log -Rfoo |
529 # short option can have no following space, e.g. hg log -Rfoo |
518 values.append(args.pop(pos)[2:]) |
530 values.append(args.pop(pos)[2:]) |
519 argcount -= 1 |
531 argcount -= 1 |
520 else: |
532 else: |
521 pos += 1 |
533 pos += 1 |