Список затронутых файлов из git.pull (). Call () - PullRequest
0 голосов
/ 10 мая 2019

Я новичок в JGit, так что, возможно, я что-то не так понимаю, но мне не удается получить результат от команды pull. Под этим я подразумеваю список файлов, на которые повлияло извлечение (измененные / добавленные / удаленные файлы, ....)

Я попробовал несколько вещей, но ни одна из них не дала мне нужную мне информацию:

PullResult pull_res = git.pull().setCredentialsProvider(cred).call();
MergeResult merge_res = pull_res.getMergeResult();
FetchResult fetch_res = pull_res.getFetchResult();
java.lang.System.out.println("MergeStat1: "+merge_res.getMergeStatus());
java.lang.System.out.println("####################################");
java.lang.System.out.println("MergeStat2: "+merge_res.getMergedCommits());
java.lang.System.out.println("####################################");
java.lang.System.out.println("FetchRes: "+fetch_res.getMessages());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes1: "+pull_res.getFetchResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes2: "+pull_res.getFetchResult().getMessages());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes3: "+pull_res.getFetchResult().toString());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes4: "+pull_res.getFetchResult().getMessages().toString());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes5: "+pull_res.getMergeResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes6: "+pull_res.getRebaseResult());
java.lang.System.out.println("####################################");
java.lang.System.out.println("PullRes7: "+pull_res.getFetchedFrom());

Это приводит к следующему выводу:

MergeStat1: Fast-forward
####################################
MergeStat2: [Lorg.eclipse.jgit.lib.ObjectId;@1....
####################################
FetchRes: 
####################################
PullRes1: org.eclipse.jgit.transport.FetchResult@3....
####################################
PullRes2: 
####################################
PullRes3: org.eclipse.jgit.transport.FetchResult@3....
####################################
PullRes4: 
####################################
PullRes5: Merge of revisions a...., 1a.. with base 1a... using strategy recursive resulted in: Fast-forward. 
####################################
PullRes6: null
####################################
PullRes7: origin

Что я могу сделать, чтобы получить список всех затронутых файлов из этого извлечения? (также как они были затронуты: изменены, добавлены, удалены ..)

UPDATE

С ответом Рюдигерса я пришел к следующему решению задачи:

CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
ObjectId tree = git.getRepository().resolve("HEAD^{tree}");
newTreeIter.reset(reader, tree);

UsernamePasswordCredentialsProvider cred = new UsernamePasswordCredentialsProvider(USER, PASSWORD);
PullResult pull_res = git.pull().setCredentialsProvider(cred).call();

CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
tree = git.getRepository().resolve("HEAD^{tree}");
oldTreeIter.reset(reader, tree);
DiffFormatter df = new DiffFormatter(new ByteArrayOutputStream());
df.setRepository( git.getRepository() );
List<DiffEntry> entries = df.scan(oldTreeIter, newTreeIter);

for(DiffEntry entry : entries) {
    java.lang.System.out.println(entry);
}

1 Ответ

2 голосов
/ 10 мая 2019

Буферный идентификатор текущей ветки перед вызовом pull, например, используя git.getRepository().resolve("HEAD").

Когда извлечение завершено, прочитайте идентификатор фиксации HEAD еще раз. Теперь вы сможете создавать различия между двумя коммитами.

Как показать измененные файлы между двумя коммитами, здесь ответили: Как показать изменения между коммитами с помощью JGit

Смотрите здесь для детального обсуждения API-интерфейсов diff JGit: https://www.codeaffine.com/2016/06/16/jgit-diff/

...