生涯未熟

生涯未熟

プログラミングをちょこちょこと。

golangのパッケージマネージャdepのIssue覗いてみた

今まではglideを使ってたのですが、公式ご謹製ということでdepをこれから使っていこうかなと思いまして、一旦Issueを覗いてみました。

その中でも気になったIssueはこちら。

github.com

dep initして生成されたmanifest.jsonが空だよ」ってIssueなんですが、pksunkaraさんが「僕のリポジトリdep init試してみたけど空だったよ」とコメントを寄せていたのでやってみました。

そのリポジトリはこれ↓

github.com

で、試してみたんですが確かにmanifest.jsonが空・・・

何でだろうとちょっとdepの中身追っかけてみました。

まずはdep initを実行するとinit.gofunc Runが動きます。 func Runの中でmanifest.jsonに書き込む文字列を用意している部分が以下です。

for pr, v := range pd.ondisk {
    // That we have to chop off these path prefixes is a symptom of
    // a problem in gps itself
    pkgs := make([]string, 0, len(pd.dependencies[pr]))
    prslash := string(pr) + "/"
    for _, pkg := range pd.dependencies[pr] {
        if pkg == string(pr) {
            pkgs = append(pkgs, ".")
        } else {
            pkgs = append(pkgs, strings.TrimPrefix(pkg, prslash))
        }
    }

    l.P = append(l.P, gps.NewLockedProject(
        gps.ProjectIdentifier{ProjectRoot: pr}, v, pkgs),
    )
}

pd.ondisk$GOPATH/srcに存在しているパッケージの一覧なのですが、このpd.ondiskが空になっているがためにmanifest.jsonが空になっていました。

つまり、プログラム上で使っているパッケージが$GOPATH/srcに無いと、manifest.jsonは空になるということです。

ふぅむ・・・ここまで調べて「んじゃmanifest.jsonって一体何なんだろうか」って疑問が浮かびました。

ちょっとこの辺りはまた後日調べてみようと思います🙇