]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modcmd: loosen path validation in "go mod edit"
authorBryan C. Mills <bcmills@google.com>
Fri, 6 Dec 2019 20:51:34 +0000 (15:51 -0500)
committerBryan C. Mills <bcmills@google.com>
Fri, 6 Dec 2019 23:45:07 +0000 (23:45 +0000)
Replaced modules require only valid import paths, not full
module paths that can be fetched with 'go get'.

The 'go' command does not in general reject manually-edited go.mod
files with these paths, so 'go mod edit' should not reject them
either.

Fixes #30513

Change-Id: I4f1a5c65937f91d41478f8d218c8018e0c70f320
Reviewed-on: https://go-review.googlesource.com/c/go/+/210343
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/internal/modcmd/edit.go
src/cmd/go/testdata/script/mod_edit.txt

index ae8966bab1a8b92e41cd6332fcc72714f179f6bb..2cb45667963adb8bdbafb295d092544cba3f8180 100644 (file)
@@ -164,7 +164,7 @@ func runEdit(cmd *base.Command, args []string) {
        }
 
        if *editModule != "" {
-               if err := module.CheckPath(*editModule); err != nil {
+               if err := module.CheckImportPath(*editModule); err != nil {
                        base.Fatalf("go mod: invalid -module: %v", err)
                }
        }
@@ -242,7 +242,7 @@ func parsePathVersion(flag, arg string) (path, version string) {
                base.Fatalf("go mod: -%s=%s: need path@version", flag, arg)
        }
        path, version = strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
-       if err := module.CheckPath(path); err != nil {
+       if err := module.CheckImportPath(path); err != nil {
                base.Fatalf("go mod: -%s=%s: invalid path: %v", flag, arg, err)
        }
 
@@ -264,7 +264,7 @@ func parsePath(flag, arg string) (path string) {
                base.Fatalf("go mod: -%s=%s: need just path, not path@version", flag, arg)
        }
        path = arg
-       if err := module.CheckPath(path); err != nil {
+       if err := module.CheckImportPath(path); err != nil {
                base.Fatalf("go mod: -%s=%s: invalid path: %v", flag, arg, err)
        }
        return path
@@ -278,7 +278,7 @@ func parsePathVersionOptional(adj, arg string, allowDirPath bool) (path, version
        } else {
                path, version = strings.TrimSpace(arg[:i]), strings.TrimSpace(arg[i+1:])
        }
-       if err := module.CheckPath(path); err != nil {
+       if err := module.CheckImportPath(path); err != nil {
                if !allowDirPath || !modfile.IsDirectoryPath(path) {
                        return path, version, fmt.Errorf("invalid %s path: %v", adj, err)
                }
index 42007b13d09f95f63cb0ced068648be4a80afd56..898d8524acfaff9d1b867763bfd221e4d15097bc 100644 (file)
@@ -52,6 +52,12 @@ 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
 
@@ -159,6 +165,14 @@ 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