Some RA_ILLEGAL_URL "doesn't exist" exceptions don't include apostrophe in "doesn't"

When calling doExport() for a URL that doesn’t exist, the word “doesn’t” is missing an apostrophe in the exception message. The instance that I encountered is in org.tmatesoft.svn.core.internal.wc2.remote.SVNRemoteExport.run()

SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.RA_ILLEGAL_URL, "URL ''{0}'' doesn't exist", repository.getLocation());
SVNErrorManager.error(err, SVNLogType.WC);

(I think the message is treated as a template pattern and the apostrophe in “doesn’t” should be escaped with an extra single quote.)

If you grep for similar errors, you’ll see there may be more of them:

grep -rn SVNErrorCode.RA_ILLEGAL_URL . | grep "doesn't"
./svnkit/src/main/java/org/tmatesoft/svn/core/internal/wc16/SVNUpdateClient16.java:1491:            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.RA_ILLEGAL_URL, "URL ''{0}'' doesn't exist", repository.getLocation());
./svnkit/src/main/java/org/tmatesoft/svn/core/internal/wc2/remote/SvnRemoteExport.java:144:            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.RA_ILLEGAL_URL, "URL ''{0}'' doesn't exist", repository.getLocation());
./svnkit/src/main/java/org/tmatesoft/svn/core/io/SVNRepository.java:2161:            SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.RA_ILLEGAL_URL, "URL ''{0}'' doesn't exist", getLocation());

To reproduce:

@Test
public void testExceptionMessage() throws Exception {
    SVNURL svnurl = SVNURL.parseURIEncoded("https://svn.code.sf.net/p/fmslogo/source/doesnotexist");

    ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager();
    ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
    SVNClientManager ourClientManager = SVNClientManager.newInstance(options, authManager);
    SVNUpdateClient updateClient = ourClientManager.getUpdateClient();
    updateClient.setIgnoreExternals(false);

    try {
        updateClient.doExport(
            svnurl, 
            new java.io.File("."),
            SVNRevision.HEAD, // peg revision
            SVNRevision.HEAD, // desired revision
            System.lineSeparator(), // line endings
            false, // don't force overwrite (shouldn't matter because workingCopy is empty directory
            SVNDepth.INFINITY);
        Assert.fail("exporting non-existing directory didn't throw an exception");
    } catch (SVNException exception) {
        Assert.assertEquals("svn: E170000: URL '" + svnurl + "' doesn't exist", exception.getMessage());
    }
}

The above test fails because word appears as “doesnt” in the exception’s message.

Fixed at r10784. Thanks for the detailed report!

The fix will be included into the next SVNKit release.