おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

短期集中連載? LibreOfficeをWindowsで開発してみよう:補足その②パッチの提出 and more...

GWの間にLibO開発できる環境をWindowsで作ろうの連載をやりました。

過去記事:第1回 第2回 第3回 第4回 第5回

そして、修正パッチ作って投げたのでその気づいた点を書いてたら長くなったので分割したのが:

補足その①

この記事はその続きで、

  1. ユニットテストをどう書いてどう実行するか
  2. パッチをどうやって送るか
  3. ヘルプの更新の仕方

のうち 2. と、3. をほんのちょっと……です。

2. パッチをどうやって送るか

こいつについては例によって公式にとても丁寧に説明があるのでそれに従えばいいです。

LibreOfficeソースコードは、コードレビューシステム Gerrit で管理されてます。

https://gerrit.libreoffice.org/:embed:site

Gerritの設定についてのドキュメントはこちら。

wiki.documentfoundation.org

まずはGerritにアカウント作るところからですが、私大昔にアカウントだけは作ってあったのでそこは省略。アカウント設定で「ユーザー名」を確認、それとSSH鍵も登録しておきます。

f:id:naruoga:20200518212914p:plain
Gerritのアカウント情報にてユーザー名を確認

そしたらあとは簡単で、 ./logerrit setup すればよいはず……だったんですが、なんか私はうまくいかなくて (~/.ssh/confg が正しく更新されなくて)、手で config 書いたらテスト通りました。

そしたら次はパッチの提出です。ドキュメントはこちら。

wiki.documentfoundation.org

やることは、masterから分岐して変更コミットを持つブランチにて、

./logerrit submit master

ってするだけです。 前回の記事にもちろっと書きましたがCIこけたりして再度コミットやり直したりしたのですが、 そのときはamendまたはrebaseでコミット改変すればOK。コミットコメント見ると:

Change-Id: ???????056191

みたいなのがついてますが、Gerrit上の変更はこいつが維持されると反映されるみたい。

で、提出してJenkins通ったのち。 どうも自信がなかったのですが、たとえばコード修正して、その修正に対応したテストケース書いて、みたいな変更のとき、 コミットは分割するものかそれとも一つにまとめるものか悩ましかったのです。 ただ、ほかの人のコミットを見るとあんまり分割されてなさそうなので、えいっとrebaseで一つにしちゃいました。 このときは最後のコミットの Change-Id を残せばいいみたいですね。

こうやって再提出するときも:

./logerrit submit master

するだけです。簡単ですね。

それから、「こういう書き方でいいのかちょっと見てくれる?」みたいなときに、 Work In Progressなままあげるって機能もあって、その場合は ./logerrit submit-wip master とすればいいですよと。

WIPで上げた変更をちゃんとした変更に昇格する方法もあるのかもしれないですが、 私は、この変更とは別に別にsubmitしちゃって、WIPのほうはabondon(取り下げ)しちゃったので、 よくわからないんですよね。 その点は各自適当にアレしてくださいませ。

3. ヘルプの更新の仕方

さてさて。

今はレビュー待ちでドキドキしてるところですが、それで終わりではありません。

今回は、仕様変更したのですが、この仕様はヘルプにも記述がありまして:

help.libreoffice.org

こいつも直さないといけないじゃないですか。

で、ヘルプ入りでビルドしないとだめなのかなー、と、 ./autogen.sh の実行時オプションに --with-help を指定したんですけど、 今の時点では、これはいらんかったのではと思ってます。

というのは、LibOのソースツリーにおいてヘルプは helpcontent2 という submodule になってまして、 submoduleなので、このツリー上で変更したところでコミットするすべがないし、 Gerritにおけるパッチ管理も別。

いや、

wiki.documentfoundation.org

ここにあるやりかたをすればいけるのかもしれないですが、 なにせ --with-help するとビルド時間がめちゃくちゃ伸びるのです。

だったら、別のツリーとしてcloneして、そっちで作業した方がいいんじゃないか……? というのが、 今のところ思ってるところです。

最後に小ネタ: ./autogen.input 書こう

短期集中連載の、たとえば第1回とか第3回とかで、./autogen.sh に引数こんなふうに渡して実行してました。

./autogen.sh \
  --with-lang=ALL \
  --enable-64-bit \
  --with-jdk-home=/cygdrive/c/Program\ Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/ \
  --enable-debug

それより、同じディレクトリに autogen.input ってテキストファイルを転がしておく方がベターです。こんな感じ。

--with-lang=ja en-US ko zh-CN zh-TW
--enable-64-bit
--with-jdk-home=/cygdrive/c/Program\ Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/
--enable-debug

このファイルがあれば、 ./autogen.sh と引数なしで実行したとき、ファイルに記載したパラメータありで実行されます。

autogen.input の書き方はみたまんまなのですが一点だけ注意、--with-lang みたいに複数のパラメータを取るとき、 コマンドラインで渡すときは "" でクォートしますが、 autogen.input の場合はクォートするとエラーになります。

直前に実行したautogenの引数は autogen.lastrun ってファイルに保存されてるので、 こいつをもとに作るのがいいかもですね。

そんなわけで開発チャレンジはまだ始まったばかりですが、 この記事が、自分も開発やってみよう! ビルドするだけじゃなくてバグ直したり開発したりしてみよう! と思う人の参考になればいいなと思います。


LibreOffice Asia Conference 2019: LibreOffice CJK Bugs, Fixes, and Stories

(先日も紹介しましたけど)去年のLibreOffice Asia Conference 2019でMarkが言ってたように、 CJKの問題は非CJKな民が正しい動作を理解し修正することがとても難しいので、 我々自身で直せるものは直していきたいですよね。

求む! 同志!