Почему Java SVNKit добавляет папку не в то место

В моем репозитории svn иерархия каталогов выглядит так:

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

какой dirB находится в dirA, и оба существуют.

Теперь я хочу добавить папку (dirC) в dirB и файл (file1.txt) в dirC, поэтому я хочу, чтобы иерархия каталогов была такой:

/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);

я вызываю метод addDir() и метод addFile() ISVNEditor, чтобы добавить папку и файл, например:

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),

но вроде не работает? Заранее спасибо за ответ на мой вопрос.

🤔 А знаете ли вы, что...
С Java можно создавать мобильные приложения для iOS с использованием фреймворка RoboVM.


67
1

Ответ:

Решено

Чтобы изменить папку, вам необходимо предоставить локальную версию dirB.

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

так что теперь вы находитесь под своим dirB. Оказавшись там, вы можете добавить файл или папку в dirB. Если вы хотите углубиться, например, в dirC, вам нужно снова предоставить локальную версию вашего dirC и добавить туда файл.