Question

SVN server is accessible over https. So I need to read a file that is located there. I followed the snippet from svnkit wiki (http://svn.svnkit.com/repos/svnkit/tags/1.3.5/doc/examples/src/org/tmatesoft/svn/examples/repository/DisplayFile.java), but my SVNKindNode is NONE and as a result no file is read. Nevertheless there's no exceptions during connection. So I can assume that I do connect correctly to SVN server, but then something goes wrong.

Here is the code:

public class SVNRepoConnector {
    private String username = "user";
    private String password = "pwd";
    private String baseUrl = "https://mysvnserver.com/svn/project/trunk";
    private String filePath = "/myproject/src/main/webapp/file.html";

    public void downloadSchema() {
        DAVRepositoryFactory.setup();
        SVNRepository repository = null;

        try {
            repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(baseUrl));
            ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(username, password);
            repository.setAuthenticationManager(authManager);

            SVNNodeKind nodeKind = repository.checkPath(filePath, -1);

            if(nodeKind == SVNNodeKind.NONE) {
                System.err.println("There is file at: " + baseUrl + filePath);
                System.exit(1);
            } else if (nodeKind == SVNNodeKind.DIR) {
                System.err.println("The entry at " + baseUrl + filePath + " is a directory while a file was expected.");
                System.exit(1);
            }

            SVNProperties properties = new SVNProperties();
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            repository.getFile(filePath, -1, properties, out);

            System.out.println("Content:\n");
            try {
                out.writeTo(System.out);
            } catch (IOException e) {
                e.printStackTrace();
            }

        } catch (SVNException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SVNRepoConnector connector = new SVNRepoConnector();
        connector.downloadSchema();
    }
}

I receive "There is file at..." due to SVNNodeKind equals NONE. I cannot understand what is wrong here. How to read file from SVN over https?

Btw, my svnkit is 1.8.5.

Était-ce utile?

La solution 2

I found the solution after thorough debugging of the sources.

In short, the problem is in the second argument of repository.checkPath(filePath, -1); and repository.getFile(filePath, -1, properties, out);. filePath must be file name and path to it must be in the baseUrl field. After these changes everything started working correctly.

Regarding the snippet, in case of www/license.html, one should pass 1 as a second arg.

Autres conseils

Specify a relative path (unless baseUrl is the repository root):

private String filePath = "myproject/src/main/webapp/file.html";

instead of

private String filePath = "/myproject/src/main/webapp/file.html";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top