From 97b09411bda51023b49ee5d1e33dbc02f0284213 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 17 Jan 2011 11:03:35 -0500 Subject: [PATCH] added merge subcommand --- jsvn | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/jsvn b/jsvn index dec805e..71b3b01 100755 --- a/jsvn +++ b/jsvn @@ -18,6 +18,9 @@ # - switch to 'trunk', branch name, or tag name without having to specify # the full URL # - falls back to Subversion "switch" if doesn't exist +# merge +# - merge branch into the current WC path +# - falls back to Subversion "merge" if doesn't exist import sys import os @@ -109,7 +112,7 @@ def tags(argv, svn): sys.stdout.write(t + '\n') return 0 -def switch(argv, svn, colorsvn): +def switch(argv, svn): if len(argv) < 2: return -1 root = getSVNRoot(svn) @@ -127,6 +130,27 @@ def switch(argv, svn, colorsvn): return 0 return -2 +def merge(argv, svn): + if len(argv) < 2: + return -1 + root = getSVNRoot(svn) + branches = getSVNBranchList(svn) + if not argv[1] in branches: + return -3 + lines = Popen([svn, 'log', '--stop-on-copy', root + '/branches/' + argv[1]]) + rev = 0 + for line in lines: + m = re.match(r'^r(\d+)\s', line) + if m is not None: + rev = m.group(1) + if rev == 0: + sys.stderr.write('Could not get first branch revision\n') + return -4 + path = getSVNRelPath(svn) + Popen([svn, 'merge', '-r%s:HEAD' % rev, + root + '/branches/' + argv[1] + path, '.']).wait() + return -2 + def main(argv): realsvn = findInPath('svn') colorsvn = findInPath('colorsvn') @@ -141,7 +165,12 @@ def main(argv): return branch(argv, realsvn) if argv[0] == "switch": - r = switch(argv, realsvn, colorsvn) + r = switch(argv, realsvn) + if r >= 0: + return r + + if argv[0] == "merge": + r = merge(argv, realsvn) if r >= 0: return r @@ -154,8 +183,7 @@ def main(argv): return 0 if colorsvn != '': - Popen([colorsvn] + argv).wait() - return 0 + realsvn = colorsvn Popen([realsvn] + argv).wait() return 0