Я новичок Прочный пользователь, и я пытаюсь обнаружить переименования файлов в истории фиксации. Я сравниваю каждый совершает против своего первого родителя, следующим образом:Как определить переименование файла с помощью 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 обнаружить такой файл переименовать ...
Благодаря