pass user configuration to subcommand handler functions

This commit is contained in:
Josh Holtrop 2012-07-11 12:09:02 -04:00
parent 59544d30a6
commit 638137518d

48
jsvn
View File

@ -545,7 +545,7 @@ def find_common_ancestor(svn, url1, path1, url2, path2):
###########################################################################
# Subcommand Handlers #
###########################################################################
def add(argv, svn, out):
def add(argv, svn, out, config):
if len(argv) < 2:
# do not handle if no targets are passed
return RET_REEXEC
@ -570,7 +570,7 @@ def add(argv, svn, out):
Popen([svn, 'add', path], stdout=out).wait()
return RET_OK
def bisect(argv, svn, out):
def bisect(argv, svn, out, config):
def usage():
sys.stderr.write('''Usage: bisect <operation>
Operations:
@ -623,11 +623,11 @@ Operations:
revs = get_revs_between(good_rev, bad_rev)
if len(revs) < 1:
if get_svn_wc_revision(svn) != bad_rev:
update(['update', '-r%d' % bad_rev], svn, out)
update(['update', '-r%d' % bad_rev], svn, out, config)
out.write('The first bad revision is %d\n' % get_svn_wc_revision(svn))
return
rev = revs[len(revs) / 2]
update(['update', '-r%d' % rev], svn, out)
update(['update', '-r%d' % rev], svn, out, config)
out.write('Bisect: inspecting revision %d, %d revisions remaining\n'
% (rev, len(revs)))
def init_err():
@ -654,10 +654,10 @@ Operations:
if rev < 0:
return init_err()
rm_bisect_files()
update(['update', '-r%d' % rev], svn, out)
update(['update', '-r%d' % rev], svn, out, config)
return RET_OK
def branch(argv, svn, out):
def branch(argv, svn, out, config):
argv = argv[1:] # strip 'branch' command
options, args = getopt.getopt(argv, 'ds')
origin = get_svn_top_level(svn)
@ -701,10 +701,10 @@ def branch(argv, svn, out):
branch_path = root + '/branches/' + branch_name
Popen([svn, 'copy', origin, branch_path, '-m', comment], stdout=out).wait()
if do_switch:
return switch(['switch', branch_name], svn, out)
return switch(['switch', branch_name], svn, out, config)
return RET_OK
def tag(argv, svn, out):
def tag(argv, svn, out, config):
origin = get_svn_top_level(svn)
root = get_svn_root_url(svn)
if origin == '' or root == '':
@ -740,7 +740,7 @@ def tag(argv, svn, out):
Popen([svn, 'copy', origin, tag_path, '-m', comment], stdout=out).wait()
return RET_OK
def switch(argv, svn, out):
def switch(argv, svn, out, config):
if len(argv) < 2:
return RET_REEXEC
switched = False
@ -777,7 +777,7 @@ def switch(argv, svn, out):
filter_update(pout, out)
return RET_OK
def merge(argv, svn, out):
def merge(argv, svn, out, config):
if len(argv) < 2:
return RET_REEXEC
root = get_svn_root_url(svn)
@ -799,7 +799,7 @@ def merge(argv, svn, out):
root + '/branches/' + argv[1] + path, '.'], stdout=out).wait()
return RET_OK
def watch_lock(argv, svn, out):
def watch_lock(argv, svn, out, config):
if len(argv) < 2:
return RET_ERR
path = argv[1]
@ -840,7 +840,7 @@ def watch_lock(argv, svn, out):
''')
return RET_OK
def users(argv, svn, out):
def users(argv, svn, out, config):
path = '.'
if len(argv) > 1:
path = argv[1]
@ -860,7 +860,7 @@ def users(argv, svn, out):
out.write("%8d %s\n" % (v[1], v[0]))
return RET_OK
def binaries(argv, svn, out, base_path = '.'):
def binaries(argv, svn, out, config, base_path = '.'):
for ent in os.listdir(base_path):
if ent in ('.', '..', '.svn'):
continue
@ -882,10 +882,10 @@ def binaries(argv, svn, out, base_path = '.'):
out.write(ent_path)
out.write('\n')
elif os.path.isdir(ent_path):
binaries(argv, svn, out, os.sep.join([base_path, ent]))
binaries(argv, svn, out, config, os.sep.join([base_path, ent]))
return RET_OK
def lockable(argv, svn, out):
def lockable(argv, svn, out, config):
if len(argv) >= 2 and argv[1] == '--status':
for ob in argv[2:]:
ob_path = os.sep.join([base_path, ob])
@ -910,7 +910,7 @@ def lockable(argv, svn, out):
set_svn_property(svn, 'svn:needs-lock', '*', ob_path)
return RET_OK
def diff(argv, svn, out):
def diff(argv, svn, out, config):
doing_summarize = '--summarize' in argv
for i, v in enumerate(argv):
m = re.match('(.*?)(\.\.\.?)(.*)$', v)
@ -941,7 +941,7 @@ def diff(argv, svn, out):
colordiff(out, line)
return RET_OK
def log(argv, svn, out):
def log(argv, svn, out, config):
filters = []
pretty = 'default'
for i, v in enumerate(argv):
@ -1031,12 +1031,12 @@ def log(argv, svn, out):
out.write('\n')
return RET_OK
def update(argv, svn, out):
def update(argv, svn, out, config):
pout = Popen([svn] + argv, stdout=PIPE).stdout
filter_update(pout, out)
return RET_OK
def status(argv, svn, out):
def status(argv, svn, out, config):
external = ''
external_printed = True
something_printed = False
@ -1076,7 +1076,7 @@ def status(argv, svn, out):
something_printed = True
return RET_OK
def externals(argv, svn, out):
def externals(argv, svn, out, config):
pout = Popen([svn, 'status'], stdout=PIPE).stdout
for line in iter(pout.readline, ''):
if re.match(STATUS_LINE_REGEX, line):
@ -1084,7 +1084,7 @@ def externals(argv, svn, out):
out.write(line[8:])
return RET_OK
def stash(argv, svn, out):
def stash(argv, svn, out, config):
argv = argv[1:] # strip 'stash' command
action = 'save'
if len(argv) >= 1:
@ -1294,11 +1294,11 @@ def stash(argv, svn, out):
out.write('Unknown action "%s"\n' % action)
return RET_OK
def root(argv, svn, out):
def root(argv, svn, out, config):
out.write(get_svn_root_url(svn) + '\n')
return RET_OK
def url(argv, svn, out):
def url(argv, svn, out, config):
path = '.'
if len(argv) > 1:
path = argv[1]
@ -1420,7 +1420,7 @@ def do_cmd(argv, realsvn, config, expand=True):
do_native_exec = True
if argv[0] in handlers:
r = handlers[argv[0]](argv, realsvn, out)
r = handlers[argv[0]](argv, realsvn, out, config)
if r == RET_OK or r == RET_ERR:
do_native_exec = False
elif argv[0].startswith('__'):