Subversionのコマンド結果(svn logなど)をXML形式で取得する

つい最近まで知らなかったのでメモ。

ソースコードのバージョン管理と言えば今ではgitがトレンドだけど、仕事先ではまだまだSubversionだったりマイクロソフトのTeam Foundation Serverだったりで、おそらくgitを使っているチームはほとんど無いのではないかと思う。

そんな中、Subversionのコミットログをプログラム上で扱いたいと思うことがあり、いろいろと方法を探していた。
最初はSubversionの言語バインディング(API)を使うしかないのかな、と調べてみたけれどJavaとCしかまともにサポートされてなさそうな雰囲気だったのと使い方が面倒そうで保留。

次にSubvertionがリポジトリとやり取りしてるプロトコルを喋れないかと調べてみたけれどこれも仕様がよく分からず、WebDAVだとどうかな?と見てみてもSubversionのサーバー構築の情報はたくさん出てくるけれど、あまり情報が無くてこれも保留。

※いまこのブログを書いてる途中に調べてみると、WebDAVのプロトコル仕様は公開されている様子。時間があればこちらも調べてみる。

で、何気なくsvn logコマンドのリファレンスを眺めていたら”–xml”というオプションがあるのを発見。

通常のsvn logコマンドだとこんな感じの出力(一部省略)だが、

# svn log -l 2 http://svn.apache.org/repos/asf/subversion/trunk
------------------------------------------------------------------------
r1801108 | philip | 2017-07-07 05:56:14 +0900 (金, 07  7月 2017) | 24 lines

Add exception checks to some of the JavaHL native code to avoid JVM
warnings about JNI problems of the form:

  WARNING in native method: JNI call made without checking exceptions when required to

------------------------------------------------------------------------
r1801012 | danielsh | 2017-07-06 19:19:47 +0900 (木, 06  7月 2017) | 3 lines

* tools/dist/templates/rc-release-ann.ezt,
* tools/dist/templates/stable-release-ann.ezt:
    Fix a copy-pasto in these templates.
------------------------------------------------------------------------

–xmlオプションをつけると

# svn log -l 2 --xml http://svn.apache.org/repos/asf/subversion/trunk



philip
2017-07-06T20:56:14.167594Z
Add exception checks to some of the JavaHL native code to avoid JVM
warnings about JNI problems of the form:

  WARNING in native method: JNI call made without checking exceptions when required to



danielsh
2017-07-06T10:19:47.297427Z
* tools/dist/templates/rc-release-ann.ezt,
* tools/dist/templates/stable-release-ann.ezt:
    Fix a copy-pasto in these templates.


とXMLで出力される。

これなら標準入力でXMLを受け取ってパースすればどうとでも扱える。プログラム内からsvnコマンドを直接実行するのでセキュリティ的にどうこうはあるかもしれないが、個人が使うちょっとしたツールではあまり問題にならないだろう。

svn logコマンド以外にもsvn info や svn status など–xmlオプションを付けられるコマンドは他にもあるようなので、上手く使うと便利なことができるかも。

NO IMAGE

2016年振り返り

気がついたら2016年も終わり。 今年はこのブログを一度も更新しないまま年が終わろうとしているので、振り返りと称して何か書くことにする。 振り返りと言っても今年は大きな出来事はなかったかな...

NO IMAGE

2015年振り返り

あんなに昔は書いていたブログも5月を最後にすっかり書かなくなってもう年末。 いちおう2015年を簡単に振り返っておこうと思う。 仕事 今年はいろいろ頑張ったけれど、自分の成長に繋がったか...

NO IMAGE

5月振り返り

月に一回の更新はやっておかないと、ということで、さて5月。振り返りというほどのことでもないが…。 もうすでにGWが遠い昔のように思えるほど、仕事は佳境で普段より帰宅も遅め。 夜10時に北九州の...

NO IMAGE

3月

年度末進行で久しぶりに忙しい思いをした一か月。 いろいろな段取りの悪さが露呈して、振り回されたところも多かった。 とりあえず一旦月末を無事に迎えられたけれど、月が変わっても残務整理のようなこと...

NO IMAGE

2月

気がついたら2月も終わり。 休みもちゃんと取れているのにブログが書けないという…。 そういえば仕事先が北九州になってから1年が経った。あっという間と気もするし、最初はデスマの火消しとして投...

NO IMAGE

親知らず抜歯

12月から始めた虫歯の治療の一環で、親知らずを抜くことになったので右下のを抜歯した。 親知らずが歯茎にほとんど埋まっていて、しかも真横に生えているので抜くのも歯茎を切開したりで大変、抜いた後も顔...

NO IMAGE

仕事納め

派遣先の事情により25日の木曜日で仕事納め。1日早く年末年始休みに。 今年は10連休で割と長めの休みになるけれど、大晦日から三が日をテレビ見たりなんなりで過ごすとあっという間に休みが終わってしま...

スポンサーリンク