aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/mod_go_version.txt
blob: 7bee95b192427614af9a217a75462f609acaa46d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Test support for declaring needed Go version in module.

env GO111MODULE=on

go list
go build
go build sub.1
go build subver.1
! stderr 'module requires'
! go build badsub.1
stderr '^note: module requires Go 1.21$'

go build versioned.1
go mod edit -require versioned.1@v1.1.0
! go build versioned.1
stderr '^note: module requires Go 1.21$'

[short] stop

# The message should be printed even if the compiler emits no output.
go build -o $WORK/nooutput.exe nooutput.go
! go build -toolexec=$WORK/nooutput.exe versioned.1
stderr '^# versioned.1\nnote: module requires Go 1.21$'

-- go.mod --
module m
go 1.21
require (
	sub.1 v1.0.0
	subver.1 v1.0.0
	badsub.1 v1.0.0
	versioned.1 v1.0.0
)
replace (
	sub.1 => ./sub
	subver.1 => ./subver
	badsub.1 => ./badsub
	versioned.1 v1.0.0 => ./versioned1
	versioned.1 v1.1.0 => ./versioned2
)

-- x.go --
package x

-- sub/go.mod --
module m
go 1.11

-- sub/x.go --
package x

-- subver/go.mod --
module m
go 1.21

-- subver/x.go --
package x

-- badsub/go.mod --
module m
go 1.21

-- badsub/x.go --
package x
invalid syntax

-- versioned1/go.mod --
module versioned
go 1.0

-- versioned1/x.go --
package x

-- versioned2/go.mod --
module versioned
go 1.21

-- versioned2/x.go --
package x
invalid syntax

-- nooutput.go --
// +build ignore

package main

import (
	"bytes"
	"os"
	"os/exec"
	"strings"
)

func main() {
	stderr := new(bytes.Buffer)
	stdout := new(bytes.Buffer)

	cmd := exec.Command(os.Args[1], os.Args[2:]...)
	cmd.Stderr = stderr
	cmd.Stdout = stdout

	err := cmd.Run()
	if strings.HasPrefix(os.Args[2], "-V") {
		os.Stderr.Write(stderr.Bytes())
		os.Stdout.Write(stdout.Bytes())
	}
	if err != nil {
		os.Exit(1)
	}
}