Bug 126616 IStorageMerger is not called in three-way merge with no common ancestor
I20060131-1200 IMergeContext.merge(IDiff[], boolean, IProgressMonitor) does not attempt to automerge two revisions if no common ancestor is available. Depending on the file content, no common ancestor is needed for automerging (e.g refactoring history files, where merging is simple the union operation). I suggest to call the corresponding IStorageMerger with an empty stream in this case, or have a predicate which tells whether the merger supports three-way merging with no common ancestor.
org.eclipse.ltk.ui.refactoring/src/org/eclipse/ltk/internal/ui/refactoring/model/RefactoringHistoryMerger.java
* 
	 * @param output
	 *            the output stream
	 * @param target
	 *            the target input stream
	 * @param source
	 *            the source input stream
	 * @throws CoreException
	 *             if an error occurs
	 */
	private void performMerge(final OutputStream output, final InputStream target, final InputStream source) throws CoreException {
		final RefactoringDescriptor[] sourceDescriptors= RefactoringHistoryManager.readRefactoringDescriptors(source, 0, Long.MAX_VALUE);
		final RefactoringDescriptor[] targetDescriptors= RefactoringHistoryManager.readRefactoringDescriptors(target, 0, Long.MAX_VALUE);
		final Set set= new HashSet();
		for (int index= 0; index < sourceDescriptors.length; index++)
			set.add(sourceDescriptors[index]);
		for (int index= 0; index < targetDescriptors.length; index++)
			set.add(targetDescriptors[index]);
		final RefactoringDescriptor[] outputDescriptors= new RefactoringDescriptor[set.size()];
		set.toArray(outputDescriptors);
		Arrays.sort(outputDescriptors, new Comparator() {
			public final int compare(final Object first, final Object second) {
				final RefactoringDescriptor predecessor= (RefactoringDescriptor) first;
				final RefactoringDescriptor successor= (RefactoringDescriptor) second;
				return (int) (successor.getTimeStamp() - predecessor.getTimeStamp());
			}
		});
		RefactoringHistoryManager.writeRefactoringDescriptors(output, outputDescriptors, true);
	}
}