【问题标题】:How to get tree structure from SVN using java如何使用java从SVN获取树结构
【发布时间】:2012-07-11 10:58:07
【问题描述】:

有没有什么办法可以在java中把SVN结构变成树形结构?

例如:如果我指定路径http://sample.com/repository/pag/branches/dev/Structure/services/

我想要服务下的所有条目,如果它再次包含一个目录,它的条目也在树中?

谢谢。

注意:我见过 getDir()。但是在这里我必须继续迭代它。

【问题讨论】:

  • 自己迭代和自己构建树有什么问题?
  • 我给 getDir() 提供输出需要 5 到 10 秒...我在“/service”下有 10 个嵌套目录。这就是我想的原因

标签: java svn svnkit


【解决方案1】:

如果您需要所有树,您可以使用“状态”请求来执行此操作,并报告告诉您有一个空的工作副本。一个“状态”请求应该比多个 getDir() 请求快。一个如何使用SVNKit 的示例

   final SVNRepository svnRepository = SVNRepositoryFactory.create(url);
    try {
        svnRepository.status(revision, "", SVNDepth.INFINITY, new ISVNReporterBaton() {
            @Override
            public void report(ISVNReporter reporter) throws SVNException {
                reporter.setPath("", null, revision, SVNDepth.INFINITY, true);
                reporter.finishReport();
            }
        }, new ISVNEditor() {
            @Override
            public void targetRevision(long revision) throws SVNException {

            }

            @Override
            public void openRoot(long revision) throws SVNException {
                System.out.println("<root>");
            }

            @Override
            public void deleteEntry(String path, long revision) throws SVNException {
            }

            @Override
            public void absentDir(String path) throws SVNException {
            }

            @Override
            public void absentFile(String path) throws SVNException {
            }

            @Override
            public void addDir(String path, String copyFromPath, long copyFromRevision) throws SVNException {
                System.out.println("directory: " + path);
            }

            @Override
            public void openDir(String path, long revision) throws SVNException {
            }

            @Override
            public void changeDirProperty(String name, SVNPropertyValue value) throws SVNException {
            }

            @Override
            public void closeDir() throws SVNException {
            }

            @Override
            public void addFile(String path, String copyFromPath, long copyFromRevision) throws SVNException {
                System.out.println("file: " + path);
            }

            @Override
            public void openFile(String path, long revision) throws SVNException {
            }

            @Override
            public void changeFileProperty(String path, String propertyName, SVNPropertyValue propertyValue) throws SVNException {
            }

            @Override
            public void closeFile(String path, String textChecksum) throws SVNException {
            }

            @Override
            public SVNCommitInfo closeEdit() throws SVNException {
                return null;
            }

            @Override
            public void abortEdit() throws SVNException {
            }

            @Override
            public void applyTextDelta(String path, String baseChecksum) throws SVNException {
            }

            @Override
            public OutputStream textDeltaChunk(String path, SVNDiffWindow diffWindow) throws SVNException {
                return null;
            }

            @Override
            public void textDeltaEnd(String path) throws SVNException {
            }
        });
    } finally {
        svnRepository.closeSession();
    }

【讨论】:

  • 您好,感谢您的回复...如果我有一个大型目录系统,这会好吗?
  • 是的,如果您想在某个“修订版”处访问某个“url”中的所有内容,这是最好的方法(如果您不想从根目录开始,您可以指定一个子目录的 url )。如果目录系统很大,则尤其好。这种方法不好的唯一情况——如果你想爬取所有目录到某个深度(比如5)或者深度取决于目录内容——然后使用getDir()。
  • 如果深度也很大..说 size-2 。我可以使用这个仪式吗?
  • 我想,是的,如果尺寸足够大的话。测量很简单。从理论上讲,如果您通过网络工作,对于“状态”请求,您将收到带有编辑器调用的长 XML 响应(您可以打开 SVNKit 登录以查看服务器上发送的内容),但这只是一个请求.但是每个 getDir() 调用都是一个单独的请求,需要更多时间。
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多