public void diff(String target1, Revision revision1, String target2,
Revision revision2, String relativeToDir, String outFileName,
int depth, String[] changelists, boolean ignoreAncestry,
boolean noDiffDeleted, boolean force) throws ClientException {
SVNDiffClient differ = getSVNDiffClient();
differ.getDiffGenerator().setDiffDeleted(!noDiffDeleted);
differ.getDiffGenerator().setForcedBinaryDiff(force);
differ.setOptions(getOptions());
SVNRevision rev1 = JavaHLObjectFactory.getSVNRevision(revision1);
SVNRevision rev2 = JavaHLObjectFactory.getSVNRevision(revision2);
try {
differ.getDiffGenerator().setBasePath(getDiffBasePath(relativeToDir));
OutputStream out = SVNFileUtil.openFileForWriting(new File(outFileName));
if (!isURL(target1) && !isURL(target2)) {
differ.doDiff(new File(target1).getAbsoluteFile(), rev1,
new File(target2).getAbsoluteFile(), rev2,
JavaHLObjectFactory.getSVNDepth(depth), !ignoreAncestry, out,
JavaHLObjectFactory.getChangeListsCollection(changelists));
} else if (isURL(target1) && isURL(target2)) {
SVNURL url1 = SVNURL.parseURIEncoded(target1);
SVNURL url2 = SVNURL.parseURIEncoded(target2);
differ.doDiff(url1, rev1, url2, rev2, JavaHLObjectFactory.getSVNDepth(depth), !ignoreAncestry, out);
} else if (!isURL(target1) && isURL(target2)) {
SVNURL url2 = SVNURL.parseURIEncoded(target2);
differ.doDiff(new File(target1).getAbsoluteFile(), rev1,
url2, rev2, JavaHLObjectFactory.getSVNDepth(depth), !ignoreAncestry, out,
JavaHLObjectFactory.getChangeListsCollection(changelists));
} else if (isURL(target1) && !isURL(target2)) {
SVNURL url1 = SVNURL.parseURIEncoded(target1);
differ.doDiff(url1, rev1, new File(target2).getAbsoluteFile(), rev2,
JavaHLObjectFactory.getSVNDepth(depth), !ignoreAncestry, out,
JavaHLObjectFactory.getChangeListsCollection(changelists));
}
SVNFileUtil.closeFile(out);
} catch (SVNException e) {