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
、[]string
、bool
、あと 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 を使うほうがいいと思う(名前一緒になったけど他にやりようがなかったっすサーセン……)。