当面の私の仕事は、特定のファイルが変更された最後のコミットのコミット ID を把握することです。ルビー/ラギッドを使用しています。私が思いついた唯一の解決策は、すべてのコミットを調べて、そのファイルのコミットに関連付けられたツリー内のファイルを検索し、そのファイル oid を最初の (最新の) コミットからのファイルの oid と比較することです。
def commit_oid commit, file
commit.tree.walk( :postorder ) { | root, obj |
return obj[ :oid ] if "#{root}#{obj[ :name ]}" == file
}
raise "\'#{file}\' not found in repository"
end
def find_last_commit file
johnny = Rugged::Walker.new( get_repository )
johnny.push get_repository.head.target
oid = commit_oid johnny.first, file
old_commit = johnny.first.oid
johnny.each do | commit |
new_oid = commit_oid commit, file
return old_commit if new_oid != oid
old_commit = commit.oid
end
old_commit
end
これは機能しますが、非常に複雑なようです。「コミットで何が変わったのか」という情報を取得する簡単な方法があるはずです。同じことを達成するためのより簡単で簡単な方法はありますか?