aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/mod_replace_import.txt
blob: 2add31f71c10d43f828c953cfbd7ebe9d29bffb3 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
env GO111MODULE=on

# 'go list' should not add requirements even if they can be resolved locally.
cp go.mod go.mod.orig
! go list all
cmp go.mod go.mod.orig

# 'go list' should resolve imports using replacements.
go get -d
go list all
stdout 'example.com/a/b$'
stdout 'example.com/x/v3$'
stdout 'example.com/y/z/w$'
stdout 'example.com/v'

# The selected modules should prefer longer paths,
# but should try shorter paths if needed.
# Modules with a major-version suffix should have a corresponding pseudo-version.
# Replacements that specify a version should use the latest such version.
go list -m all
stdout 'example.com/a/b v0.0.0-00010101000000-000000000000 => ./b'
stdout 'example.com/y v0.0.0-00010101000000-000000000000 => ./y'
stdout 'example.com/x/v3 v3.0.0-00010101000000-000000000000 => ./v3'
stdout 'example.com/v v1.12.0 => ./v12'

# The go command should print an informative error when the matched
# module does not contain a package.
# TODO(#26909): Ideally these errors should include line numbers for the imports within the main module.
cd fail
! go mod tidy
stderr '^localhost.fail imports\n\tw: module w@latest found \(v0.0.0-00010101000000-000000000000, replaced by ../w\), but does not contain package w$'
stderr '^localhost.fail imports\n\tnonexist: nonexist@v0.1.0: replacement directory ../nonexist does not exist$'

-- go.mod --
module example.com/m

replace (
	example.com/a => ./a
	example.com/a/b => ./b
)

replace (
	example.com/x => ./x
	example.com/x/v3 => ./v3
)

replace (
	example.com/y/z/w => ./w
	example.com/y => ./y
)

replace (
	example.com/v v1.11.0 => ./v11
	example.com/v v1.12.0 => ./v12
	example.com/v => ./v
)

replace (
	example.com/i v2.0.0+incompatible => ./i2
)

-- m.go --
package main
import (
	_ "example.com/a/b"
	_ "example.com/x/v3"
	_ "example.com/y/z/w"
	_ "example.com/v"
	_ "example.com/i"
)
func main() {}

-- a/go.mod --
module a.localhost
-- a/a.go --
package a
-- a/b/b.go--
package b

-- b/go.mod --
module a.localhost/b
-- b/b.go --
package b

-- x/go.mod --
module x.localhost
-- x/x.go --
package x
-- x/v3.go --
package v3
import _ "x.localhost/v3"

-- v3/go.mod --
module x.localhost/v3
-- v3/x.go --
package x

-- w/go.mod --
module w.localhost
-- w/skip/skip.go --
// Package skip is nested below nonexistent package w.
package skip

-- y/go.mod --
module y.localhost
-- y/z/w/w.go --
package w

-- v12/go.mod --
module v.localhost
-- v12/v.go --
package v

-- v11/go.mod --
module v.localhost
-- v11/v.go --
package v

-- v/go.mod --
module v.localhost
-- v/v.go --
package v

-- i2/go.mod --
module example.com/i
-- i2/i.go --
package i

-- fail/m.go --
package main

import (
	_ "w"
	_ "nonexist"
)

func main() {}

-- fail/go.mod --
module localhost.fail

replace w => ../w

replace nonexist v0.1.0 => ../nonexist