The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env python
#
#  svneditor.py: a mock $SVN_EDITOR for the Subversion test suite
#
#  Subversion is a tool for revision control.
#  See http://subversion.tigris.org for more information.
#
# ====================================================================
# Copyright (c) 2006, 2008 CollabNet.  All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution.  The terms
# are also available at http://subversion.tigris.org/license-1.html.
# If newer versions of this license are posted there, you may use a
# newer version instead, at your option.
#
######################################################################

import sys
import os

def main():
    if len(sys.argv) not in [2, 6]:
        print("usage: svneditor.py file")
        print("       svneditor.py base theirs mine merged wc_path")
        print("arguments passed were: %s" % sys.argv)
        sys.exit(1)

    if len(sys.argv) == 2:
      filename = sys.argv[1]
    elif len(sys.argv) == 6:
      filename = sys.argv[4]

    # Read in the input file.
    f = open(filename)
    contents = f.read()
    f.close()

    funcname = os.environ['SVNTEST_EDITOR_FUNC']
    func = sys.modules['__main__'].__dict__[funcname]

    # Run the conversion.
    contents = func(contents)

    # Write edited version back to the file.
    f = open(filename, 'w')
    f.write(contents)
    f.close()
    return check_conflicts(contents)

def check_conflicts(contents):
    markers = ['<<<<<<<', '=======', '>>>>>>>']
    found = 0
    for line in contents.split('\n'):
      for marker in markers:
        if line.startswith(marker):
          found = found + 1
    return found >= 3

def foo_to_bar(m):
    return m.replace('foo', 'bar')

def append_foo(m):
    return m + 'foo\n'

def identity(m):
    return m

exitcode = main()
sys.exit(exitcode)