##// END OF EJS Templates
convert/svn: delegate to svn bindings if HTTP probe fails...
convert/svn: delegate to svn bindings if HTTP probe fails convert extension tries to guess the remote repository type with HTTP probes. Unfortunately, it does not handle authentication or HTTPS handshakes, so regular svn repositories may be excluded. Instead, when a non-404 error is retrieved, we keep trying with the svn bindings. The drawback is missing svn bindings will make the conversion to fail even for non-svn targets. This can be avoided with --source.

File last commit:

r8366:0bf00450 default
r9829:1b2516a5 default
Show More
fancyopts.py
110 lines | 3.1 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
# GNU General Public License version 2, incorporated herein by reference.
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('--')
extraargs = args[stopindex+1:]
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
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 = {}
for short, name, default, comment in options:
# 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[:]
Dirkjan Ochtman
some modernization cleanups, forward compatibility
r8366 elif hasattr(default, '__call__'):
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):
if short: short += ':'
if oname: oname += '='
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