##// END OF EJS Templates
test-revset: enable for Windows...
test-revset: enable for Windows In MSYS, the test fails like this if the hghave exit at the beginning is removed: --- C:\Users\adi\hgrepos\hg-main\tests\test-revset.t +++ C:\Users\adi\hgrepos\hg-main\tests\test-revset.t.err @@ -58,7 +58,7 @@ $ hg co 3 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg branch /a/b/c/ - marked working directory as branch /a/b/c/ + marked working directory as branch a:/b/c/ (branches are permanent and global, did you want a bookmark?) $ hg ci -Aqm"5 bug" @@ -252,7 +252,7 @@ 2 a-b-c- 3 +a+b+c+ 4 -a-b-c- - 5 /a/b/c/ + 5 a:/b/c/ 6 _a_b_c_ 7 .a.b.c. $ log 'children(ancestor(4,5))' due to the posix path conversion done by MSYS globally, as explained here http://www.mingw.org/wiki/Posix_path_conversion The solution is a bit lame, but it is simple and works: don't use strings that look like '/a/b', in order not to trigger the path magic done by MSYS. So, if we can agree not to insist on testing branch names starting with '/', then this relatively simple patch makes the test pass both on Windows with MSYS and Linux.

File last commit:

r14943:d3bb825d default
r16851:c739227b default
Show More
fancyopts.py
117 lines | 3.3 KiB | text/x-python | PythonLexer
Martin Geisler
fancyopts: add copyright and license header
r8230 # fancyopts.py - better command line parsing
#
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Martin Geisler
fancyopts: add copyright and license header
r8230
mark.williamson@cl.cam.ac.uk
A number of minor fixes to problems that pychecker found....
r667 import getopt
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Augie Fackler
fancyopts: Parse options that occur after arguments....
r7772 def gnugetopt(args, options, longoptions):
"""Parse options mostly like getopt.gnu_getopt.
This is different from getopt.gnu_getopt in that an argument of - will
become an argument of - instead of vanishing completely.
"""
extraargs = []
if '--' in args:
stopindex = args.index('--')
Matt Mackall
many, many trivial check-code fixups
r10282 extraargs = args[stopindex + 1:]
Augie Fackler
fancyopts: Parse options that occur after arguments....
r7772 args = args[:stopindex]
opts, parseargs = getopt.getopt(args, options, longoptions)
args = []
while parseargs:
arg = parseargs.pop(0)
if arg and arg[0] == '-' and len(arg) > 1:
parseargs.insert(0, arg)
topts, newparseargs = getopt.getopt(parseargs, options, longoptions)
opts = opts + topts
parseargs = newparseargs
else:
args.append(arg)
args.extend(extraargs)
return opts, args
def fancyopts(args, options, state, gnu=False):
Matt Mackall
fancyopts: lots of cleanups
r5638 """
read args, parse options, and store options in state
each option is a tuple of:
short option or ''
long option
default value
description
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 option value label(optional)
Matt Mackall
fancyopts: lots of cleanups
r5638
option types include:
boolean or none - option sets variable in state to true
string - parameter string is stored in state
list - parameter string is added to a list
integer - parameter strings is stored as int
function - call function with parameter
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Matt Mackall
fancyopts: lots of cleanups
r5638 non-option args are returned
"""
namelist = []
shortlist = ''
argmap = {}
defmap = {}
FUJIWARA Katsunori
help: show value requirement and multiple occurrence of options...
r11321 for option in options:
if len(option) == 5:
short, name, default, comment, dummy = option
else:
short, name, default, comment = option
Matt Mackall
fancyopts: lots of cleanups
r5638 # convert opts to getopt format
oname = name
name = name.replace('-', '_')
argmap['-' + short] = argmap['--' + oname] = name
defmap[name] = default
# copy defaults to state
if isinstance(default, list):
state[name] = default[:]
Augie Fackler
globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__')
r14943 elif getattr(default, '__call__', False):
Matt Mackall
fancyopts: lots of cleanups
r5638 state[name] = None
Thomas Arendsen Hein
fancyopts: Copy list arguments in command table before modifying....
r5093 else:
Matt Mackall
fancyopts: lots of cleanups
r5638 state[name] = default
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Matt Mackall
fancyopts: lots of cleanups
r5638 # does it take a parameter?
if not (default is None or default is True or default is False):
Matt Mackall
many, many trivial check-code fixups
r10282 if short:
short += ':'
if oname:
oname += '='
Matt Mackall
fancyopts: lots of cleanups
r5638 if short:
shortlist += short
if name:
namelist.append(oname)
# parse arguments
Augie Fackler
fancyopts: Parse options that occur after arguments....
r7772 if gnu:
parse = gnugetopt
else:
parse = getopt.getopt
opts, args = parse(args, shortlist, namelist)
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0
Matt Mackall
fancyopts: lots of cleanups
r5638 # transfer result to state
for opt, val in opts:
name = argmap[opt]
t = type(defmap[name])
if t is type(fancyopts):
state[name] = defmap[name](val)
elif t is type(1):
state[name] = int(val)
elif t is type(''):
state[name] = val
elif t is type([]):
state[name].append(val)
elif t is type(None) or t is type(False):
state[name] = True
mpm@selenic.com
Beginning of new command parsing interface...
r209
Matt Mackall
fancyopts: lots of cleanups
r5638 # return unparsed args
mpm@selenic.com
Add back links from file revisions to changeset revisions...
r0 return args