2017-08-28 86 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'来删除? –