cmd/mod/edit: disallow relative tool paths

Allowing relative paths in `go.mod` introduced an inconsistency as we do
not allow relative package paths anywhere else.

For golang/go#48429

Change-Id: I5ef88aec4fe35f7e94a0cf6288e94099f3ca7a0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/614555
Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Conrad Irwin 2024-09-20 00:12:48 -06:00 committed by Michael Matloob
parent 402dc98759
commit 097b7162ad
2 changed files with 2 additions and 34 deletions

View File

@ -339,25 +339,6 @@ func parsePath(flag, arg string) (path string) {
return path return path
} }
// parsePath parses -flag=arg expecting arg to be path to a tool (allows ./)
func parseToolPath(flag, arg string) (path string) {
if strings.Contains(arg, "@") {
base.Fatalf("go: -%s=%s: need just path, not path@version", flag, arg)
}
if arg == "." {
return arg
}
toCheck := arg
if strings.HasPrefix(arg, "./") {
toCheck = arg[2:]
}
if err := module.CheckImportPath(toCheck); err != nil {
base.Fatalf("go: -%s=%s: invalid path: %v", flag, arg, err)
}
return arg
}
// parsePathVersionOptional parses path[@version], using adj to // parsePathVersionOptional parses path[@version], using adj to
// describe any errors. // describe any errors.
func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version string, err error) { func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version string, err error) {
@ -547,7 +528,7 @@ func flagDropRetract(arg string) {
// flagTool implements the -tool flag. // flagTool implements the -tool flag.
func flagTool(arg string) { func flagTool(arg string) {
path := parseToolPath("tool", arg) path := parsePath("tool", arg)
edits = append(edits, func(f *modfile.File) { edits = append(edits, func(f *modfile.File) {
if err := f.AddTool(path); err != nil { if err := f.AddTool(path); err != nil {
base.Fatalf("go: -tool=%s: %v", arg, err) base.Fatalf("go: -tool=%s: %v", arg, err)
@ -557,7 +538,7 @@ func flagTool(arg string) {
// flagDropTool implements the -droptool flag. // flagDropTool implements the -droptool flag.
func flagDropTool(arg string) { func flagDropTool(arg string) {
path := parseToolPath("droptool", arg) path := parsePath("droptool", arg)
edits = append(edits, func(f *modfile.File) { edits = append(edits, func(f *modfile.File) {
if err := f.DropTool(path); err != nil { if err := f.DropTool(path); err != nil {
base.Fatalf("go: -droptool=%s: %v", arg, err) base.Fatalf("go: -droptool=%s: %v", arg, err)

View File

@ -102,10 +102,6 @@ cd $WORK/h
cp go.mod.start go.mod cp go.mod.start go.mod
go mod edit -tool example.com/tool go mod edit -tool example.com/tool
cmpenv go.mod go.mod.edit cmpenv go.mod go.mod.edit
go mod edit -tool ./local
cmpenv go.mod go.mod.edit2
go mod edit -droptool ./local
cmpenv go.mod go.mod.edit
go mod edit -droptool example.com/tool2 go mod edit -droptool example.com/tool2
cmpenv go.mod go.mod.edit cmpenv go.mod go.mod.edit
go mod edit -droptool example.com/tool go mod edit -droptool example.com/tool
@ -386,12 +382,3 @@ module g
go 1.24 go 1.24
tool example.com/tool tool example.com/tool
-- $WORK/h/go.mod.edit2 --
module g
go 1.24
tool (
./local
example.com/tool
)