在提交中根据作者姓名删除文件

时间:2017-08-28 06:50:51

标签: groovy jgit

我的代码只删除解析文件中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)

1 个答案:

答案 0 :(得分: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 diff API的一般概述:http://www.codeaffine.com/2016/06/16/jgit-diff/