1. 01 Aug, 2018 5 commits
    • Russ Cox's avatar
      cmd/go: replace -getmode with -mod, $GOPROXY · 30a84b38
      Russ Cox authored
      The old -getmode flag had two settings:
      -getmode=local meant don't download from the network.
      -getmode=vendor meant only use the vendor directory.
      
      The new -mod flag has two settings:
      -mod=readonly means refuse to automatically update go.mod (mainly for CI testing).
      -mod=vendor means only use the vendor directory.
      
      The old GOPROXY variable had two settings:
      a proxy URL or else the empty string (direct connect).
      
      The new GOPROXY variable has three settings:
      a proxy URL, the string "off" (no network use allowed),
      or else the empty string or the explicit string "direct" (direct connection).
      We anticipate allow a comma-separated sequence in a future release,
      so commas are disallowed entirely right now.
      
      Fixes #24666.
      Fixes #26586.
      Fixes #26370.
      Fixes #26361.
      
      Change-Id: If2601a16b09f04800f666938c071fc053b4c3f9c
      Reviewed-on: https://go-review.googlesource.com/126696
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      30a84b38
    • Russ Cox's avatar
      cmd/go: add $GOFLAGS environment variable · c1a4fc3b
      Russ Cox authored
      People sometimes want to turn on a particular go command flag by default.
      In Go 1.11 we have at least two different cases where users may need this.
      
      1. Linking can be noticeably slower on underpowered systems
      due to DWARF, and users may want to set -ldflags=-w by default.
      
      2. For modules, some users or CI systems will want vendoring always,
      so they want -getmode=vendor (soon to be -mod=vendor) by default.
      
      This CL generalizes the problem to “set default flags for the go command.”
      
      $GOFLAGS can be a space-separated list of flag settings, but each
      space-separated entry in the list must be a standalone flag.
      That is, you must do 'GOFLAGS=-ldflags=-w' not 'GOFLAGS=-ldflags -w'.
      The latter would mean to pass -w to go commands that understand it
      (if any do; if not, it's an error to mention it).
      
      For #26074.
      For #26318.
      Fixes #26585.
      
      Change-Id: I428f79c1fbfb9e41e54d199c68746405aed2319c
      Reviewed-on: https://go-review.googlesource.com/126656
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarRob Pike <r@golang.org>
      c1a4fc3b
    • Russ Cox's avatar
      cmd/go: change list -compiled to populate new CompiledGoFiles list · 53859e57
      Russ Cox authored
      CL 108156 added -cgo during the Go 1.11 cycle.
      To avoid adding a new field to Package, it redefined the
      meaning of the CgoFiles list to be the cgo output instead
      of the cgo input.
      
      This was awkward in the go command itself, since the meaning
      of the list changed midway through the build.
      
      But, worse, it is awkward to users of go list.
      When gathering information about a tree of packages,
      we may want the names of both the cgo inputs and the cgo outputs
      (golang.org/x/tools/go/packages does, it turns out),
      or when combined with -deps (CL 107776),
      we may only care about one list or the other depending
      on whether the package was requested explicitly or is
      being returned as a dependency.
      
      Also, it's not general enough. SWIGFiles turn into cgo files
      and then end up in the list too. And maybe there will be others
      in the future. What clients really want is the list of files that
      are presented to the go compiler, so that they can parse
      and type-check them as if they were the compiler instead.
      
      Eliminate all this awkwardness by dropping -cgo and adding
      a new -compiled that populates a new CompiledGoFiles list.
      
      Change-Id: I5f152da17cfb2692eedde61721d01ec13067c57d
      Reviewed-on: https://go-review.googlesource.com/126695
      Run-TryBot: Russ Cox <rsc@golang.org>
      Reviewed-by: 's avatarMichael Matloob <matloob@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      53859e57
    • Russ Cox's avatar
      cmd/go: split go mod into multiple subcommands · 6121987a
      Russ Cox authored
      The current "go mod" command does too many things.
      The design is unclear.
      
      It looks like "everything you might want to do with modules"
      which causes people to think all module operations go through
      "go mod", which is the opposite of the seamless integration we're
      going for. In particular too many people think "go mod -require"
      and "go get" are the same.
      
      It does make sense to put the module-specific functionality
      under "go mod", but not as flags. Instead, split "go mod" into
      multiple subcommands:
      
      	go mod edit   # old go mod -require ...
      	go mod fix    # old go mod -fix
      	go mod graph  # old go mod -graph
      	go mod init   # old go mod -init
      	go mod tidy   # old go mod -sync
      	go mod vendor # old go mod -vendor
      	go mod verify # old go mod -verify
      
      Splitting out the individual commands makes both the docs
      and the implementations dramatically easier to read.
      It simplifies the command lines
      (go mod -init -module m is now 'go mod init m')
      and allows command-specific flags.
      
      We've avoided subcommands in the go command to date, and we
      should continue to avoid adding them unless it really makes
      the experience significantly better. In this case, it does.
      
      Creating subcommands required some changes in the core
      command-parsing and help logic to generalize from one
      level to multiple levels.
      
      As part of having "go mod init" be a separate command,
      this CL changes the failure behavior during module initialization
      to be delayed until modules are actually needed.
      Initialization can still happen early, but the base.Fatalf
      is delayed until something needs to use modules.
      This fixes a bunch of commands like 'go env' that were
      unhelpfully failing with GO111MODULE=on when not in a
      module directory.
      
      Fixes #26432.
      Fixes #26581.
      Fixes #26596.
      Fixes #26639.
      
      Change-Id: I868db0babe8c288e8af684b29d4a5ae4825d6407
      Reviewed-on: https://go-review.googlesource.com/126655
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      6121987a
    • Russ Cox's avatar
      cmd/go: add 'go version' statement in go.mod · 16962faf
      Russ Cox authored
      We aren't planning to use this or advertise it much yet,
      but having support for it now will make it easier to start
      using in the future - older go commands will understand
      what 'go 1.20' means and that they don't have go 1.20.
      
      Fixes #23969.
      
      Change-Id: I729130b2690d3c0b794b49201526b53de5093c45
      Reviewed-on: https://go-review.googlesource.com/125940
      Run-TryBot: Russ Cox <rsc@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: 's avatarBryan C. Mills <bcmills@google.com>
      16962faf
  2. 31 Jul, 2018 20 commits
  3. 30 Jul, 2018 3 commits
  4. 29 Jul, 2018 3 commits
  5. 28 Jul, 2018 9 commits