diff --git a/p2p/protocol/identify/id.go b/p2p/protocol/identify/id.go index 70ff28b638..15e778e4ad 100644 --- a/p2p/protocol/identify/id.go +++ b/p2p/protocol/identify/id.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "io" - "runtime/debug" "sync" "time" @@ -55,19 +54,6 @@ var ( defaultUserAgent = "github.com/libp2p/go-libp2p" ) -func init() { - bi, ok := debug.ReadBuildInfo() - if !ok { - return - } - version := bi.Main.Version - if version == "(devel)" { - defaultUserAgent = bi.Main.Path - } else { - defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) - } -} - type addPeerHandlerReq struct { rp peer.ID resp chan *peerHandler diff --git a/p2p/protocol/identify/id_go117.go b/p2p/protocol/identify/id_go117.go new file mode 100644 index 0000000000..42d6ff5b64 --- /dev/null +++ b/p2p/protocol/identify/id_go117.go @@ -0,0 +1,23 @@ +//go:build !go1.18 +// +build !go1.18 + +package identify + +import ( + "fmt" + "runtime/debug" +) + +func init() { + bi, ok := debug.ReadBuildInfo() + // ok will only be true if this is built as a dependency of another module + if !ok { + return + } + version := bi.Main.Version + if version == "(devel)" { + defaultUserAgent = bi.Main.Path + } else { + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) + } +} diff --git a/p2p/protocol/identify/id_go118.go b/p2p/protocol/identify/id_go118.go new file mode 100644 index 0000000000..e4f4779402 --- /dev/null +++ b/p2p/protocol/identify/id_go118.go @@ -0,0 +1,46 @@ +//go:build go1.18 +// +build go1.18 + +package identify + +import ( + "fmt" + "runtime/debug" +) + +func init() { + bi, ok := debug.ReadBuildInfo() + if !ok { + return + } + version := bi.Main.Version + // version will only be non-empty if built as a dependency of another module + if version == "" { + return + } + + if version != "(devel)" { + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) + return + } + + var revision string + var dirty bool + for _, bs := range bi.Settings { + switch bs.Key { + case "vcs.revision": + revision = bs.Value + if len(revision) > 9 { + revision = revision[:9] + } + case "vcs.modified": + if bs.Value == "true" { + dirty = true + } + } + } + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, revision) + if dirty { + defaultUserAgent += "-dirty" + } +}