2015-04-07 4 views
0

Я новичок Прочный пользователь, и я пытаюсь обнаружить переименования файлов в истории фиксации. Я сравниваю каждый совершает против своего первого родителя, следующим образом:Как определить переименование файла с помощью Rugged?

repo = Rugged::Repository.discover("foo") 
walker = Rugged::Walker.new(repo) 
walker.sorting(Rugged::SORT_TOPO) 
walker.push("master") 

walker.each.take(200).each do |commit| 
    puts commit.oid 
    puts commit.message 

    diffs = nil 

    # Handle Root commit 
    if commit.parents.count > 0 then 
    diffs = commit.parents[0].diff(commit) 
    else 
    diffs = commit.diff(nil) 
    end 

    (files,additions,deletions) = diffs.stat 
    puts "Files changed: #{files}, Additions: #{additions}, Deletions: #{deletions}" 

    paths = []; 
    diffs.each_delta do |delta| 
    old_file_path = delta.old_file[:path] 
    new_file_path = delta.new_file[:path] 

    puts delta.status 
    puts delta.renamed? 
    puts delta.similarity 
    paths += [delta] 
end 

puts "Paths:" 
puts paths 
puts "====================================" 

end 
walker.reset 

Однако, когда у меня есть переименование, программа будет выводить добавление и удаление (A и D статус). Это соответствует выходу git log --name-status.

С другой стороны, я узнал, что с помощью git log --name-status --format='%H' --follow -- b.txt правильно отображается переименование как R100.

Истории репо и выходы мерзавца можно увидеть в следующей сути: https://gist.github.com/ifigueroap/60716bbf4aa2f205b9c9

Моего вопрос заключается в том, как использовать Diff, или объекты дельты Rugged обнаружить такой файл переименовать ...

Благодаря

ответ

1

Перед входом diffs.stat, вы должны вызвать diffs.find_similar! с :renames => true. Это изменит объект diffs, чтобы включить переименование информации. Это не выполняется по умолчанию, так как основная операция довольно сложна и не нужна в большинстве случаев.

Проверьте наличие документации для find_similar! здесь: https://github.com/libgit2/rugged/blob/e96d26174b2bf763e9dd5dd2370e79f5e29077c9/ext/rugged/rugged_diff.c#L310-L366 Дополнительные параметры.

Смежные вопросы