OpenOCD小ネタ3 -ぱっちを提出したお話-

前回OpenOCDは急速に廃れつつある…とお話しましたが、この記事を書いている
2013年の11月上旬現在では日本のホビーユーザー間コミュニティではもはや見向きも
されなくなり、ほぼ壊滅状態になってしまいました。
限定解除したmbedCooCoxが強すぎです。

思うに私のぶろぐを含めたwebにあまたに点在する"丁寧な環境構築の解説"は
作成したそばからすぐに陳腐化してしまい役に立たなくなり新規参入の方々に
とってはそれが逆に導入における重大な障壁となったからなのでしょう。
しかも導入におけるアプローチの仕方は人それぞれ千差万別で何通りもあります。
多過ぎる選択肢というのは相手の興味を確実に喪失させます。無償といえども
その恩恵を得るために時間という貴重な対価を結局払うことになります。
しかもたくさん時間をかけて頑張ってもうまくできないかもしれません。
得られたものが疲労だけということにもなりかねません。

良かれと思って行ったことが逆に仇になった結果ですが、それもまた運命…
結局タダより高くつく物は無いねといったお話でしためでたしめでたし(完)















…すみませんうっかり今日の記事を〆るところでしたね。


今回はねむいさんがOpenOCDのパッチを提出して公式のコミットにマージされるまで
の経緯をお伝えします。

2013年現在、OpenOCDはgitというバージョン管理システムにて開発がすすめられて
います。以前はソースコードの世代管理にsvn(Subversion)が使われていましたが、
gitにはgerritという非常に効率的なレビューシステムをドッキングさせることが
できます。これによりエンバグされた極悪パッチやコンパイルすら通らないf**kな
パッチが開発者に送られまくるような事が無くなりよりスマートな開発スタイルに
成れたらしいです。

OpenOCDのサイトでは、ガイドラインとして作ったパッチをマージさせるための手順
も記されてはおりますが、ねむいさんはそれすら理解できる知能がありませんでした。
のでまず"どういう知識が必要か"の調査からはぢめました。

※当記事では作業を進めるうえで引っ掛かった部分の言及にとどめ、詳しい手順の
 紹介は致しません。ていうかできません。


●先ずgerritにアカウント登録を行う必要がある。
 真っ先にやるべきことはまずgerritに自分を登録することです。既にyahooのアカ
 ウントを持ってたら登録不要でyahooのアカウントでサインインできるようです。
 ねむいさんはVersaloonのBBS投稿用にyahooのアカウントがあったので、すんなり
 入れました。

 この時点で出来ることは他人のコードレビューにコメントつけたりスコアをつけたり
 ユーザネームの登録のみです。まだパッチの提出は不可能です。

●sshパブリック・キーをアカウントに登録する。
 sshとはこういうものだそうです。gerritにおいてはなりすましや非公開リポジトリ
 への通信傍受を防ぐために役に立ちそうです。
 
 こちらも手順が示されていますので特に難しいことではないはず…でしたが、使用
 していたMsys環境がsimonquianさん提供のものすごく古いやつだったので最初は全く
 駄目でした。結局Msys/MinGWのサイトから落とすことができるインストーラー
 使って一切合切インストールして新しいMsysの環境を作成してパブリックキーの
 登録に成功しました。
 2009年の時点ではこんなのなかったはずなのでいい時代になりましたね‥
 Msysでは主にOpenSSHというのでSSHプロトコルを実現しているようです。

●リモートリポジトリのクローンを作成してローカルで作業開始
 この作業自身はOpenOCDのビルドで当たり前にやってることなので特に問題は
 無いはずです。
 今では有志の方が作成された猿でもできるGIT入門という非常に分かりやすいgit
 指南があります。これはありがたい…
 cloneし終わったらopenOCDのディレクトリに入ります。ここもOpenOCDビルド時と
 同じですね。

●新しいリモートリポジトリの追加
 ここでアカウントを取得/登録した意味が効いてきます。また、事前にweb
 ブラウザからgerritにsigninをしてないと失敗するのでご注意を。
 "git remote add review"でrsaパブリックキーのpassphraseが求められるので
 登録したパスワードを入力します。

