JGit - Как повторно использовать DiffFormatter - PullRequest
0 голосов
/ 03 января 2019

Это дополнительный вопрос jgit - git diff, основанный на расширении файла .

Я пытаюсь добавить отформатированный diff к List<String>, но если я попытаюсь использовать тот же DiffFormatter, как показано ниже, предыдущие записи будут добавлены к следующему.

List<String> changes = new LinkedList<>();
            try (OutputStream outputStream = new ByteArrayOutputStream();
                    DiffFormatter diffFormatter = new DiffFormatter(outputStream)) {
                diffFormatter.setRepository(git1.getRepository());
                TreeFilter treeFilter = PathSuffixFilter.create(".txt");
                diffFormatter.setPathFilter(treeFilter);
                List<DiffEntry> entries = diffFormatter.scan(newTree, oldTree);
                for (DiffEntry diffEntry : entries) {
                    diffFormatter.format(diffEntry);
                    changes.add(outputStream.toString());
                    diffFormatter.flush();
                }
            }

Поэтому я вынужден создать DIffFormatter для каждой записи различий.

Есть ли лучший способ создать List<String> from List<DiffEntry> без создания нового DiffFormatter каждый раз?

1 Ответ

0 голосов
/ 03 января 2019

Причиной добавления предыдущих записей является то, что используется тот же поток вывода.Вызов outputStream.toString() возвращает строку всех байтов, которые были записаны до сих пор.Следовательно, каждый вызов toString в цикле for будет возвращать все ранее созданные различия, а также текущий.

Я вижу два пути решения этой проблемы:

  • Использованиеотдельный DiffFormatter внутри цикла for для каждой записи различий.

  • Реализация пользовательского OutputStream, который позволяет отбрасывать ранее записанное содержимое.

...