2011-12-21 133 views
1

我正嘗試使用SVN Kit獲取在我的Java代碼中的分支上執行的所有活動。使用SVNKIT從SVN中的分支獲取所有修訂日誌

SVNRepository repository = SVNRepositoryFactory.create(svnURL); 
ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager("UserName", "password"); 
repository.setAuthenticationManager(authManager); 
Collection logEntries = repository.log(new String[] { "" }, null, 0, -1, true, true); 

上面的代碼就像一個魅力,我得到了我的svnURL屬性表示的分支上的所有活動。

但是真正的問題出現在一些活動後,分支本身被重新命名。例如

Initial Branch => https://domain/repository/branches/OriginalName 
New 
Branch => https://domain/repository/branches/NewName 

現在,重命名發生後,當我運行使用舊名稱上面的代碼中,我得到的是說,文件無法找到一個PROPFIND錯誤。但是,當我使用新的分支名稱運行時,所有文件都可以正常工作,並且還會在該分支上提供活動日誌,但只有在重命名之前。 OldBranch名稱上發生的活動不會返回。

SVNKit有沒有一種方法來獲得我期待的輸出?

回答

2

您可以設置參數的logstrictNode

如果strictNode是真實的,收穫複製每個路徑修改日誌時,歷史將不會被遍歷(如果有的話 存在)。

這似乎相當於在大多數GUI中停止複製/重命名。通過將其設置爲false,您應該可以獲得整個修訂歷史記錄。

注意:svn rename只是一個copy and delete。它將創建文件/文件夾的新副本並刪除舊副本。

+1

其實。這是我剛剛嘗試的。我看到的問題是,SVNKit最終返回了我所有的活動。即結果還將包括在日期範圍內可能在/ trunk或任何其他分支上發生的任何活動。這是我不想要的東西。這可能是SVNKit中的錯誤嗎? – 2011-12-21 10:54:36

+0

@ SalmanA.Kagzi奇怪,它絕對應該工作:http://old.nabble.com/What-is-ancestor-log-history%3A-SVNRepository.log%28%29--td32571191.html – oers 2011-12-21 12:05:29

+0

謝謝你的鏈接。這實際上證明我的結果是正確的?我的意思是,當我將strictNode設置爲false時,日誌會回溯到每個文件的開頭,即當這些文件實際添加時(在主幹或任何其他分支中)時。但我不想走那麼遠。我只想盡可能地創建分支。有什麼辦法限制嗎?再次感謝。 – 2011-12-21 12:31:31