#!/usr/bin/env python import sys, os def find(line, label): if line.startswith(label): return line[len(label):] for filename in sys.argv[1:]: cbase = mine = pbase = None for infoline in os.popen("svn info '%s'" % filename.replace("'", r"'\''")): infoline = infoline.rstrip("\r\n") cbase = cbase or find(infoline, "Conflict Current Base File: ") pbase = pbase or find(infoline, "Conflict Previous Base File: ") mine = mine or find(infoline, "Conflict Previous Working File: ") if (cbase is None or pbase is None or mine is None): print "'%s' is not in conflict, or info parse failed." % filename else: dir = os.path.dirname(filename) reopen = True while reopen: reopen = False os.spawnlp(os.P_WAIT, "opendiff", "opendiff", os.path.join(dir, cbase), os.path.join(dir, mine), "-ancestor", os.path.join(dir, pbase), "-merge", filename) r = "" while not (r in ["y", "n", "r"]): r = raw_input("Resolved '%s'? [y/n/(r)eopen] " % filename) if r == "y": os.spawnlp(os.P_WAIT, "svn", "svn", "resolved", filename) elif r == "r": reopen = True