Quantcast
Channel: 詩と創作・思索のひろば
Viewing all articles
Browse latest Browse all 179

Git config から struct に読みこむ Go パッケージを書いた

$
0
0

Git や GitHub にまつわるツールは gitconfig に値を格納することにしておくのがユーザにも便利で、よく使っているし広く使われているとおもう。いっぽう YAML とか JSON とか設定ファイルによく使われるフォーマットは構造体に値をまとめて読みこむのが普通でもある。そういうわけで表題のようなものを書いた。以下の例を見れば分かるとおり gitconfig ファイルを自力で解析してすべての値を読みこむようなものではないです。

README より GoDocのほうが詳しいです。

使い方

gitconfigフィールドタグを使います。

import "github.com/motemen/go-gitconfig"

type C struct {
    UserEmail  string `gitconfig:"user.email"`
    PullRebase bool   `gitconfig:"pull.rebase"`
}

var v Config
err := gitconfig.Load(&v)
...

gitconfig.Loadメソッドで、タグによって指定されたキーに対応する値が構造体のフィールドに設定されます。対応している型は string[]stringbool、あと int系。

ソースを指定する

パッケージに定義されている関数を呼び出すと内部ではオプションなしの git configが呼び出されるので、リポジトリローカルの設定もグローバルな設定も参照されることになります。これが都合わるい場合には、以下の変数や関数を使うことでソースを限定できます。

  • gitconfig.Global… グローバル(~/.gitconfig)な設定のみ
  • gitconfig.Local… ローカル(.git/config`)
  • gitconfig.File(file)… 特定のパスのファイル(.gitmodulesとか)
url, err := gitconfig.Local.GetString("remote.origin.url")

単一のキーを取得する

上の例にも出ているけれど、GetXXXメソッドで単一のキーを取得することもできる。行きがかり上実装されたメソッドたちです。よく使用するキーを取得したいだけなら tcnksm/go-gitconfigを使うほうがいいと思う(名前一緒になったけど他にやりようがなかったっすサーセン……)。


Viewing all articles
Browse latest Browse all 179

Trending Articles