| # Test overlays that affect go.mod files |
| |
| # The go.mod file can exist only in the overlay. |
| cd $WORK/gopath/src/no-go-mod |
| go list -overlay overlay.json . |
| stdout example.com/simple |
| |
| # Check content of overlaid go.mod is used. |
| cd $WORK/gopath/src/overlay-go-mod |
| go list -overlay overlay.json . |
| stdout use.this/module/name |
| |
| # Check content of overlaid go.mod in a replacement module is used. |
| # The go.mod in the replacement module is missing a requirement |
| # that the overlay has, so it will fail to list without the overlay. |
| cd $WORK/gopath/src/overlay-replaced-go-mod |
| ! go list -deps . |
| go list -deps -overlay overlay.json . |
| |
| # Overlaid go.mod is not rewritten by 'go get'. |
| cd $WORK/gopath/src/get-doesnt-add-dep |
| cp $WORK/overlay/get_doesnt_add_dep_go_mod $WORK/want_go_mod |
| ! go get -d -overlay overlay.json . |
| stderr '^go: updates to go.mod needed, but go.mod is part of the overlay specified with -overlay$' |
| cmp $WORK/overlay/get_doesnt_add_dep_go_mod $WORK/want_go_mod |
| |
| # Content of overlaid go.sum is used. |
| # The go.sum in the module directory has garbage values for its |
| # hashes, but the overlaid file has the correct values. If |
| # the correct go.sum is used with the overlay, 'go get .' should |
| # not report a security error. |
| cd $WORK/gopath/src/overlay-sum-used |
| ! go get -d . |
| stderr 'SECURITY ERROR' |
| ! go mod verify |
| stderr 'SECURITY ERROR' |
| go get -d -overlay overlay.json . |
| go mod verify -overlay overlay.json |
| # Overlaid go.sum is not rewritten. |
| # Copy an incomplete file to the overlay file, and expect an error |
| # attempting to update the file |
| cp incomplete-sum-file $WORK/overlay/overlay-sum-used-correct-sums |
| ! go get -d -overlay overlay.json . |
| stderr '^go: updates to go.sum needed, but go.sum is part of the overlay specified with -overlay$' |
| cmp incomplete-sum-file $WORK/overlay/overlay-sum-used-correct-sums |
| ! go mod tidy -overlay overlay.json |
| stderr '^go: updates to go.sum needed, but go.sum is part of the overlay specified with -overlay$' |
| cmp incomplete-sum-file $WORK/overlay/overlay-sum-used-correct-sums |
| |
| # -overlay works with -modfile. |
| # There's an empty go.mod file in the directory, and the file alternate.mod is |
| # overlaid to the true go.mod file, so the -modfile flag and the overlay |
| # mechanism need to work together to determine the name of the module. |
| cd $WORK/gopath/src/overlay-and-dash-modfile |
| go list -modfile=alternate.mod -overlay overlay.json . |
| stdout 'found.the/module' |
| # Even with -modfile, overlaid files can't be opened for write. |
| ! go get -modfile=alternate.mod -overlay overlay.json -d rsc.io/quote |
| stderr '^go: updates to go.mod needed, but go.mod is part of the overlay specified with -overlay$' |
| |
| # Carving out a module by adding an overlaid go.mod file |
| cd $WORK/gopath/src/carve |
| go list ./... # without an overlay, hasmod is carved out and nomod isn't |
| stdout carve/nomod |
| ! stdout carve/hasmod |
| go list -overlay overlay_carve_module.json ./... # The overlay carves out nomod, leaving nothing |
| ! stdout . |
| stderr 'matched no packages' |
| go list -overlay overlay_uncarve_module.json ./... # The overlay uncarves out hasmod |
| stdout carve/nomod |
| stdout carve/hasmod |
| |
| # Carving out a module by adding an overlaid go.mod file and using |
| # -modfile to write to that file. |
| cd $WORK/gopath/src/carve2/nomod |
| go list -overlay overlay.json all |
| ! stdout ^carve2$ |
| stdout ^carve2/nomod$ |
| # Editing go.mod file fails because overlay is read only |
| ! go get -overlay overlay.json -d rsc.io/quote |
| stderr '^go: updates to go.mod needed, but go.mod is part of the overlay specified with -overlay$' |
| ! grep rsc.io/quote $WORK/overlay/carve2-nomod-go.mod |
| # Editing go.mod file succeeds because we use -modfile to redirect to same file |
| go get -overlay overlay.json -modfile $WORK/overlay/carve2-nomod-go.mod -d rsc.io/quote |
| grep rsc.io/quote $WORK/overlay/carve2-nomod-go.mod |
| |
| -- no-go-mod/file.go -- |
| package simple |
| -- no-go-mod/overlay.json -- |
| { |
| "Replace": { |
| "go.mod": "../../../overlay/simple_go_mod" |
| } |
| } |
| -- $WORK/overlay/simple_go_mod -- |
| module example.com/simple |
| -- overlay-go-mod/file.go -- |
| package name |
| -- overlay-go-mod/go.mod -- |
| module dont.use/this/module/name |
| -- overlay-go-mod/overlay.json -- |
| { |
| "Replace": { |
| "go.mod": "../../../overlay/use_this_go_mod" |
| } |
| } |
| -- $WORK/overlay/use_this_go_mod -- |
| module use.this/module/name |
| -- overlay-replaced-go-mod/go.mod -- |
| module m |
| |
| go 1.15 |
| |
| require replaced/mod v1.0.0 |
| replace replaced/mod v1.0.0 => ../replaced-mod |
| replace dep/mod v1.0.0 => ../dep-mod |
| -- overlay-replaced-go-mod/source.go -- |
| package m |
| |
| import "replaced/mod/foo" |
| |
| func main() { |
| foo.f() |
| } |
| -- overlay-replaced-go-mod/overlay.json -- |
| { |
| "Replace": { |
| "../replaced-mod/go.mod": "../../../overlay/replacement_module_go_mod" |
| } |
| } |
| -- replaced-mod/go.mod -- |
| module replaced/mod |
| -- replaced-mod/foo/foo.go -- |
| package foo |
| |
| import "dep/mod/foo" |
| |
| func f() { foo.g() } |
| -- dep-mod/go.mod -- |
| invalid |
| -- dep-mod/foo/foo.go -- |
| package foo |
| |
| func g() { fmt.Println("hello") } |
| -- $WORK/overlay/replacement_module_go_mod -- |
| module replaced/mod |
| |
| require dep/mod v1.0.0 |
| |
| -- get-doesnt-add-dep/overlay.json -- |
| { |
| "Replace": { |
| "go.mod": "../../../overlay/get_doesnt_add_dep_go_mod" |
| } |
| } |
| -- get-doesnt-add-dep/p.go -- |
| package p |
| |
| import "dependency/mod" |
| |
| func f() { mod.G() } |
| -- get-doesnt-add-dep-dependency/go.mod -- |
| module dependency/mod |
| -- get-doesnt-add-dep-dependency/mod.go -- |
| package mod |
| |
| func G() {} |
| -- $WORK/overlay/get_doesnt_add_dep_go_mod -- |
| module get.doesnt/add/dep |
| |
| replace dependency/mod v1.0.0 => ../get-doesnt-add-dep-dependency |
| -- overlay-sum-used/go.mod -- |
| module overlay.sum/used |
| |
| require rsc.io/quote v1.5.0 |
| -- overlay-sum-used/p.go -- |
| package p |
| |
| import "rsc.io/quote" |
| |
| func f() string { |
| return quote.Hello() |
| } |
| -- overlay-sum-used/incomplete-sum-file -- |
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:pvCbr/wm8HzDD3fVywevekufpn6tCGPY3spdHeZJEsw= |
| rsc.io/quote v1.5.0 h1:6fJa6E+wGadANKkUMlZ0DhXFpoKlslOQDCo259XtdIE= |
| rsc.io/sampler v1.3.0 h1:HLGR/BgEtI3r0uymSP/nl2uPLsUnNJX8toRyhfpBTII= |
| -- overlay-sum-used/overlay.json -- |
| { |
| "Replace": { |
| "go.sum": "../../../overlay/overlay-sum-used-correct-sums" |
| } |
| } |
| -- overlay-sum-used/go.sum -- |
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:garbage+hash |
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:garbage+hash |
| rsc.io/quote v1.5.0 h1:garbage+hash |
| rsc.io/quote v1.5.0/go.mod h1:garbage+hash |
| rsc.io/sampler v1.3.0 h1:garbage+hash |
| rsc.io/sampler v1.3.0/go.mod h1:garbage+hash |
| -- $WORK/overlay/overlay-sum-used-correct-sums -- |
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:pvCbr/wm8HzDD3fVywevekufpn6tCGPY3spdHeZJEsw= |
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
| rsc.io/quote v1.5.0 h1:6fJa6E+wGadANKkUMlZ0DhXFpoKlslOQDCo259XtdIE= |
| rsc.io/quote v1.5.0/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= |
| rsc.io/sampler v1.3.0 h1:HLGR/BgEtI3r0uymSP/nl2uPLsUnNJX8toRyhfpBTII= |
| rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= |
| -- overlay-and-dash-modfile/p.go -- |
| package module |
| -- overlay-and-dash-modfile/go.mod -- |
| -- overlay-and-dash-modfile/overlay.json -- |
| { |
| "Replace": { |
| "alternate.mod": "../../../overlay/overlay-and-dash-modfile-alternate-mod" |
| } |
| } |
| -- $WORK/overlay/overlay-and-dash-modfile-alternate-mod -- |
| module found.the/module |
| -- carve/go.mod -- |
| module carve |
| -- carve/overlay_carve_module.json -- |
| { |
| "Replace": { |
| "nomod/go.mod": "../../../overlay/carve-nomod-go-mod" |
| } |
| } |
| -- carve/overlay_uncarve_module.json -- |
| { |
| "Replace": { |
| "hasmod/go.mod": "" |
| } |
| } |
| -- carve/hasmod/a.go -- |
| package hasmod |
| -- carve/hasmod/go.mod -- |
| module carve/hasmod |
| -- carve/nomod/b.go -- |
| package nomod |
| -- $WORK/overlay/carve-nomod-go-mod -- |
| module carve/nomod |
| -- carve2/go.mod -- |
| module carve2 |
| -- carve2/p.go -- |
| package p |
| -- carve2/nomod/overlay.json -- |
| { |
| "Replace": { |
| "go.mod": "../../../../overlay/carve2-nomod-go.mod" |
| } |
| } |
| -- carve2/nomod/b.go -- |
| package nomod |
| -- $WORK/overlay/carve2-nomod-go.mod -- |
| module carve2/nomod |