diff options
author | David Symonds <dsymonds@golang.org> | 2018-05-17 09:39:21 +1000 |
---|---|---|
committer | David Symonds <dsymonds@golang.org> | 2018-06-07 21:50:50 +0000 |
commit | 17f54231e86591174b964c5ba93f9d578e2bfa01 (patch) | |
tree | b68113be0f32e021390c9cd7700cdafc5cc1abd6 /src/cmd/go/internal/get/get.go | |
parent | 9417ff55c35e0a1623af2a05c6e714c660ad6b4f (diff) | |
download | go-17f54231e86591174b964c5ba93f9d578e2bfa01.tar.gz go-17f54231e86591174b964c5ba93f9d578e2bfa01.zip |
cmd/go: don't refuse to update a present package only because of its source configuration
If a package is checked out in the right place, but uses, for instance,
an unusual Git remote configuration, don't refuse to update just because
cmd/go can't parse it. In most cases, `git pull -ff-only` (or the
equivalent in other VCSes) works just fine.
Updates #25432.
Change-Id: I1952a0e6e03f185f34029b186e1756c9549689e1
Reviewed-on: https://go-review.googlesource.com/113456
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src/cmd/go/internal/get/get.go')
-rw-r--r-- | src/cmd/go/internal/get/get.go | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/cmd/go/internal/get/get.go b/src/cmd/go/internal/get/get.go index 5bfeac387c..ffa15c5ba4 100644 --- a/src/cmd/go/internal/get/get.go +++ b/src/cmd/go/internal/get/get.go @@ -369,6 +369,7 @@ func downloadPackage(p *load.Package) error { vcs *vcsCmd repo, rootPath string err error + blindRepo bool // set if the repo has unusual configuration ) security := web.Secure @@ -389,10 +390,12 @@ func downloadPackage(p *load.Package) error { dir := filepath.Join(p.Internal.Build.SrcRoot, filepath.FromSlash(rootPath)) remote, err := vcs.remoteRepo(vcs, dir) if err != nil { - return err + // Proceed anyway. The package is present; we likely just don't understand + // the repo configuration (e.g. unusual remote protocol). + blindRepo = true } repo = remote - if !*getF { + if !*getF && err == nil { if rr, err := repoRootForImportPath(p.ImportPath, security); err == nil { repo := rr.repo if rr.vcs.resolveRepo != nil { @@ -416,7 +419,7 @@ func downloadPackage(p *load.Package) error { } vcs, repo, rootPath = rr.vcs, rr.repo, rr.root } - if !vcs.isSecure(repo) && !*getInsecure { + if !blindRepo && !vcs.isSecure(repo) && !*getInsecure { return fmt.Errorf("cannot download, %v uses insecure protocol", repo) } |