●hookのインストール
 ねむいさんここでず〜〜〜っと詰まってました。"Permission denied (publickey)"
 というエラーで先に進めなかったのですが詰まってた時はまだsimonquianさんの
 MSYSベースで頑張ってた頃で、まっさらのMSYS環境にしてからやり直すとあっさり
 通りました…今までの苦労はなんだったんだ…。
 また、rsaパブリックキーが置いてあるフォルダが正しく参照されてるかも重要で、
 私の64bit版Win7では以下のURLに置くことで成功しました。
 

"C:¥Users¥(ユーザー名)¥.ssh"

 ".ssh"というディレクトリがどこに出来ているか把握すべきです。


●名前とe-mailアドレスの登録
 フックのインストールを超えたらあとはトントン拍子です。
 ここも難なくクリア

●パッチの適用
 ここで初めてローカルリポジトリにパッチを適用します。
 
ここも通常のOpenOCDと手順は同じです。

●変更をコミット

while(!done) {
work - edit files using your favorite editor.
run "git commit -s -a" to commit all changes.
run tools/checkpatch.sh to verify your patch style is ok.
}
 
 ねむいさんこの部分が何かのスクリプトと思い込んでて必死にshell上で実行
 しようとしてました…あほだ…。この一文の意味するところはパッチを適用する
 たびにこの一連のコマンドを施行せよという意味です。
 "git commit -s -a" を実行するとvimが起動してコミット内容の編集画面に
 なります。つまりvi(vim)をインストールしてないとエラーで失敗します。
 vimで編集する気がない人は"./git/COMMIT_EDITMSG"の内容を直接メモ帳等で
 編集してもいいです。ここの文章構成は下記のテンプレートに沿って書かないと
 チェックで撥ねられたりレビューサーバに上げた後に怒られたりします。

topic: summary text
(一行あける)
preliminary text
(一行あける)
Signed-off-by: "user name"

 ねむいさんが行ったコミットを例にとるとこんな感じにします。

fm3: fix Fujitsu MB9Ax family support

Some MB9Ax (especially few internal SRAM model) fails programming
because of wrong SRAM basic-address on running algorithm.
Default SRAM basic-address must be 0x20000000.
This patch is fixing default SRAM basic-address and ramcode offset.
Tested on a MB9BF618T and MB9AF112K.

Signed-off-by: Nemui Trinomius


●衝突してないかチェック
"git pull --rebase origin master"で他の人と衝突してないかチェックできます。
OpenOCDの場合はそこまで活発ではないのでぶつかることはまずないでしょう。

●gerritサーバーに登録
"git push review"で上で編集した要約とともにパッチが提出されます。
送られたパッチはまずOpenの場所に上がります。そしてjenkinsという自動ビルド検証
プログラムにて最低限ビルドができるかどうかの審査が機械的に行われます。そして
他の人にコードレビューを受けて間違いやもっといい提案を受けてさらに修正します。
修正はローカルリポジトリにパッチを適用したソースコードからさらに修正を行います。
必要ならばメーリングリストにてさらに議論を進めたりもします。修正が完了したら、
"git commit --amend"
"git push review"
の二つのコマンドでgerritレビューサーバのPatchSetナンバーを上げて更新されます。

こうしてレビューを繰り返してプラススコアがついてきたころにgerritレビュー
サーバーを仕切っているntfreakさんによって"cherry-picked"されてマージされます。
マージされたパッチはこんな感じに履歴に残り、ねむいさんがOpenOCDのプロジェクト
に貢献したことがわかる仕組みとなっています。かぁーっ!(地獄のミサワみたいな顔で)
↑そいえばjenkinsのジジイのミサワverがすでにネタ絵であったりしますね…
ちなみにntfreakリンサンのGitHubから見ると私の実績はこんな感じです。


参考にさせてもらった日本語のサイト
jugyo様:僕が Gerrit について理解している数少ないこと
 基本的な概念・操作について。
mkouhei様: git stashでハマる。
 OpenOCDのパッチ提出手順では競合時の解決が書いてませんのでこちらを参考に
 させていただきました。

こんな感じで実作業を通じてgitやgerritの仕組みを学んできました。でも私自身も
まだごくごく一部しか理解してませんので他の人に教えられるようになるまで勉強
していきます。

Go to top of page