gitoliteのリポジトリ管理ツールをgolangで書きなおしてみた

最近では github をメインにリポジトリ管理をしていますが, 特に公開する必要がないものはサーバに gitolite で Git サーバを用意して管理しています。2 年ほど前に gitolite 用のリポジトリを管理するコマンドを Ruby で適当に書いて使っていたのですが不便だったのと最近 golang を書いているので書きなおしてみました。

2 年前の記事: gitolite 管理のリポジトリを簡単に追加できるようにした

そもそもの仕組み

gitolite は git サーバのリポジトリ自体を git で管理しています。

例えば, 新たにリポジトリを追加する場合, conf/gitolite.conf に対して次の行を追加します。

repo    namespace/new-repository
        RW+  =  @develop

このまま commit し push すると git@example.jp:namespace/new-repository.git をリモートリポジトリとして利用できるようになります。作成したコマンドではこの gitolite.conf を管理するためのリポジトリの内容を確認, 変更 して利用します。

用意したコマンド

repos コマンド一覧

使ったもの

処理として行ったこと

  • gitolite.conf を読み込み
  • 正規表現を使ってファイル内容からリポジトリのスライスを作る
  • list コマンド
    • リポジトリのスライスを表示
  • add コマンド
    • リポジトリのスライスに重複がないか確認
    • ファイルに新しいリポジトリ情報を追加
    • git add, commit, push して反映
  • delete コマンド
    • リポジトリのスライスに該当項目があるか確認
    • ファイルから作ったスライスに対して該当リポジトリに関する情報を削除
    • ファイルを上書き
    • git add, commit, push して反映 ※ファイルから削除されてもサーバ上にはリポジトリは存在したままです
  • update コマンド
    • $ git pull --rebase をしてファイルを最新状態に

golang で書いてみて

  • $ cli-init -s list,add,delete,update repos で雛形ができて便利だった
  • 今更ながら $ repos list | peco といったことができることに気づいたので便利さが向上した
  • 以前のものより軽快に動作する
  • もっと早く書き直せばよかった
  • 標準パッケージのドキュメントは頭に入れておきたいと思った

なお, コードが小汚いので公開はしません。