Sometimes you get a cryptic error message when you “go build” like:
go: firstname.lastname@example.org: reading github.com/private-repo/lib-golang_thing-common/go.mod at revision v1.2.2: unknown revision v1.2.2
And there just isn’t the -v or -vv or -vvv verbose debug option you need.
Time to goto the source.
First step, grep for the string “unknown revision”.
go-src/src $ grep -R "unknown revision" .
./cmd/go/internal/modfetch/codehost/codehost.go: return "unknown revision " + e.Rev
Next step, lets change that error message slighty to prove I’ve found the right place. I added an explanation point to the string:
"unknown revision! " + e.Rev
And pure joy after it compiles go, and my go build now shows me this error WITH the new explanation point. That means I’m in. I have control now of what it will print as I trace further up the source from this line.
I keep adding fmt.Println(“got here!”) all over the place. I can now create my own -vvv verbose mode with anything I want.
I find myself deep inside some func called “loadRefs” with this nice hint:
rerr.HelpText = "If this is a private repository, see https://golang.org/doc/faq#git_https for additional information."
Is my thing a private repository? Why yes it is. Turns out I was missing:
[url "ssh://email@example.com/"] insteadOf = https://github.com/
This blog post brought to you by programmers that say, “I’m stuck.” You’re not stuck. You just need to add printlns!