为什么Java SVNKit在错误的位置添加文件夹

时间:2019-07-19 09:22:57

标签: java svn svnkit

在我的svn存储库中,目录层次结构如下:

/dirA(exists)/
   /dirB(exists)/

哪个dirB在dirA中,并且两个都存在。

现在,我想在dirB中添加一个文件夹(dirC),并在dirC中添加一个文件(file1.txt),所以我希望目录层次结构是这样的:

/dirA(exists)/
        /dirB(exists)/
                /dirC(added)/
                        /file1.txt(added)

使用SVNKit时,我的SVNRepository实例指向dirA, 我使用getCommitEditor()获取ISVNEditor的实例,并将其称为openRoot(-1)方法,如下所示:

ISVNEditor svnEditor = svnRepository.getCommitEditor("add folder and file.", null);
svnEditor.openRoot(-1);

我调用ISVNEditor的addDir()方法和addFile()方法来添加文件夹和文件,如下所示:

svnEditor.addDir("dirB/dirC", null, -1);
svnEditor.addFile("dirB/dirC/file1.txt", null, -1);
svnEditor.applyTextDelta("dirB/dirC/file1.txt", null);

SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator();
String checksum = deltaGenerator.sendDelta("dirB/dirC/file1.txt", new ByteArrayInputStream(data), svnEditor, true);
svnEditor.closeFile("dirB/dirC/file1.txt", checksum);//Closes the new added file.
svnEditor.closeDir(); //Closes the new added folder.
svnEditor.closeDir(); //Closes the root folder.

svnEditor.closeEdit();

之后,为什么将dirC添加到dirA中而不是在dirB中,目录层次结构变为:

/dirA(root)/
        /dirB(exists)/
        /dirC(added)/
                /file1.txt(added)

我在致电

时已指示dirC在dirB下
svnEditor.addDir("dirB/dirC", null, -1),

但是它似乎不起作用? 预先感谢您回答我的问题。

1 个答案:

答案 0 :(得分:1)

为了更改文件夹,您需要提供dirB的本地版本。

//provide your local revision of dirB
long r = ...;
svnEditor.openDir( "dirB" , r );

所以现在您位于dirB下。在那里,您可以在dirB下添加文件或文件夹。如果您想在dirC中说得更深一点,那么您必须再次提供dirC的本地修订并在其中添加文件。