2016-04-22 6 views
1

Контекст: Моего слияние побежало в конфликты и у меня есть файл, как этот пример:Как JGit обвинить файл перед фиксацией?

foo.txt (слитый)

1 
<<<<<< HEAD 
2-master 
====== 
2-side 
>>>>>> df803849788fde47965b3dc8f07f07d48320ea9c 
3 

Вопрос: Для того, чтобы получить разработчик, фактически изменили конфликтующие строки, как обвинить файл результата (выше) перед фиксацией? Он работает для git blame Foo.txt

Проблема: я попытался сделать следующее, но виноваты null внутри цикла.

MergeResult m = runMerge(aScenario); 
BlameCommand blamer = new BlameCommand(git.getRepository()); 
BufferedReader br = new BufferedReader(new FileReader(new File(mergedfilepath))); 
BlameResult blame = blamer.setFilePath(mergedfilepath).call(); 
for (int i = 0; (line= br.readLine())!=null ; i++) { 
    // the blame at this point is null. 
    PersonIdent person = blame.getSourceAuthor(i); 
    System.out.println(person.getName() + ": "+ line); 
} 

ответ

2

Я думаю источник в обходе должно быть содержание результата.

Начиная с этого момента вы можете пересечь измененные регионы и попросить автора. Например:

BlameResult blameResult = git.blame().setFilePath(...).call(); 
int size = blameResult.getResultContents().size(); 
for(int i = 0; i < size; i++) { 
    System.out.println(blameResult.getSourceAuthor(i)); 
} 

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

Однако ваш код должен быть подготовлен с getSourceAuthor(), возвращающим null. В JavaDoc указано, что возвращаемое значение может быть нулевым.

+0

Извините, но я не вижу реальной разницы с моим фактическим решением, кроме того, что я создал переменную для хранения содержимого строки. Если '...' означает путь к файлу, это то, что хранится в моем «объединенном файле». Я проверил путь к файлу, и это правильно. Я использовал ваш фрагмент кода и получил то же значение «null». –

+0

В какой строке возвращается «null»? –

+0

'BlameCommand.call()' возвращает 'null'. –