2017-08-28 87 views
0

我的代碼只刪除文件中解析爲Jenkins名稱的文件。我想在上次提交中刪除基於作者(Jenkins)的文件。什麼是最好的解決方案?在提交中刪除基於作者姓名的文件

def changelogPath = "C:\\test" 
def PackID = "test" 

def delete(String changelogPath, String PackID) { 
    String folderPath = "$changelogPath"+ "\\" + "$PackID" 
    new File(folderPath).eachFile(FileType.FILES) { file -> 
     if (file.name.contains('Jenkins')) file.delete() 
} 

delete(changelogPath, PackID) 
+0

檢查這個帖子 - https://stackoverflow.com/questions/23151837/get-file-owner-metadata-information-with-java – Rao

回答

0

爲了找到所有已經被某個提交改變的文件,你需要對它的前任進行提交的差異。

你可以讓JGit計算DiffEntries名單如下:

ObjectReader reader = git.getRepository().newObjectReader(); 
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser(); 
ObjectId oldTree = git.getRepository().resolve("HEAD^{tree}"); 
oldTreeIter.reset(reader, oldTree); 
CanonicalTreeParser newTreeIter = new CanonicalTreeParser(); 
ObjectId newTree = git.getRepository().resolve("HEAD~1^{tree}"); 
newTreeIter.reset(reader, newTree); 

DiffFormatter df = new DiffFormatter(new ByteArrayOutputStream()); 
df.setRepository(git.getRepository()); 
List<DiffEntry> entries = df.scan(oldTreeIter, newTreeIter); 

每個DiffEntry有表示其添加,更改或刪除的文件的路徑。該路徑相對於存儲庫工作目錄的根目錄。實際上,有一個oldPath和newPath,請參閱JavaDoc當使用哪一個。

也看到這裏的JGit的差異API的概述:http://www.codeaffine.com/2016/06/16/jgit-diff/

+0

有沒有更簡單的方法?例如使用'class PersonIdent'和'getAuthor'方法? –

+0

作者和提交者對提交中的所有更改的文件都是一樣的 –

+0

如果我理解正確,對我來說它將工作。如果上次提交的作者是Jenkins - >刪除此文件。那麼如何在if語句中使用'getAuthor'來刪除? –