LLVM+RISC-V本のサポートが最近できていなくてIssueが溜まっていたのだが、いくつかLLVM側の実装ミスがあり、サンプルコードをリビルドする必要が生じた。
LLVMサンプルリポジトリは、作業の分岐などを全く発生させずにストレートに伸ばしている。 また、実装部分を明快にするためにバグがあったとしても個別のコミットを生成せずに、そのバグに関連するコミットを一度作り直している。 これにより、実装コミットには、基本的にはバグが存在せず、後続のバグコミットを検索しなくても良いようにしている。
問題は、もしバグがあってそれに関連する実装コミットごと作り直した場合、リビジョンIDがすべて更新されてしまうことだ。 これにより、今まで使用していたGitのリビジョンIDがすべて失われてしまう。 これが、本書において実装コミットのリビジョンIDを記載しなかった理由だ。
しかしサポートサイト側には、本書における実装とそれに相当するサンプルリポジトリのリビジョンIDを記載している。
このページに記載しているリビジョンIDは、LLVMリポジトリを作り直すたびに更新しなければならない。 これを自動化するためのスクリプトを作っておいた。
やっていることは単純で、コミットメッセージをページ内から検索して、該当するメッセージをLLVMリポジトリから探し出してリビジョンIDを抜き出し、ページを置き換えるだけだ。
if line =~ /revision:/ then message = line.gsub('- revision:','').gsub(/^ +/, '').gsub(/\n/, '') puts message command = "cd ../llvm-myriscvx120 && git log --oneline --grep=\"#{message}\"" git_log = `#{command}` revision = git_log.split(' ')[0] puts revision o.puts line.gsub(/revision:.+/, "`#{revision.to_s}`") else o.puts line end
いままで面倒だった更新作業が、これでだいぶ楽になるはずだ。