+def interactive_merge(filename):
+ """Run the interactive merger on the given file. Note that the
+ index should not have any conflicts.
+ """
+ imerger = config.get('stgit.imerger')
+ if not imerger:
+ raise GitMergeException, 'Configuration error: %s' % err
+
+ extensions = file_extensions()
+
+ ancestor = filename + extensions['ancestor']
+ current = filename + extensions['current']
+ patched = filename + extensions['patched']
+
+ # check whether we have all the files for a three-way merge
+ for fn in [filename, ancestor, current, patched]:
+ if not os.path.isfile(fn):
+ raise GitMergeException, \
+ 'Cannot run the interactive merger: "%s" missing' % fn
+
+ mtime = os.path.getmtime(filename)
+
+ err = os.system(imerger % {'branch1': current,
+ 'ancestor': ancestor,
+ 'branch2': patched,
+ 'output': filename})
+
+ if err != 0:
+ raise GitMergeException, 'The interactive merge failed: %d' % err
+ if not os.path.isfile(filename):
+ raise GitMergeException, 'The "%s" file is missing' % filename
+ if mtime == os.path.getmtime(filename):
+ raise GitMergeException, 'The "%s" file was not modified' % filename
+
+