Удалить файл на основе имени автора в фиксации

Мой код удаляет только файлы, которые анализируют имя Дженкинса в файле. Я хотел бы удалить файл на основе автора (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)

person John Doe    schedule 28.08.2017    source источник
comment
проверьте этот пост - stackoverflow.com / questions / 23151837 /   -  person Rao    schedule 28.08.2017


Ответы (1)


Чтобы найти все файлы, которые были изменены с помощью определенного коммита, вам понадобится разница этого коммита с его предшественником.

Вы можете позволить 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, какой из них использовать, когда.

См. Также здесь общий обзор API различий JGit: http://www.codeaffine.com/2016/06/16/jgit-diff/

person Rüdiger Herrmann    schedule 28.08.2017
comment
Нет более простого пути? Например, использовать метод class PersonIdent и getAuthor? - person John Doe; 28.08.2017
comment
Автор и коммиттер одинаковы для всех измененных файлов в коммите. - person Rüdiger Herrmann; 28.08.2017
comment
Если я правильно понимаю, для меня это сработает. Если автором последней фиксации является Дженкинс - ›Удалите этот файл. Итак, как использовать getAuthor в операторе if для удаления? - person John Doe; 28.08.2017
comment
Не уверен, какая связь существует между Jenkins и файлом, который нужно удалить. Однако, чтобы узнать автора фиксации, см. Этот вопрос: stackoverflow.com/questions/42820282/. RevCommit содержат все метаданные о фиксации. - person Rüdiger Herrmann; 28.08.2017