env GO111MODULE=on # Test that go mod edits and related mod flags work. # Also test that they can use a dummy name that isn't resolvable. golang.org/issue/24100 # go mod init ! go mod init stderr 'cannot determine module path' ! exists go.mod go mod init x.x/y/z stderr 'creating new go.mod: module x.x/y/z' cmpenv go.mod $WORK/go.mod.init ! go mod init cmpenv go.mod $WORK/go.mod.init # go mod edits go mod edit -droprequire=x.1 -require=x.1@v1.0.0 -require=x.2@v1.1.0 -droprequire=x.2 -exclude='x.1 @ v1.2.0' -exclude=x.1@v1.2.1 -replace=x.1@v1.3.0=y.1@v1.4.0 -replace='x.1@v1.4.0 = ../z' cmpenv go.mod $WORK/go.mod.edit1 go mod edit -droprequire=x.1 -dropexclude=x.1@v1.2.1 -dropreplace=x.1@v1.3.0 -require=x.3@v1.99.0 cmpenv go.mod $WORK/go.mod.edit2 # go mod edit -json go mod edit -json cmpenv stdout $WORK/go.mod.json # go mod edit -json (empty mod file) go mod edit -json $WORK/go.mod.empty cmp stdout $WORK/go.mod.empty.json # go mod edit -replace go mod edit -replace=x.1@v1.3.0=y.1/v2@v2.3.5 -replace=x.1@v1.4.0=y.1/v2@v2.3.5 cmpenv go.mod $WORK/go.mod.edit3 go mod edit -replace=x.1=y.1/v2@v2.3.6 cmpenv go.mod $WORK/go.mod.edit4 go mod edit -dropreplace=x.1 cmpenv go.mod $WORK/go.mod.edit5 # go mod edit -fmt cp $WORK/go.mod.badfmt go.mod go mod edit -fmt -print # -print should avoid writing file cmpenv stdout $WORK/go.mod.edit6 cmp go.mod $WORK/go.mod.badfmt go mod edit -fmt # without -print, should write file (and nothing to stdout) ! stdout . cmpenv go.mod $WORK/go.mod.edit6 # go mod edit -module cd $WORK/m go mod init a.a/b/c go mod edit -module x.x/y/z cmpenv go.mod go.mod.edit # golang.org/issue/30513: don't require go-gettable module paths. cd $WORK/local go mod init foo go mod edit -module local-only -require=other-local@v1.0.0 -replace other-local@v1.0.0=./other cmpenv go.mod go.mod.edit -- x.go -- package x -- w/w.go -- package w -- $WORK/go.mod.init -- module x.x/y/z go $goversion -- $WORK/go.mod.edit1 -- module x.x/y/z go $goversion require x.1 v1.0.0 exclude ( x.1 v1.2.0 x.1 v1.2.1 ) replace ( x.1 v1.3.0 => y.1 v1.4.0 x.1 v1.4.0 => ../z ) -- $WORK/go.mod.edit2 -- module x.x/y/z go $goversion exclude x.1 v1.2.0 replace x.1 v1.4.0 => ../z require x.3 v1.99.0 -- $WORK/go.mod.json -- { "Module": { "Path": "x.x/y/z" }, "Go": "$goversion", "Require": [ { "Path": "x.3", "Version": "v1.99.0" } ], "Exclude": [ { "Path": "x.1", "Version": "v1.2.0" } ], "Replace": [ { "Old": { "Path": "x.1", "Version": "v1.4.0" }, "New": { "Path": "../z" } } ] } -- $WORK/go.mod.edit3 -- module x.x/y/z go $goversion exclude x.1 v1.2.0 replace ( x.1 v1.3.0 => y.1/v2 v2.3.5 x.1 v1.4.0 => y.1/v2 v2.3.5 ) require x.3 v1.99.0 -- $WORK/go.mod.edit4 -- module x.x/y/z go $goversion exclude x.1 v1.2.0 replace x.1 => y.1/v2 v2.3.6 require x.3 v1.99.0 -- $WORK/go.mod.edit5 -- module x.x/y/z go $goversion exclude x.1 v1.2.0 require x.3 v1.99.0 -- $WORK/go.mod.edit6 -- module x.x/y/z go 1.10 exclude x.1 v1.2.0 replace x.1 => y.1/v2 v2.3.6 require x.3 v1.99.0 -- $WORK/local/go.mod.edit -- module local-only go $goversion require other-local v1.0.0 replace other-local v1.0.0 => ./other -- $WORK/go.mod.badfmt -- module x.x/y/z go 1.10 exclude x.1 v1.2.0 replace x.1 => y.1/v2 v2.3.6 require x.3 v1.99.0 -- $WORK/m/go.mod.edit -- module x.x/y/z go $goversion -- $WORK/go.mod.empty -- -- $WORK/go.mod.empty.json -- { "Module": { "Path": "" }, "Require": null, "Exclude": null, "Replace": null }