standardize return values for subcommand handlers
unify calling of subcommand handlers
This commit is contained in:
parent
3c8c7f2eec
commit
d0d463a30c
122
jsvn
122
jsvn
@ -46,6 +46,10 @@ import re
|
|||||||
import time
|
import time
|
||||||
from subprocess import *
|
from subprocess import *
|
||||||
|
|
||||||
|
RET_OK = 0
|
||||||
|
RET_ERR = 1
|
||||||
|
RET_REEXEC = 2
|
||||||
|
|
||||||
def findInPath(cmd):
|
def findInPath(cmd):
|
||||||
path_entries = os.environ['PATH'].split(os.pathsep)
|
path_entries = os.environ['PATH'].split(os.pathsep)
|
||||||
for p in path_entries:
|
for p in path_entries:
|
||||||
@ -122,7 +126,7 @@ def branch(argv, svn):
|
|||||||
for b in bl:
|
for b in bl:
|
||||||
sys.stdout.write('*' if b == current else ' ')
|
sys.stdout.write('*' if b == current else ' ')
|
||||||
sys.stdout.write(b + '\n')
|
sys.stdout.write(b + '\n')
|
||||||
return 0
|
return RET_OK
|
||||||
branch_name = argv[-1]
|
branch_name = argv[-1]
|
||||||
origin = getSVNTopLevel(svn)
|
origin = getSVNTopLevel(svn)
|
||||||
root = getSVNRoot(svn)
|
root = getSVNRoot(svn)
|
||||||
@ -130,14 +134,14 @@ def branch(argv, svn):
|
|||||||
# delete branch in argv[2]
|
# delete branch in argv[2]
|
||||||
Popen([svn, 'rm', root + '/branches/' + argv[2], '-m',
|
Popen([svn, 'rm', root + '/branches/' + argv[2], '-m',
|
||||||
"Removed branch '%s'" % branch_name]).wait()
|
"Removed branch '%s'" % branch_name]).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
if origin == '' or root == '':
|
if origin == '' or root == '':
|
||||||
sys.stderr.write("Could not determine origin/root URL\n")
|
sys.stderr.write("Could not determine origin/root URL\n")
|
||||||
return 1
|
return RET_ERR
|
||||||
comment = "Created '%s' branch" % branch_name
|
comment = "Created '%s' branch" % branch_name
|
||||||
branch_path = root + '/branches/' + branch_name
|
branch_path = root + '/branches/' + branch_name
|
||||||
Popen([svn, 'copy', origin, branch_path, '-m', comment]).wait()
|
Popen([svn, 'copy', origin, branch_path, '-m', comment]).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def tag(argv, svn):
|
def tag(argv, svn):
|
||||||
tl = getSVNTagList(svn)
|
tl = getSVNTagList(svn)
|
||||||
@ -145,38 +149,38 @@ def tag(argv, svn):
|
|||||||
tl.sort()
|
tl.sort()
|
||||||
for t in tl:
|
for t in tl:
|
||||||
sys.stdout.write(t + '\n')
|
sys.stdout.write(t + '\n')
|
||||||
return 0
|
return RET_OK
|
||||||
tag_name = argv[-1]
|
tag_name = argv[-1]
|
||||||
origin = getSVNTopLevel(svn)
|
origin = getSVNTopLevel(svn)
|
||||||
root = getSVNRoot(svn)
|
root = getSVNRoot(svn)
|
||||||
if origin == '' or root == '':
|
if origin == '' or root == '':
|
||||||
sys.stderr.write("Could not determine origin/root URL\n")
|
sys.stderr.write("Could not determine origin/root URL\n")
|
||||||
return 1
|
return RET_ERR
|
||||||
if len(argv) == 4 and argv[1] == '-m':
|
if len(argv) == 4 and argv[1] == '-m':
|
||||||
old_tag_name = argv[2]
|
old_tag_name = argv[2]
|
||||||
if not old_tag_name in tl:
|
if not old_tag_name in tl:
|
||||||
sys.stderr.write('Tag %s not found!\n' % old_tag_name)
|
sys.stderr.write('Tag %s not found!\n' % old_tag_name)
|
||||||
return 1
|
return RET_ERR
|
||||||
Popen([svn, 'mv',
|
Popen([svn, 'mv',
|
||||||
root + '/tags/' + old_tag_name, root + '/tags/' + tag_name,
|
root + '/tags/' + old_tag_name, root + '/tags/' + tag_name,
|
||||||
'-m', "Renamed tag '%s' to '%s'" % (old_tag_name, tag_name)]).wait()
|
'-m', "Renamed tag '%s' to '%s'" % (old_tag_name, tag_name)]).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
if len(argv) >= 3 and argv[1] == "-d":
|
if len(argv) >= 3 and argv[1] == "-d":
|
||||||
if not tag_name in tl:
|
if not tag_name in tl:
|
||||||
sys.stderr.write('Tag %s not found!\n' % tag_name)
|
sys.stderr.write('Tag %s not found!\n' % tag_name)
|
||||||
return 1
|
return RET_ERR
|
||||||
# delete tag in argv[2]
|
# delete tag in argv[2]
|
||||||
Popen([svn, 'rm', root + '/tags/' + tag_name, '-m',
|
Popen([svn, 'rm', root + '/tags/' + tag_name, '-m',
|
||||||
"Removed tag '%s'" % tag_name]).wait()
|
"Removed tag '%s'" % tag_name]).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
comment = "Created '%s' tag" % tag_name
|
comment = "Created '%s' tag" % tag_name
|
||||||
tag_path = root + '/tags/' + tag_name
|
tag_path = root + '/tags/' + tag_name
|
||||||
Popen([svn, 'copy', origin, tag_path, '-m', comment]).wait()
|
Popen([svn, 'copy', origin, tag_path, '-m', comment]).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def switch(argv, svn):
|
def switch(argv, svn):
|
||||||
if len(argv) < 2:
|
if len(argv) < 2:
|
||||||
return -1
|
return RET_REEXEC
|
||||||
switched = False
|
switched = False
|
||||||
root = getSVNRoot(svn)
|
root = getSVNRoot(svn)
|
||||||
path = getSVNRelPath(svn)
|
path = getSVNRelPath(svn)
|
||||||
@ -198,16 +202,16 @@ def switch(argv, svn):
|
|||||||
if switched:
|
if switched:
|
||||||
Popen(svn + ' info | grep --color=none "^URL:"',
|
Popen(svn + ' info | grep --color=none "^URL:"',
|
||||||
shell = True).wait()
|
shell = True).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
return -2
|
return RET_REEXEC
|
||||||
|
|
||||||
def merge(argv, svn):
|
def merge(argv, svn):
|
||||||
if len(argv) < 2:
|
if len(argv) < 2:
|
||||||
return -1
|
return RET_REEXEC
|
||||||
root = getSVNRoot(svn)
|
root = getSVNRoot(svn)
|
||||||
branches = getSVNBranchList(svn)
|
branches = getSVNBranchList(svn)
|
||||||
if not argv[1] in branches:
|
if not argv[1] in branches:
|
||||||
return -3
|
return RET_REEXEC
|
||||||
lines = Popen([svn, 'log', '--stop-on-copy', root + '/branches/' + argv[1]],
|
lines = Popen([svn, 'log', '--stop-on-copy', root + '/branches/' + argv[1]],
|
||||||
stdout=PIPE).communicate()[0].split('\n')
|
stdout=PIPE).communicate()[0].split('\n')
|
||||||
rev = 0
|
rev = 0
|
||||||
@ -217,15 +221,15 @@ def merge(argv, svn):
|
|||||||
rev = m.group(1)
|
rev = m.group(1)
|
||||||
if rev == 0:
|
if rev == 0:
|
||||||
sys.stderr.write('Could not get first branch revision\n')
|
sys.stderr.write('Could not get first branch revision\n')
|
||||||
return -4
|
return RET_ERR
|
||||||
path = getSVNRelPath(svn)
|
path = getSVNRelPath(svn)
|
||||||
Popen([svn, 'merge', '-r%s:HEAD' % rev,
|
Popen([svn, 'merge', '-r%s:HEAD' % rev,
|
||||||
root + '/branches/' + argv[1] + path, '.']).wait()
|
root + '/branches/' + argv[1] + path, '.']).wait()
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def watch_lock(argv, svn):
|
def watch_lock(argv, svn):
|
||||||
if len(argv) < 2:
|
if len(argv) < 2:
|
||||||
return -1
|
return RET_ERR
|
||||||
path = argv[1]
|
path = argv[1]
|
||||||
if os.path.exists(path):
|
if os.path.exists(path):
|
||||||
# Get the repository URL of the file being watched
|
# Get the repository URL of the file being watched
|
||||||
@ -238,7 +242,7 @@ def watch_lock(argv, svn):
|
|||||||
break
|
break
|
||||||
|
|
||||||
last_lock_owner = ''
|
last_lock_owner = ''
|
||||||
while 1:
|
while True:
|
||||||
lock_owner = ''
|
lock_owner = ''
|
||||||
p = Popen([svn, 'info', path], stdout=PIPE)
|
p = Popen([svn, 'info', path], stdout=PIPE)
|
||||||
lines = p.communicate()[0].split('\n')
|
lines = p.communicate()[0].split('\n')
|
||||||
@ -262,7 +266,7 @@ def watch_lock(argv, svn):
|
|||||||
\___/|_| |_|_|\___/ \___|_|\_\___|\__,_(_)
|
\___/|_| |_|_|\___/ \___|_|\_\___|\__,_(_)
|
||||||
|
|
||||||
''')
|
''')
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def users(argv, svn):
|
def users(argv, svn):
|
||||||
path = '.'
|
path = '.'
|
||||||
@ -283,7 +287,7 @@ def users(argv, svn):
|
|||||||
values.sort(key = lambda x: x[1], reverse = True)
|
values.sort(key = lambda x: x[1], reverse = True)
|
||||||
for v in values:
|
for v in values:
|
||||||
print "%8d %s" % (v[1], v[0])
|
print "%8d %s" % (v[1], v[0])
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def binaries(argv, svn, base_path = '.'):
|
def binaries(argv, svn, base_path = '.'):
|
||||||
for ent in os.listdir(base_path):
|
for ent in os.listdir(base_path):
|
||||||
@ -306,7 +310,7 @@ def binaries(argv, svn, base_path = '.'):
|
|||||||
sys.stdout.write('\n')
|
sys.stdout.write('\n')
|
||||||
elif os.path.isdir(ent_path):
|
elif os.path.isdir(ent_path):
|
||||||
binaries(argv, svn, os.sep.join([base_path, ent]))
|
binaries(argv, svn, os.sep.join([base_path, ent]))
|
||||||
return 0
|
return RET_OK
|
||||||
|
|
||||||
def lockable(argv, svn, base_path = '.'):
|
def lockable(argv, svn, base_path = '.'):
|
||||||
if len(argv) >= 2 and argv[1] == '--status':
|
if len(argv) >= 2 and argv[1] == '--status':
|
||||||
@ -331,59 +335,53 @@ def lockable(argv, svn, base_path = '.'):
|
|||||||
for ob in argv[1:]:
|
for ob in argv[1:]:
|
||||||
ob_path = os.sep.join([base_path, ob])
|
ob_path = os.sep.join([base_path, ob])
|
||||||
setSVNProperty(svn, 'svn:needs-lock', '*', ob_path)
|
setSVNProperty(svn, 'svn:needs-lock', '*', ob_path)
|
||||||
|
return RET_OK
|
||||||
|
|
||||||
|
def diff(argv, svn):
|
||||||
|
colordiff = findInPath('colordiff')
|
||||||
|
if colordiff != '':
|
||||||
|
diff_out = Popen([svn] + argv, stdout=PIPE).stdout
|
||||||
|
Popen([colordiff], stdin=diff_out).wait()
|
||||||
|
return RET_OK
|
||||||
|
return RET_REEXEC
|
||||||
|
|
||||||
|
def root(argv, svn):
|
||||||
|
sys.stdout.write(getSVNRoot(svn) + '\n')
|
||||||
|
return RET_OK
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
realsvn = findInPath('svn')
|
realsvn = findInPath('svn')
|
||||||
colorsvn = findInPath('colorsvn')
|
colorsvn = findInPath('colorsvn')
|
||||||
colordiff = findInPath('colordiff')
|
|
||||||
|
|
||||||
if realsvn == '':
|
if realsvn == '':
|
||||||
sys.stderr.write("Error: 'svn' not found in path\n")
|
sys.stderr.write("Error: 'svn' not found in path\n")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
handlers = {
|
||||||
|
'branch': branch,
|
||||||
|
'branches': branch,
|
||||||
|
'switch': switch,
|
||||||
|
'merge': merge,
|
||||||
|
'tag': tag,
|
||||||
|
'tags': tag,
|
||||||
|
'diff': diff,
|
||||||
|
'root': root,
|
||||||
|
'watch-lock': watch_lock,
|
||||||
|
'users': users,
|
||||||
|
'binaries': binaries,
|
||||||
|
'lockable': lockable,
|
||||||
|
}
|
||||||
|
|
||||||
if len(argv) >= 1:
|
if len(argv) >= 1:
|
||||||
if argv[0] == "branch" or argv[0] == "branches":
|
if argv[0] in handlers:
|
||||||
return branch(argv, realsvn)
|
r = handlers[argv[0]](argv, realsvn)
|
||||||
|
if r == RET_OK or r == RET_ERR:
|
||||||
if argv[0] == "switch":
|
|
||||||
r = switch(argv, realsvn)
|
|
||||||
if r >= 0:
|
|
||||||
return r
|
return r
|
||||||
|
|
||||||
if argv[0] == "merge":
|
if (argv[0] in ('st', 'status', 'log', 'up', 'update')
|
||||||
r = merge(argv, realsvn)
|
and colorsvn != ''):
|
||||||
if r >= 0:
|
|
||||||
return r
|
|
||||||
|
|
||||||
if argv[0] == "tag" or argv[0] == "tags":
|
|
||||||
return tag(argv, realsvn)
|
|
||||||
|
|
||||||
if argv[0] == "diff" and colordiff != '':
|
|
||||||
diff_out = Popen([realsvn] + argv, stdout=PIPE).stdout
|
|
||||||
Popen([colordiff], stdin=diff_out).wait()
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if argv[0] == "root":
|
|
||||||
sys.stdout.write(getSVNRoot(realsvn) + '\n')
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if argv[0] == "watch-lock":
|
|
||||||
return watch_lock(argv, realsvn)
|
|
||||||
|
|
||||||
if argv[0] == "users":
|
|
||||||
return users(argv, realsvn)
|
|
||||||
|
|
||||||
if argv[0] == "binaries":
|
|
||||||
return binaries(argv, realsvn)
|
|
||||||
|
|
||||||
if argv[0] == "lockable":
|
|
||||||
return lockable(argv, realsvn)
|
|
||||||
|
|
||||||
if argv[0] in ('st', 'status', 'log', 'up', 'update') \
|
|
||||||
and colorsvn != '':
|
|
||||||
realsvn = colorsvn
|
realsvn = colorsvn
|
||||||
|
|
||||||
|
|
||||||
Popen([realsvn] + argv).wait()
|
Popen([realsvn] + argv).wait()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user