diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index 5524f86044..4a28a2a2cb 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -2585,7 +2585,12 @@ func (p *Package) setBuildInfo(ctx context.Context, autoVCS bool) { vers := revInfo.Version if vers != "" { if st.Uncommitted { - vers += "+dirty" + // SemVer build metadata is dot-separated https://semver.org/#spec-item-10 + if strings.HasSuffix(vers, "+incompatible") { + vers += ".dirty" + } else { + vers += "+dirty" + } } info.Main.Version = vers } diff --git a/src/cmd/go/testdata/script/build_version_stamping_git.txt b/src/cmd/go/testdata/script/build_version_stamping_git.txt index db804b3847..e9aa824474 100644 --- a/src/cmd/go/testdata/script/build_version_stamping_git.txt +++ b/src/cmd/go/testdata/script/build_version_stamping_git.txt @@ -108,6 +108,19 @@ go version -m example$GOEXE stdout '\s+mod\s+example\s+v1.0.3-0.20220719150703-2e239bf29c13\s+' rm example$GOEXE +# Create +incompatible module +exec git checkout v1.0.4 +exec git rm go.mod +exec git commit -m 'commit 6' +exec git tag v2.0.0 +exec git checkout HEAD^ go.mod +# And make the tree +dirty +mv README4 README5 +go build +go version -m example$GOEXE +stdout '\s+mod\s+example\s+v2.0.0\+incompatible.dirty\s+' +rm example$GOEXE + -- $WORK/repo/go.mod -- module example