From 07080d34a78f79aad9b057a391c26c791c5b0a84 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 27 Jun 2012 13:53:34 -0400 Subject: [PATCH] bugfix: allow diffing/log from common ancestor to work in either direction --- jsvn | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/jsvn b/jsvn index 06dd289..195886e 100755 --- a/jsvn +++ b/jsvn @@ -381,9 +381,15 @@ def find_branched_revision(svn, branch_url, branch_path, base_path): new_path, old_path, rev = m.group(1, 2, 3) if new_path == search_path: if old_path == base_path: - return int(rev) + return (int(rev), old_path) search_path = old_path - return -1 + return (-1, '') + +def find_common_ancestor(svn, url1, path1, url2, path2): + r, path = find_branched_revision(svn, url1, path1, path2) + if r < 0: + r, path = find_branched_revision(svn, url2, path2, path1) + return r, path ########################################################################### # Subcommand Handlers # @@ -768,12 +774,12 @@ def diff(argv, svn, out): if operator == '...': # amend url1 to include the pegged revision from where ref2 # originally branched from it - r = find_branched_revision(svn, url2, path2, path1) + r, path = find_common_ancestor(svn, url2, path2, url1, path1) if r < 0: sys.stderr.write(('Could not find revision where "%s" ' + 'branched from "%s"\n') % (ref2, ref1)) return RET_ERR - url1 += '@%d' % r + url = get_svn_repo_real_root_url(svn) + path + '@%d' % r argv = argv[:i] + [url1, url2] + argv[i + 1:] break pout = Popen([svn] + argv, stdout=PIPE).stdout @@ -795,7 +801,7 @@ def log(argv, svn, out): url2, path2 = resolve_reference(svn, ref2) if url2 == '': continue - r = find_branched_revision(svn, url2, path2, path1) + r, path = find_common_ancestor(svn, url2, path2, url1, path1) if r < 0: sys.stderr.write(('Could not find revision where "%s" ' + 'branched from "%s"\n') % (ref2, ref1))