Commit 57568958 authored by Russ Cox's avatar Russ Cox

cmd/go: add dark copy of golang.org/x/vgo

This CL corresponds to golang.org/cl/118096 (7fbc8df48a7)
in the vgo repo.

It copies the bulk of the code from vgo back into the main repo,
but completely disabled - vgo.Init is a no-op and vgo.Enabled
returns false unconditionally.

The point of this CL is to make the two trees easier to diff and
to make future syncs smaller.

Change-Id: Ic34fd5ddd8272a70c5a3b3437b5169e967d0ed03
Reviewed-on: https://go-review.googlesource.com/118095Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
parent 1a92cdbf
...@@ -1261,14 +1261,14 @@ func TestInternalPackagesInGOROOTAreRespected(t *testing.T) { ...@@ -1261,14 +1261,14 @@ func TestInternalPackagesInGOROOTAreRespected(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.runFail("build", "-v", "./testdata/testinternal") tg.runFail("build", "-v", "./testdata/testinternal")
tg.grepBoth(`testinternal(\/|\\)p\.go\:3\:8\: use of internal package not allowed`, "wrong error message for testdata/testinternal") tg.grepBoth(`testinternal(\/|\\)p\.go\:3\:8\: use of internal package net/http/internal not allowed`, "wrong error message for testdata/testinternal")
} }
func TestInternalPackagesOutsideGOROOTAreRespected(t *testing.T) { func TestInternalPackagesOutsideGOROOTAreRespected(t *testing.T) {
tg := testgo(t) tg := testgo(t)
defer tg.cleanup() defer tg.cleanup()
tg.runFail("build", "-v", "./testdata/testinternal2") tg.runFail("build", "-v", "./testdata/testinternal2")
tg.grepBoth(`testinternal2(\/|\\)p\.go\:3\:8\: use of internal package not allowed`, "wrote error message for testdata/testinternal2") tg.grepBoth(`testinternal2(\/|\\)p\.go\:3\:8\: use of internal package .*internal/w not allowed`, "wrote error message for testdata/testinternal2")
} }
func TestRunInternal(t *testing.T) { func TestRunInternal(t *testing.T) {
...@@ -1278,7 +1278,7 @@ func TestRunInternal(t *testing.T) { ...@@ -1278,7 +1278,7 @@ func TestRunInternal(t *testing.T) {
tg.setenv("GOPATH", dir) tg.setenv("GOPATH", dir)
tg.run("run", filepath.Join(dir, "src/run/good.go")) tg.run("run", filepath.Join(dir, "src/run/good.go"))
tg.runFail("run", filepath.Join(dir, "src/run/bad.go")) tg.runFail("run", filepath.Join(dir, "src/run/bad.go"))
tg.grepStderr(`testdata(\/|\\)src(\/|\\)run(\/|\\)bad\.go\:3\:8\: use of internal package not allowed`, "unexpected error for run/bad.go") tg.grepStderr(`testdata(\/|\\)src(\/|\\)run(\/|\\)bad\.go\:3\:8\: use of internal package run/subdir/internal/private not allowed`, "unexpected error for run/bad.go")
} }
func TestRunPkg(t *testing.T) { func TestRunPkg(t *testing.T) {
......
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package dirhash defines hashes over directory trees.
package dirhash
import (
"archive/zip"
"crypto/sha256"
"encoding/base64"
"errors"
"fmt"
"io"
"os"
"path/filepath"
"sort"
"strings"
)
var DefaultHash = Hash1
type Hash func(files []string, open func(string) (io.ReadCloser, error)) (string, error)
func Hash1(files []string, open func(string) (io.ReadCloser, error)) (string, error) {
h := sha256.New()
files = append([]string(nil), files...)
sort.Strings(files)
for _, file := range files {
if strings.Contains(file, "\n") {
return "", errors.New("filenames with newlines are not supported")
}
r, err := open(file)
if err != nil {
return "", err
}
hf := sha256.New()
_, err = io.Copy(hf, r)
r.Close()
if err != nil {
return "", err
}
fmt.Fprintf(h, "%x %s\n", hf.Sum(nil), file)
}
return "h1:" + base64.StdEncoding.EncodeToString(h.Sum(nil)), nil
}
func HashDir(dir, prefix string, hash Hash) (string, error) {
files, err := DirFiles(dir, prefix)
if err != nil {
return "", err
}
osOpen := func(name string) (io.ReadCloser, error) {
return os.Open(filepath.Join(dir, strings.TrimPrefix(name, prefix)))
}
return hash(files, osOpen)
}
func DirFiles(dir, prefix string) ([]string, error) {
var files []string
dir = filepath.Clean(dir)
err := filepath.Walk(dir, func(file string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
rel := file
if dir != "." {
rel = file[len(dir)+1:]
}
f := filepath.Join(prefix, rel)
files = append(files, filepath.ToSlash(f))
return nil
})
if err != nil {
return nil, err
}
return files, nil
}
func HashZip(zipfile string, hash Hash) (string, error) {
z, err := zip.OpenReader(zipfile)
if err != nil {
return "", err
}
defer z.Close()
var files []string
zfiles := make(map[string]*zip.File)
for _, file := range z.File {
files = append(files, file.Name)
zfiles[file.Name] = file
}
zipOpen := func(name string) (io.ReadCloser, error) {
f := zfiles[name]
if f == nil {
return nil, fmt.Errorf("file %q not found in zip", name) // should never happen
}
return f.Open()
}
return hash(files, zipOpen)
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package dirhash
import (
"archive/zip"
"crypto/sha256"
"encoding/base64"
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
"strings"
"testing"
)
func h(s string) string {
return fmt.Sprintf("%x", sha256.Sum256([]byte(s)))
}
func htop(k string, s string) string {
sum := sha256.Sum256([]byte(s))
return k + ":" + base64.StdEncoding.EncodeToString(sum[:])
}
func TestHash1(t *testing.T) {
files := []string{"xyz", "abc"}
open := func(name string) (io.ReadCloser, error) {
return ioutil.NopCloser(strings.NewReader("data for " + name)), nil
}
want := htop("h1", fmt.Sprintf("%s %s\n%s %s\n", h("data for abc"), "abc", h("data for xyz"), "xyz"))
out, err := Hash1(files, open)
if err != nil {
t.Fatal(err)
}
if out != want {
t.Errorf("Hash1(...) = %s, want %s", out, want)
}
_, err = Hash1([]string{"xyz", "a\nbc"}, open)
if err == nil {
t.Error("Hash1: expected error on newline in filenames")
}
}
func TestHashDir(t *testing.T) {
dir, err := ioutil.TempDir("", "dirhash-test-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
t.Fatal(err)
}
if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
t.Fatal(err)
}
want := htop("h1", fmt.Sprintf("%s %s\n%s %s\n", h("data for abc"), "prefix/abc", h("data for xyz"), "prefix/xyz"))
out, err := HashDir(dir, "prefix", Hash1)
if err != nil {
t.Fatalf("HashDir: %v", err)
}
if out != want {
t.Errorf("HashDir(...) = %s, want %s", out, want)
}
}
func TestHashZip(t *testing.T) {
f, err := ioutil.TempFile("", "dirhash-test-")
if err != nil {
t.Fatal(err)
}
defer os.Remove(f.Name())
defer f.Close()
z := zip.NewWriter(f)
w, err := z.Create("prefix/xyz")
if err != nil {
t.Fatal(err)
}
w.Write([]byte("data for xyz"))
w, err = z.Create("prefix/abc")
if err != nil {
t.Fatal(err)
}
w.Write([]byte("data for abc"))
if err := z.Close(); err != nil {
t.Fatal(err)
}
if err := f.Close(); err != nil {
t.Fatal(err)
}
want := htop("h1", fmt.Sprintf("%s %s\n%s %s\n", h("data for abc"), "prefix/abc", h("data for xyz"), "prefix/xyz"))
out, err := HashZip(f.Name(), Hash1)
if err != nil {
t.Fatalf("HashDir: %v", err)
}
if out != want {
t.Errorf("HashDir(...) = %s, want %s", out, want)
}
}
func TestDirFiles(t *testing.T) {
dir, err := ioutil.TempDir("", "dirfiles-test-")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(dir)
if err := ioutil.WriteFile(filepath.Join(dir, "xyz"), []byte("data for xyz"), 0666); err != nil {
t.Fatal(err)
}
if err := ioutil.WriteFile(filepath.Join(dir, "abc"), []byte("data for abc"), 0666); err != nil {
t.Fatal(err)
}
if err := os.Mkdir(filepath.Join(dir, "subdir"), 0777); err != nil {
t.Fatal(err)
}
if err := ioutil.WriteFile(filepath.Join(dir, "subdir", "xyz"), []byte("data for subdir xyz"), 0666); err != nil {
t.Fatal(err)
}
prefix := "foo/bar@v2.3.4"
out, err := DirFiles(dir, prefix)
if err != nil {
t.Fatalf("DirFiles: %v", err)
}
for _, file := range out {
if !strings.HasPrefix(file, prefix) {
t.Errorf("Dir file = %s, want prefix %s", file, prefix)
}
}
}
...@@ -16,6 +16,7 @@ import ( ...@@ -16,6 +16,7 @@ import (
"cmd/go/internal/cache" "cmd/go/internal/cache"
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/load" "cmd/go/internal/load"
"cmd/go/internal/vgo"
"cmd/go/internal/work" "cmd/go/internal/work"
) )
...@@ -56,6 +57,7 @@ func MkEnv() []cfg.EnvVar { ...@@ -56,6 +57,7 @@ func MkEnv() []cfg.EnvVar {
{Name: "GOHOSTOS", Value: runtime.GOOS}, {Name: "GOHOSTOS", Value: runtime.GOOS},
{Name: "GOOS", Value: cfg.Goos}, {Name: "GOOS", Value: cfg.Goos},
{Name: "GOPATH", Value: cfg.BuildContext.GOPATH}, {Name: "GOPATH", Value: cfg.BuildContext.GOPATH},
{Name: "GOPROXY", Value: os.Getenv("GOPROXY")},
{Name: "GORACE", Value: os.Getenv("GORACE")}, {Name: "GORACE", Value: os.Getenv("GORACE")},
{Name: "GOROOT", Value: cfg.GOROOT}, {Name: "GOROOT", Value: cfg.GOROOT},
{Name: "GOTMPDIR", Value: os.Getenv("GOTMPDIR")}, {Name: "GOTMPDIR", Value: os.Getenv("GOTMPDIR")},
...@@ -131,6 +133,7 @@ func ExtraEnvVars() []cfg.EnvVar { ...@@ -131,6 +133,7 @@ func ExtraEnvVars() []cfg.EnvVar {
{Name: "CGO_LDFLAGS", Value: strings.Join(ldflags, " ")}, {Name: "CGO_LDFLAGS", Value: strings.Join(ldflags, " ")},
{Name: "PKG_CONFIG", Value: b.PkgconfigCmd()}, {Name: "PKG_CONFIG", Value: b.PkgconfigCmd()},
{Name: "GOGCCFLAGS", Value: strings.Join(cmd[3:], " ")}, {Name: "GOGCCFLAGS", Value: strings.Join(cmd[3:], " ")},
{Name: "VGOMODROOT", Value: vgo.ModRoot},
} }
} }
......
...@@ -10,6 +10,9 @@ import ( ...@@ -10,6 +10,9 @@ import (
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/load" "cmd/go/internal/load"
"cmd/go/internal/str" "cmd/go/internal/str"
"cmd/go/internal/vgo"
"fmt"
"os"
) )
var CmdFix = &base.Command{ var CmdFix = &base.Command{
...@@ -29,7 +32,15 @@ See also: go fmt, go vet. ...@@ -29,7 +32,15 @@ See also: go fmt, go vet.
} }
func runFix(cmd *base.Command, args []string) { func runFix(cmd *base.Command, args []string) {
printed := false
for _, pkg := range load.Packages(args) { for _, pkg := range load.Packages(args) {
if vgo.Enabled() && !pkg.Module.Top {
if !printed {
fmt.Fprintf(os.Stderr, "vgo: not fixing packages in dependency modules\n")
printed = true
}
continue
}
// Use pkg.gofiles instead of pkg.Dir so that // Use pkg.gofiles instead of pkg.Dir so that
// the command only applies to this package, // the command only applies to this package,
// not to packages in subdirectories. // not to packages in subdirectories.
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
package fmtcmd package fmtcmd
import ( import (
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
...@@ -16,6 +17,7 @@ import ( ...@@ -16,6 +17,7 @@ import (
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/load" "cmd/go/internal/load"
"cmd/go/internal/str" "cmd/go/internal/str"
"cmd/go/internal/vgo"
) )
func init() { func init() {
...@@ -43,6 +45,7 @@ See also: go fix, go vet. ...@@ -43,6 +45,7 @@ See also: go fix, go vet.
} }
func runFmt(cmd *base.Command, args []string) { func runFmt(cmd *base.Command, args []string) {
printed := false
gofmt := gofmtPath() gofmt := gofmtPath()
procs := runtime.GOMAXPROCS(0) procs := runtime.GOMAXPROCS(0)
var wg sync.WaitGroup var wg sync.WaitGroup
...@@ -57,6 +60,13 @@ func runFmt(cmd *base.Command, args []string) { ...@@ -57,6 +60,13 @@ func runFmt(cmd *base.Command, args []string) {
}() }()
} }
for _, pkg := range load.PackagesAndErrors(args) { for _, pkg := range load.PackagesAndErrors(args) {
if vgo.Enabled() && !pkg.Module.Top {
if !printed {
fmt.Fprintf(os.Stderr, "vgo: not formatting packages in dependency modules\n")
printed = true
}
continue
}
if pkg.Error != nil { if pkg.Error != nil {
if strings.HasPrefix(pkg.Error.Err, "build constraints exclude all Go files") { if strings.HasPrefix(pkg.Error.Err, "build constraints exclude all Go files") {
// Skip this error, as we will format // Skip this error, as we will format
......
...@@ -21,6 +21,7 @@ import ( ...@@ -21,6 +21,7 @@ import (
"cmd/go/internal/base" "cmd/go/internal/base"
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/load" "cmd/go/internal/load"
"cmd/go/internal/vgo"
"cmd/go/internal/work" "cmd/go/internal/work"
) )
...@@ -158,7 +159,16 @@ func runGenerate(cmd *base.Command, args []string) { ...@@ -158,7 +159,16 @@ func runGenerate(cmd *base.Command, args []string) {
} }
} }
// Even if the arguments are .go files, this loop suffices. // Even if the arguments are .go files, this loop suffices.
printed := false
for _, pkg := range load.Packages(args) { for _, pkg := range load.Packages(args) {
if vgo.Enabled() && !pkg.Module.Top {
if !printed {
fmt.Fprintf(os.Stderr, "vgo: not generating in packages in dependency modules\n")
printed = true
}
continue
}
pkgName := pkg.Name pkgName := pkg.Name
for _, file := range pkg.InternalGoFiles() { for _, file := range pkg.InternalGoFiles() {
......
...@@ -16,7 +16,9 @@ import ( ...@@ -16,7 +16,9 @@ import (
"cmd/go/internal/base" "cmd/go/internal/base"
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/load" "cmd/go/internal/load"
"cmd/go/internal/search"
"cmd/go/internal/str" "cmd/go/internal/str"
"cmd/go/internal/vgo"
"cmd/go/internal/web" "cmd/go/internal/web"
"cmd/go/internal/work" "cmd/go/internal/work"
) )
...@@ -90,6 +92,10 @@ func init() { ...@@ -90,6 +92,10 @@ func init() {
} }
func runGet(cmd *base.Command, args []string) { func runGet(cmd *base.Command, args []string) {
if vgo.Enabled() {
base.Fatalf("go get: vgo not implemented")
}
work.BuildInit() work.BuildInit()
if *getF && !*getU { if *getF && !*getU {
...@@ -170,7 +176,7 @@ func runGet(cmd *base.Command, args []string) { ...@@ -170,7 +176,7 @@ func runGet(cmd *base.Command, args []string) {
// in the hope that we can figure out the repository from the // in the hope that we can figure out the repository from the
// initial ...-free prefix. // initial ...-free prefix.
func downloadPaths(args []string) []string { func downloadPaths(args []string) []string {
args = load.ImportPathsNoDotExpansion(args) args = load.ImportPathsForGoGet(args)
var out []string var out []string
for _, a := range args { for _, a := range args {
if strings.Contains(a, "...") { if strings.Contains(a, "...") {
...@@ -179,9 +185,9 @@ func downloadPaths(args []string) []string { ...@@ -179,9 +185,9 @@ func downloadPaths(args []string) []string {
// warnings. They will be printed by the // warnings. They will be printed by the
// eventual call to importPaths instead. // eventual call to importPaths instead.
if build.IsLocalImport(a) { if build.IsLocalImport(a) {
expand = load.MatchPackagesInFS(a) expand = search.MatchPackagesInFS(a)
} else { } else {
expand = load.MatchPackages(a) expand = search.MatchPackages(a)
} }
if len(expand) > 0 { if len(expand) > 0 {
out = append(out, expand...) out = append(out, expand...)
...@@ -271,9 +277,9 @@ func download(arg string, parent *load.Package, stk *load.ImportStack, mode int) ...@@ -271,9 +277,9 @@ func download(arg string, parent *load.Package, stk *load.ImportStack, mode int)
// for p has been replaced in the package cache. // for p has been replaced in the package cache.
if wildcardOkay && strings.Contains(arg, "...") { if wildcardOkay && strings.Contains(arg, "...") {
if build.IsLocalImport(arg) { if build.IsLocalImport(arg) {
args = load.MatchPackagesInFS(arg) args = search.MatchPackagesInFS(arg)
} else { } else {
args = load.MatchPackages(arg) args = search.MatchPackages(arg)
} }
isWildcard = true isWildcard = true
} }
......
...@@ -64,6 +64,10 @@ func Help(args []string) { ...@@ -64,6 +64,10 @@ func Help(args []string) {
var usageTemplate = `Go is a tool for managing Go source code. var usageTemplate = `Go is a tool for managing Go source code.
This is vgo, an experimental go command with support for package versioning.
Even though you are invoking it as vgo, most of the messages printed will
still say "go", not "vgo". Sorry.
Usage: Usage:
go command [arguments] go command [arguments]
......
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Copied from Go distribution src/go/build/build.go, syslist.go
package imports
import (
"bytes"
"strings"
"unicode"
)
var slashslash = []byte("//")
// ShouldBuild reports whether it is okay to use this file,
// The rule is that in the file's leading run of // comments
// and blank lines, which must be followed by a blank line
// (to avoid including a Go package clause doc comment),
// lines beginning with '// +build' are taken as build directives.
//
// The file is accepted only if each such line lists something
// matching the file. For example:
//
// // +build windows linux
//
// marks the file as applicable only on Windows and Linux.
//
// If tags["*"] is true, then ShouldBuild will consider every
// build tag except "ignore" to be both true and false for
// the purpose of satisfying build tags, in order to estimate
// (conservatively) whether a file could ever possibly be used
// in any build.
//
func ShouldBuild(content []byte, tags map[string]bool) bool {
// Pass 1. Identify leading run of // comments and blank lines,
// which must be followed by a blank line.
end := 0
p := content
for len(p) > 0 {
line := p
if i := bytes.IndexByte(line, '\n'); i >= 0 {
line, p = line[:i], p[i+1:]
} else {
p = p[len(p):]
}
line = bytes.TrimSpace(line)
if len(line) == 0 { // Blank line
end = len(content) - len(p)
continue
}
if !bytes.HasPrefix(line, slashslash) { // Not comment line
break
}
}
content = content[:end]
// Pass 2. Process each line in the run.
p = content
allok := true
for len(p) > 0 {
line := p
if i := bytes.IndexByte(line, '\n'); i >= 0 {
line, p = line[:i], p[i+1:]
} else {
p = p[len(p):]
}
line = bytes.TrimSpace(line)
if !bytes.HasPrefix(line, slashslash) {
continue
}
line = bytes.TrimSpace(line[len(slashslash):])
if len(line) > 0 && line[0] == '+' {
// Looks like a comment +line.
f := strings.Fields(string(line))
if f[0] == "+build" {
ok := false
for _, tok := range f[1:] {
if matchTags(tok, tags) {
ok = true
}
}
if !ok {
allok = false
}
}
}
}
return allok
}
// matchTags reports whether the name is one of:
//
// tag (if tags[tag] is true)
// !tag (if tags[tag] is false)
// a comma-separated list of any of these
//
func matchTags(name string, tags map[string]bool) bool {
if name == "" {
return false
}
if i := strings.Index(name, ","); i >= 0 {
// comma-separated list
ok1 := matchTags(name[:i], tags)
ok2 := matchTags(name[i+1:], tags)
return ok1 && ok2
}
if strings.HasPrefix(name, "!!") { // bad syntax, reject always
return false
}
if strings.HasPrefix(name, "!") { // negation
return len(name) > 1 && matchTag(name[1:], tags, false)
}
return matchTag(name, tags, true)
}
// matchTag reports whether the tag name is valid and satisfied by tags[name]==want.
func matchTag(name string, tags map[string]bool, want bool) bool {
// Tags must be letters, digits, underscores or dots.
// Unlike in Go identifiers, all digits are fine (e.g., "386").
for _, c := range name {
if !unicode.IsLetter(c) && !unicode.IsDigit(c) && c != '_' && c != '.' {
return false
}
}
if tags["*"] && name != "" && name != "ignore" {
// Special case for gathering all possible imports:
// if we put * in the tags map then all tags
// except "ignore" are considered both present and not
// (so we return true no matter how 'want' is set).
return true
}
have := tags[name]
if name == "linux" {
have = have || tags["android"]
}
return have == want
}
// MatchFile returns false if the name contains a $GOOS or $GOARCH
// suffix which does not match the current system.
// The recognized name formats are:
//
// name_$(GOOS).*
// name_$(GOARCH).*
// name_$(GOOS)_$(GOARCH).*
// name_$(GOOS)_test.*
// name_$(GOARCH)_test.*
// name_$(GOOS)_$(GOARCH)_test.*
//
// An exception: if GOOS=android, then files with GOOS=linux are also matched.
//
// If tags["*"] is true, then MatchFile will consider all possible
// GOOS and GOARCH to be available and will consequently
// always return true.
func MatchFile(name string, tags map[string]bool) bool {
if tags["*"] {
return true
}
if dot := strings.Index(name, "."); dot != -1 {
name = name[:dot]
}
// Before Go 1.4, a file called "linux.go" would be equivalent to having a
// build tag "linux" in that file. For Go 1.4 and beyond, we require this
// auto-tagging to apply only to files with a non-empty prefix, so
// "foo_linux.go" is tagged but "linux.go" is not. This allows new operating
// systems, such as android, to arrive without breaking existing code with
// innocuous source code in "android.go". The easiest fix: cut everything
// in the name before the initial _.
i := strings.Index(name, "_")
if i < 0 {
return true
}
name = name[i:] // ignore everything before first _
l := strings.Split(name, "_")
if n := len(l); n > 0 && l[n-1] == "test" {
l = l[:n-1]
}
n := len(l)
if n >= 2 && knownOS[l[n-2]] && knownArch[l[n-1]] {
return tags[l[n-2]] && tags[l[n-1]]
}
if n >= 1 && knownOS[l[n-1]] {
return tags[l[n-1]]
}
if n >= 1 && knownArch[l[n-1]] {
return tags[l[n-1]]
}
return true
}
var knownOS = make(map[string]bool)
var knownArch = make(map[string]bool)
func init() {
for _, v := range strings.Fields(goosList) {
knownOS[v] = true
}
for _, v := range strings.Fields(goarchList) {
knownArch[v] = true
}
}
const goosList = "android darwin dragonfly freebsd js linux nacl netbsd openbsd plan9 solaris windows zos "
const goarchList = "386 amd64 amd64p32 arm armbe arm64 arm64be ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32le ppc riscv riscv64 s390 s390x sparc sparc64 wasm "
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Copied from Go distribution src/go/build/read.go.
package imports
import (
"bufio"
"errors"
"io"
"unicode/utf8"
)
type importReader struct {
b *bufio.Reader
buf []byte
peek byte
err error
eof bool
nerr int
}
func isIdent(c byte) bool {
return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '_' || c >= utf8.RuneSelf
}
var (
errSyntax = errors.New("syntax error")
errNUL = errors.New("unexpected NUL in input")
)
// syntaxError records a syntax error, but only if an I/O error has not already been recorded.
func (r *importReader) syntaxError() {
if r.err == nil {
r.err = errSyntax
}
}
// readByte reads the next byte from the input, saves it in buf, and returns it.
// If an error occurs, readByte records the error in r.err and returns 0.
func (r *importReader) readByte() byte {
c, err := r.b.ReadByte()
if err == nil {
r.buf = append(r.buf, c)
if c == 0 {
err = errNUL
}
}
if err != nil {
if err == io.EOF {
r.eof = true
} else if r.err == nil {
r.err = err
}
c = 0
}
return c
}
// peekByte returns the next byte from the input reader but does not advance beyond it.
// If skipSpace is set, peekByte skips leading spaces and comments.
func (r *importReader) peekByte(skipSpace bool) byte {
if r.err != nil {
if r.nerr++; r.nerr > 10000 {
panic("go/build: import reader looping")
}
return 0
}
// Use r.peek as first input byte.
// Don't just return r.peek here: it might have been left by peekByte(false)
// and this might be peekByte(true).
c := r.peek
if c == 0 {
c = r.readByte()
}
for r.err == nil && !r.eof {
if skipSpace {
// For the purposes of this reader, semicolons are never necessary to
// understand the input and are treated as spaces.
switch c {
case ' ', '\f', '\t', '\r', '\n', ';':
c = r.readByte()
continue
case '/':
c = r.readByte()
if c == '/' {
for c != '\n' && r.err == nil && !r.eof {
c = r.readByte()
}
} else if c == '*' {
var c1 byte
for (c != '*' || c1 != '/') && r.err == nil {
if r.eof {
r.syntaxError()
}
c, c1 = c1, r.readByte()
}
} else {
r.syntaxError()
}
c = r.readByte()
continue
}
}
break
}
r.peek = c
return r.peek
}
// nextByte is like peekByte but advances beyond the returned byte.
func (r *importReader) nextByte(skipSpace bool) byte {
c := r.peekByte(skipSpace)
r.peek = 0
return c
}
// readKeyword reads the given keyword from the input.
// If the keyword is not present, readKeyword records a syntax error.
func (r *importReader) readKeyword(kw string) {
r.peekByte(true)
for i := 0; i < len(kw); i++ {
if r.nextByte(false) != kw[i] {
r.syntaxError()
return
}
}
if isIdent(r.peekByte(false)) {
r.syntaxError()
}
}
// readIdent reads an identifier from the input.
// If an identifier is not present, readIdent records a syntax error.
func (r *importReader) readIdent() {
c := r.peekByte(true)
if !isIdent(c) {
r.syntaxError()
return
}
for isIdent(r.peekByte(false)) {
r.peek = 0
}
}
// readString reads a quoted string literal from the input.
// If an identifier is not present, readString records a syntax error.
func (r *importReader) readString(save *[]string) {
switch r.nextByte(true) {
case '`':
start := len(r.buf) - 1
for r.err == nil {
if r.nextByte(false) == '`' {
if save != nil {
*save = append(*save, string(r.buf[start:]))
}
break
}
if r.eof {
r.syntaxError()
}
}
case '"':
start := len(r.buf) - 1
for r.err == nil {
c := r.nextByte(false)
if c == '"' {
if save != nil {
*save = append(*save, string(r.buf[start:]))
}
break
}
if r.eof || c == '\n' {
r.syntaxError()
}
if c == '\\' {
r.nextByte(false)
}
}
default:
r.syntaxError()
}
}
// readImport reads an import clause - optional identifier followed by quoted string -
// from the input.
func (r *importReader) readImport(imports *[]string) {
c := r.peekByte(true)
if c == '.' {
r.peek = 0
} else if isIdent(c) {
r.readIdent()
}
r.readString(imports)
}
// ReadComments is like ioutil.ReadAll, except that it only reads the leading
// block of comments in the file.
func ReadComments(f io.Reader) ([]byte, error) {
r := &importReader{b: bufio.NewReader(f)}
r.peekByte(true)
if r.err == nil && !r.eof {
// Didn't reach EOF, so must have found a non-space byte. Remove it.
r.buf = r.buf[:len(r.buf)-1]
}
return r.buf, r.err
}
// ReadImports is like ioutil.ReadAll, except that it expects a Go file as input
// and stops reading the input once the imports have completed.
func ReadImports(f io.Reader, reportSyntaxError bool, imports *[]string) ([]byte, error) {
r := &importReader{b: bufio.NewReader(f)}
r.readKeyword("package")
r.readIdent()
for r.peekByte(true) == 'i' {
r.readKeyword("import")
if r.peekByte(true) == '(' {
r.nextByte(false)
for r.peekByte(true) != ')' && r.err == nil {
r.readImport(imports)
}
r.nextByte(false)
} else {
r.readImport(imports)
}
}
// If we stopped successfully before EOF, we read a byte that told us we were done.
// Return all but that last byte, which would cause a syntax error if we let it through.
if r.err == nil && !r.eof {
return r.buf[:len(r.buf)-1], nil
}
// If we stopped for a syntax error, consume the whole file so that
// we are sure we don't change the errors that go/parser returns.
if r.err == errSyntax && !reportSyntaxError {
r.err = nil
for r.err == nil && !r.eof {
r.readByte()
}
}
return r.buf, r.err
}
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Copied from Go distribution src/go/build/read.go.
package imports
import (
"io"
"strings"
"testing"
)
const quote = "`"
type readTest struct {
// Test input contains ℙ where readImports should stop.
in string
err string
}
var readImportsTests = []readTest{
{
`package p`,
"",
},
{
`package p; import "x"`,
"",
},
{
`package p; import . "x"`,
"",
},
{
`package p; import "x";ℙvar x = 1`,
"",
},
{
`package p
// comment
import "x"
import _ "x"
import a "x"
/* comment */
import (
"x" /* comment */
_ "x"
a "x" // comment
` + quote + `x` + quote + `
_ /*comment*/ ` + quote + `x` + quote + `
a ` + quote + `x` + quote + `
)
import (
)
import ()
import()import()import()
import();import();import()
ℙvar x = 1
`,
"",
},
}
var readCommentsTests = []readTest{
{
`ℙpackage p`,
"",
},
{
`ℙpackage p; import "x"`,
"",
},
{
`ℙpackage p; import . "x"`,
"",
},
{
`// foo
/* bar */
/* quux */ // baz
/*/ zot */
// asdf
ℙHello, world`,
"",
},
}
func testRead(t *testing.T, tests []readTest, read func(io.Reader) ([]byte, error)) {
for i, tt := range tests {
var in, testOut string
j := strings.Index(tt.in, "ℙ")
if j < 0 {
in = tt.in
testOut = tt.in
} else {
in = tt.in[:j] + tt.in[j+len("ℙ"):]
testOut = tt.in[:j]
}
r := strings.NewReader(in)
buf, err := read(r)
if err != nil {
if tt.err == "" {
t.Errorf("#%d: err=%q, expected success (%q)", i, err, string(buf))
continue
}
if !strings.Contains(err.Error(), tt.err) {
t.Errorf("#%d: err=%q, expected %q", i, err, tt.err)
continue
}
continue
}
if err == nil && tt.err != "" {
t.Errorf("#%d: success, expected %q", i, tt.err)
continue
}
out := string(buf)
if out != testOut {
t.Errorf("#%d: wrong output:\nhave %q\nwant %q\n", i, out, testOut)
}
}
}
func TestReadImports(t *testing.T) {
testRead(t, readImportsTests, func(r io.Reader) ([]byte, error) { return ReadImports(r, true, nil) })
}
func TestReadComments(t *testing.T) {
testRead(t, readCommentsTests, ReadComments)
}
var readFailuresTests = []readTest{
{
`package`,
"syntax error",
},
{
"package p\n\x00\nimport `math`\n",
"unexpected NUL in input",
},
{
`package p; import`,
"syntax error",
},
{
`package p; import "`,
"syntax error",
},
{
"package p; import ` \n\n",
"syntax error",
},
{
`package p; import "x`,
"syntax error",
},
{
`package p; import _`,
"syntax error",
},
{
`package p; import _ "`,
"syntax error",
},
{
`package p; import _ "x`,
"syntax error",
},
{
`package p; import .`,
"syntax error",
},
{
`package p; import . "`,
"syntax error",
},
{
`package p; import . "x`,
"syntax error",
},
{
`package p; import (`,
"syntax error",
},
{
`package p; import ("`,
"syntax error",
},
{
`package p; import ("x`,
"syntax error",
},
{
`package p; import ("x"`,
"syntax error",
},
}
func TestReadFailures(t *testing.T) {
// Errors should be reported (true arg to readImports).
testRead(t, readFailuresTests, func(r io.Reader) ([]byte, error) { return ReadImports(r, true, nil) })
}
func TestReadFailuresIgnored(t *testing.T) {
// Syntax errors should not be reported (false arg to readImports).
// Instead, entire file should be the output and no error.
// Convert tests not to return syntax errors.
tests := make([]readTest, len(readFailuresTests))
copy(tests, readFailuresTests)
for i := range tests {
tt := &tests[i]
if !strings.Contains(tt.err, "NUL") {
tt.err = ""
}
}
testRead(t, tests, func(r io.Reader) ([]byte, error) { return ReadImports(r, false, nil) })
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package imports
import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"sort"
"strconv"
"strings"
)
func ScanDir(dir string, tags map[string]bool) ([]string, []string, error) {
infos, err := ioutil.ReadDir(dir)
if err != nil {
return nil, nil, err
}
var files []string
for _, info := range infos {
name := info.Name()
if info.Mode().IsRegular() && !strings.HasPrefix(name, "_") && strings.HasSuffix(name, ".go") && MatchFile(name, tags) {
files = append(files, filepath.Join(dir, name))
}
}
return scanFiles(files, tags, false)
}
func ScanFiles(files []string, tags map[string]bool) ([]string, []string, error) {
return scanFiles(files, tags, true)
}
func scanFiles(files []string, tags map[string]bool, explicitFiles bool) ([]string, []string, error) {
imports := make(map[string]bool)
testImports := make(map[string]bool)
numFiles := 0
for _, name := range files {
r, err := os.Open(name)
if err != nil {
return nil, nil, err
}
var list []string
data, err := ReadImports(r, false, &list)
r.Close()
if err != nil {
return nil, nil, fmt.Errorf("reading %s: %v", name, err)
}
if !explicitFiles && !ShouldBuild(data, tags) {
continue
}
numFiles++
m := imports
if strings.HasSuffix(name, "_test.go") {
m = testImports
}
for _, p := range list {
q, err := strconv.Unquote(p)
if err != nil {
continue
}
m[q] = true
}
}
if numFiles == 0 {
return nil, nil, ErrNoGo
}
return keys(imports), keys(testImports), nil
}
var ErrNoGo = fmt.Errorf("no Go source files")
func keys(m map[string]bool) []string {
var list []string
for k := range m {
list = append(list, k)
}
sort.Strings(list)
return list
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package imports
import (
"internal/testenv"
"path/filepath"
"reflect"
"runtime"
"testing"
)
func TestScan(t *testing.T) {
testenv.MustHaveGoBuild(t)
imports, testImports, err := ScanDir(filepath.Join(runtime.GOROOT(), "src/encoding/json"), Tags())
if err != nil {
t.Fatal(err)
}
foundBase64 := false
for _, p := range imports {
if p == "encoding/base64" {
foundBase64 = true
}
if p == "encoding/binary" {
// A dependency but not an import
t.Errorf("json reported as importing encoding/binary but does not")
}
if p == "net/http" {
// A test import but not an import
t.Errorf("json reported as importing encoding/binary but does not")
}
}
if !foundBase64 {
t.Errorf("json missing import encoding/base64 (%q)", imports)
}
foundHTTP := false
for _, p := range testImports {
if p == "net/http" {
foundHTTP = true
}
if p == "unicode/utf16" {
// A package import but not a test import
t.Errorf("json reported as test-importing unicode/utf16 but does not")
}
}
if !foundHTTP {
t.Errorf("json missing test import net/http (%q)", testImports)
}
}
func TestScanStar(t *testing.T) {
testenv.MustHaveGoBuild(t)
imports, _, err := ScanDir("testdata/import1", map[string]bool{"*": true})
if err != nil {
t.Fatal(err)
}
want := []string{"import1", "import2", "import3", "import4"}
if !reflect.DeepEqual(imports, want) {
t.Errorf("ScanDir testdata/import1:\nhave %v\nwant %v", imports, want)
}
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package imports
import "cmd/go/internal/cfg"
var tags map[string]bool
func Tags() map[string]bool {
if tags == nil {
tags = loadTags()
}
return tags
}
func loadTags() map[string]bool {
tags := map[string]bool{
cfg.BuildContext.GOOS: true,
cfg.BuildContext.GOARCH: true,
cfg.BuildContext.Compiler: true,
}
if cfg.BuildContext.CgoEnabled {
tags["cgo"] = true
}
// TODO: Should read these out of GOROOT source code?
for _, tag := range cfg.BuildContext.BuildTags {
tags[tag] = true
}
for _, tag := range cfg.BuildContext.ReleaseTags {
tags[tag] = true
}
return tags
}
// +build blahblh
// +build linux
// +build !linux
// +build windows
// +build darwin
package x
import "import4"
...@@ -32,22 +32,6 @@ func hasSubdir(root, dir string) (rel string, ok bool) { ...@@ -32,22 +32,6 @@ func hasSubdir(root, dir string) (rel string, ok bool) {
return filepath.ToSlash(dir[len(root):]), true return filepath.ToSlash(dir[len(root):]), true
} }
// hasPathPrefix reports whether the path s begins with the
// elements in prefix.
func hasPathPrefix(s, prefix string) bool {
switch {
default:
return false
case len(s) == len(prefix):
return s == prefix
case len(s) > len(prefix):
if prefix != "" && prefix[len(prefix)-1] == '/' {
return strings.HasPrefix(s, prefix)
}
return s[len(prefix)] == '/' && s[:len(prefix)] == prefix
}
}
// expandPath returns the symlink-expanded form of path. // expandPath returns the symlink-expanded form of path.
func expandPath(p string) string { func expandPath(p string) string {
x, err := filepath.EvalSymlinks(p) x, err := filepath.EvalSymlinks(p)
......
...@@ -22,7 +22,10 @@ import ( ...@@ -22,7 +22,10 @@ import (
"cmd/go/internal/base" "cmd/go/internal/base"
"cmd/go/internal/cfg" "cmd/go/internal/cfg"
"cmd/go/internal/modinfo"
"cmd/go/internal/search"
"cmd/go/internal/str" "cmd/go/internal/str"
"cmd/go/internal/vgo"
) )
var IgnoreImports bool // control whether we ignore imports in packages var IgnoreImports bool // control whether we ignore imports in packages
...@@ -99,6 +102,8 @@ type PackagePublic struct { ...@@ -99,6 +102,8 @@ type PackagePublic struct {
TestImports []string `json:",omitempty"` // imports from TestGoFiles TestImports []string `json:",omitempty"` // imports from TestGoFiles
XTestGoFiles []string `json:",omitempty"` // _test.go files outside package XTestGoFiles []string `json:",omitempty"` // _test.go files outside package
XTestImports []string `json:",omitempty"` // imports from XTestGoFiles XTestImports []string `json:",omitempty"` // imports from XTestGoFiles
Module *modinfo.ModulePublic `json:",omitempty"` // info about package module
} }
// AllFiles returns the names of all the files considered for the package. // AllFiles returns the names of all the files considered for the package.
...@@ -148,6 +153,7 @@ type PackageInternal struct { ...@@ -148,6 +153,7 @@ type PackageInternal struct {
CoverVars map[string]*CoverVar // variables created by coverage analysis CoverVars map[string]*CoverVar // variables created by coverage analysis
OmitDebug bool // tell linker not to write debug information OmitDebug bool // tell linker not to write debug information
GobinSubdir bool // install target would be subdir of GOBIN GobinSubdir bool // install target would be subdir of GOBIN
BuildInfo string // add this info to package main
TestmainGo *[]byte // content for _testmain.go TestmainGo *[]byte // content for _testmain.go
Asmflags []string // -asmflags for this package Asmflags []string // -asmflags for this package
...@@ -236,7 +242,7 @@ func (p *Package) copyBuild(pp *build.Package) { ...@@ -236,7 +242,7 @@ func (p *Package) copyBuild(pp *build.Package) {
// TODO? Target // TODO? Target
p.Goroot = pp.Goroot p.Goroot = pp.Goroot
p.Standard = p.Goroot && p.ImportPath != "" && isStandardImportPath(p.ImportPath) p.Standard = p.Goroot && p.ImportPath != "" && search.IsStandardImportPath(p.ImportPath)
p.GoFiles = pp.GoFiles p.GoFiles = pp.GoFiles
p.CgoFiles = pp.CgoFiles p.CgoFiles = pp.CgoFiles
p.IgnoredGoFiles = pp.IgnoredGoFiles p.IgnoredGoFiles = pp.IgnoredGoFiles
...@@ -270,19 +276,6 @@ func (p *Package) copyBuild(pp *build.Package) { ...@@ -270,19 +276,6 @@ func (p *Package) copyBuild(pp *build.Package) {
} }
} }
// isStandardImportPath reports whether $GOROOT/src/path should be considered
// part of the standard distribution. For historical reasons we allow people to add
// their own code to $GOROOT instead of using $GOPATH, but we assume that
// code will start with a domain name (dot in the first element).
func isStandardImportPath(path string) bool {
i := strings.Index(path, "/")
if i < 0 {
i = len(path)
}
elem := path[:i]
return !strings.Contains(elem, ".")
}
// A PackageError describes an error loading information about a package. // A PackageError describes an error loading information about a package.
type PackageError struct { type PackageError struct {
ImportStack []string // shortest path from package named on command line to this one ImportStack []string // shortest path from package named on command line to this one
...@@ -430,8 +423,20 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo ...@@ -430,8 +423,20 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo
importPath := path importPath := path
origPath := path origPath := path
isLocal := build.IsLocalImport(path) isLocal := build.IsLocalImport(path)
var vgoDir string
var vgoErr error
if isLocal { if isLocal {
importPath = dirToImportPath(filepath.Join(srcDir, path)) importPath = dirToImportPath(filepath.Join(srcDir, path))
} else if vgo.Enabled() {
parentPath := ""
if parent != nil {
parentPath = parent.ImportPath
}
var p string
vgoDir, p, vgoErr = vgo.Lookup(parentPath, path)
if vgoErr == nil {
importPath = p
}
} else if mode&ResolveImport != 0 { } else if mode&ResolveImport != 0 {
// We do our own path resolution, because we want to // We do our own path resolution, because we want to
// find out the key to use in packageCache without the // find out the key to use in packageCache without the
...@@ -456,17 +461,28 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo ...@@ -456,17 +461,28 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo
// Load package. // Load package.
// Import always returns bp != nil, even if an error occurs, // Import always returns bp != nil, even if an error occurs,
// in order to return partial information. // in order to return partial information.
var bp *build.Package
var err error
if vgoDir != "" {
bp, err = cfg.BuildContext.ImportDir(vgoDir, 0)
} else if vgoErr != nil {
bp = new(build.Package)
err = fmt.Errorf("unknown import path %q: %v", importPath, vgoErr)
} else {
buildMode := build.ImportComment buildMode := build.ImportComment
if mode&ResolveImport == 0 || path != origPath { if mode&ResolveImport == 0 || path != origPath {
// Not vendoring, or we already found the vendored path. // Not vendoring, or we already found the vendored path.
buildMode |= build.IgnoreVendor buildMode |= build.IgnoreVendor
} }
bp, err := cfg.BuildContext.Import(path, srcDir, buildMode) bp, err = cfg.BuildContext.Import(path, srcDir, buildMode)
}
bp.ImportPath = importPath bp.ImportPath = importPath
if cfg.GOBIN != "" { if cfg.GOBIN != "" {
bp.BinDir = cfg.GOBIN bp.BinDir = cfg.GOBIN
} else if vgo.Enabled() {
bp.BinDir = vgo.BinDir()
} }
if err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path && if vgoDir == "" && err == nil && !isLocal && bp.ImportComment != "" && bp.ImportComment != path &&
!strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/") { !strings.Contains(path, "/vendor/") && !strings.HasPrefix(path, "vendor/") {
err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment) err = fmt.Errorf("code in directory %s expects import %q", bp.Dir, bp.ImportComment)
} }
...@@ -475,7 +491,7 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo ...@@ -475,7 +491,7 @@ func LoadImport(path, srcDir string, parent *Package, stk *ImportStack, importPo
p = setErrorPos(p, importPos) p = setErrorPos(p, importPos)
} }
if origPath != cleanImport(origPath) { if vgoDir == "" && origPath != cleanImport(origPath) {
p.Error = &PackageError{ p.Error = &PackageError{
ImportStack: stk.Copy(), ImportStack: stk.Copy(),
Err: fmt.Sprintf("non-canonical import path: %q should be %q", origPath, pathpkg.Clean(origPath)), Err: fmt.Sprintf("non-canonical import path: %q should be %q", origPath, pathpkg.Clean(origPath)),
...@@ -553,6 +569,16 @@ func isDir(path string) bool { ...@@ -553,6 +569,16 @@ func isDir(path string) bool {
// If vendor expansion doesn't trigger, then the path is also subject to // If vendor expansion doesn't trigger, then the path is also subject to
// Go 1.11 vgo legacy conversion (golang.org/issue/25069). // Go 1.11 vgo legacy conversion (golang.org/issue/25069).
func ResolveImportPath(parent *Package, path string) (found string) { func ResolveImportPath(parent *Package, path string) (found string) {
if vgo.Enabled() {
parentPath := ""
if parent != nil {
parentPath = parent.ImportPath
}
if _, p, e := vgo.Lookup(parentPath, path); e == nil {
return p
}
return path
}
found = VendoredImportPath(parent, path) found = VendoredImportPath(parent, path)
if found != path { if found != path {
return found return found
...@@ -902,7 +928,7 @@ func disallowInternal(srcDir string, p *Package, stk *ImportStack) *Package { ...@@ -902,7 +928,7 @@ func disallowInternal(srcDir string, p *Package, stk *ImportStack) *Package {
perr := *p perr := *p
perr.Error = &PackageError{ perr.Error = &PackageError{
ImportStack: stk.Copy(), ImportStack: stk.Copy(),
Err: "use of internal package not allowed", Err: "use of internal package " + p.ImportPath + " not allowed",
} }
perr.Incomplete = true perr.Incomplete = true
return &perr return &perr
...@@ -1130,6 +1156,9 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { ...@@ -1130,6 +1156,9 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
// Install cross-compiled binaries to subdirectories of bin. // Install cross-compiled binaries to subdirectories of bin.
elem = full elem = full
} }
if p.Internal.Build.BinDir == "" && vgo.Enabled() {
p.Internal.Build.BinDir = vgo.BinDir()
}
if p.Internal.Build.BinDir != "" { if p.Internal.Build.BinDir != "" {
// Install to GOBIN or bin of GOPATH entry. // Install to GOBIN or bin of GOPATH entry.
p.Target = filepath.Join(p.Internal.Build.BinDir, elem) p.Target = filepath.Join(p.Internal.Build.BinDir, elem)
...@@ -1380,6 +1409,13 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { ...@@ -1380,6 +1409,13 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) {
setError(fmt.Sprintf("case-insensitive import collision: %q and %q", p.ImportPath, other)) setError(fmt.Sprintf("case-insensitive import collision: %q and %q", p.ImportPath, other))
return return
} }
if vgo.Enabled() {
p.Module = vgo.PackageModuleInfo(p.ImportPath)
if p.Name == "main" {
p.Internal.BuildInfo = vgo.PackageBuildInfo(p.ImportPath, p.Deps)
}
}
} }
// SafeArg reports whether arg is a "safe" command-line argument, // SafeArg reports whether arg is a "safe" command-line argument,
...@@ -1654,6 +1690,20 @@ func PackagesAndErrors(args []string) []*Package { ...@@ -1654,6 +1690,20 @@ func PackagesAndErrors(args []string) []*Package {
return pkgs return pkgs
} }
func ImportPaths(args []string) []string {
if cmdlineMatchers == nil {
SetCmdlinePatterns(search.CleanImportPaths(args))
}
return vgo.ImportPaths(args)
}
func ImportPathsForGoGet(args []string) []string {
if cmdlineMatchers == nil {
SetCmdlinePatterns(search.CleanImportPaths(args))
}
return search.ImportPathsNoDotExpansion(args)
}
// packagesForBuild is like 'packages' but fails if any of // packagesForBuild is like 'packages' but fails if any of
// the packages or their dependencies have errors // the packages or their dependencies have errors
// (cannot be built). // (cannot be built).
...@@ -1739,6 +1789,8 @@ func GoFilesPackage(gofiles []string) *Package { ...@@ -1739,6 +1789,8 @@ func GoFilesPackage(gofiles []string) *Package {
} }
ctxt.ReadDir = func(string) ([]os.FileInfo, error) { return dirent, nil } ctxt.ReadDir = func(string) ([]os.FileInfo, error) { return dirent, nil }
vgo.AddImports(gofiles)
var err error var err error
if dir == "" { if dir == "" {
dir = base.Cwd dir = base.Cwd
...@@ -1767,6 +1819,8 @@ func GoFilesPackage(gofiles []string) *Package { ...@@ -1767,6 +1819,8 @@ func GoFilesPackage(gofiles []string) *Package {
} }
if cfg.GOBIN != "" { if cfg.GOBIN != "" {
pkg.Target = filepath.Join(cfg.GOBIN, exe) pkg.Target = filepath.Join(cfg.GOBIN, exe)
} else if vgo.Enabled() {
pkg.Target = filepath.Join(vgo.BinDir(), exe)
} }
} }
......
This diff is collapsed.
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"fmt"
"strconv"
"strings"
"cmd/go/internal/module"
"cmd/go/internal/semver"
)
func ParseGopkgLock(file string, data []byte) ([]module.Version, error) {
var list []module.Version
var r *module.Version
for lineno, line := range strings.Split(string(data), "\n") {
lineno++
if i := strings.Index(line, "#"); i >= 0 {
line = line[:i]
}
line = strings.TrimSpace(line)
if line == "[[projects]]" {
list = append(list, module.Version{})
r = &list[len(list)-1]
continue
}
if strings.HasPrefix(line, "[") {
r = nil
continue
}
if r == nil {
continue
}
i := strings.Index(line, "=")
if i < 0 {
continue
}
key := strings.TrimSpace(line[:i])
val := strings.TrimSpace(line[i+1:])
if len(val) >= 2 && val[0] == '"' && val[len(val)-1] == '"' {
q, err := strconv.Unquote(val) // Go unquoting, but close enough for now
if err != nil {
return nil, fmt.Errorf("%s:%d: invalid quoted string: %v", file, lineno, err)
}
val = q
}
switch key {
case "name":
r.Path = val
case "revision", "version":
// Note: key "version" should take priority over "revision",
// and it does, because dep writes toml keys in alphabetical order,
// so we see version (if present) second.
if key == "version" {
if !semver.IsValid(val) || semver.Canonical(val) != val {
break
}
}
r.Version = val
}
}
for _, r := range list {
if r.Path == "" || r.Version == "" {
return nil, fmt.Errorf("%s: empty [[projects]] stanza (%s)", file, r.Path)
}
}
return list, nil
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"cmd/go/internal/module"
"strings"
)
func ParseGlideLock(file string, data []byte) ([]module.Version, error) {
var list []module.Version
imports := false
name := ""
for lineno, line := range strings.Split(string(data), "\n") {
lineno++
if line == "" {
continue
}
if strings.HasPrefix(line, "imports:") {
imports = true
} else if line[0] != '-' && line[0] != ' ' && line[0] != '\t' {
imports = false
}
if !imports {
continue
}
if strings.HasPrefix(line, "- name:") {
name = strings.TrimSpace(line[len("- name:"):])
}
if strings.HasPrefix(line, " version:") {
version := strings.TrimSpace(line[len(" version:"):])
if name != "" && version != "" {
list = append(list, module.Version{Path: name, Version: version})
}
}
}
return list, nil
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"strings"
"cmd/go/internal/module"
)
func ParseGLOCKFILE(file string, data []byte) ([]module.Version, error) {
var list []module.Version
for lineno, line := range strings.Split(string(data), "\n") {
lineno++
f := strings.Fields(line)
if len(f) >= 2 && f[0] != "cmd" {
list = append(list, module.Version{Path: f[0], Version: f[1]})
}
}
return list, nil
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"encoding/json"
"cmd/go/internal/module"
)
func ParseGodepsJSON(file string, data []byte) ([]module.Version, error) {
var cfg struct {
ImportPath string
Deps []struct {
ImportPath string
Rev string
}
}
if err := json.Unmarshal(data, &cfg); err != nil {
return nil, err
}
var list []module.Version
for _, d := range cfg.Deps {
list = append(list, module.Version{Path: d.ImportPath, Version: d.Rev})
}
return list, nil
}
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import "cmd/go/internal/module"
var Converters = map[string]func(string, []byte) ([]module.Version, error){
"GLOCKFILE": ParseGLOCKFILE,
"Godeps/Godeps.json": ParseGodepsJSON,
"Gopkg.lock": ParseGopkgLock,
"dependencies.tsv": ParseDependenciesTSV,
"glide.lock": ParseGlideLock,
"vendor.conf": ParseVendorConf,
"vendor.yml": ParseVendorYML,
"vendor/manifest": ParseVendorManifest,
"vendor/vendor.json": ParseVendorJSON,
}
// Prefix is a line we write at the top of auto-converted go.mod files
// for dependencies before caching them.
// In case of bugs in the converter, if we bump this version number,
// then all the cached copies will be ignored.
const Prefix = "//vgo 0.0.4\n"
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"bytes"
"fmt"
"internal/testenv"
"io/ioutil"
"path/filepath"
"testing"
)
var extMap = map[string]string{
".dep": "Gopkg.lock",
".glide": "glide.lock",
".glock": "GLOCKFILE",
".godeps": "Godeps/Godeps.json",
".tsv": "dependencies.tsv",
".vconf": "vendor.conf",
".vjson": "vendor/vendor.json",
".vyml": "vendor.yml",
".vmanifest": "vendor/manifest",
}
func Test(t *testing.T) {
testenv.MustHaveExternalNetwork(t)
tests, _ := filepath.Glob("testdata/*")
if len(tests) == 0 {
t.Fatalf("no tests found")
}
for _, test := range tests {
file := filepath.Base(test)
ext := filepath.Ext(file)
if ext == ".out" {
continue
}
t.Run(file, func(t *testing.T) {
if extMap[ext] == "" {
t.Fatal("unknown extension")
}
if Converters[extMap[ext]] == nil {
t.Fatalf("Converters[%q] == nil", extMap[ext])
}
data, err := ioutil.ReadFile(test)
if err != nil {
t.Fatal(err)
}
out, err := Converters[extMap[ext]](test, data)
if err != nil {
t.Fatal(err)
}
want, err := ioutil.ReadFile(test[:len(test)-len(ext)] + ".out")
if err != nil {
t.Error(err)
}
var buf bytes.Buffer
for _, r := range out {
fmt.Fprintf(&buf, "%s %s\n", r.Path, r.Version)
}
if !bytes.Equal(buf.Bytes(), want) {
t.Errorf("have:\n%s\nwant:\n%s", buf.Bytes(), want)
}
})
}
}
cmd github.com/cockroachdb/c-protobuf/cmd/protoc
cmd github.com/cockroachdb/yacc
cmd github.com/gogo/protobuf/protoc-gen-gogo
cmd github.com/golang/lint/golint
cmd github.com/jteeuwen/go-bindata/go-bindata
cmd github.com/kisielk/errcheck
cmd github.com/robfig/glock
cmd github.com/tebeka/go2xunit
cmd golang.org/x/tools/cmd/goimports
cmd golang.org/x/tools/cmd/stringer
github.com/agtorre/gocolorize f42b554bf7f006936130c9bb4f971afd2d87f671
github.com/biogo/store e1f74b3c58befe661feed7fa4cf52436de753128
github.com/cockroachdb/c-lz4 6e71f140a365017bbe0904710007f8725fd3f809
github.com/cockroachdb/c-protobuf 0f9ab7b988ca7474cf76b9a961ab03c0552abcb3
github.com/cockroachdb/c-rocksdb 7fc876fe79b96de0e25069c9ae27e6444637bd54
github.com/cockroachdb/c-snappy 618733f9e5bab8463b9049117a335a7a1bfc9fd5
github.com/cockroachdb/yacc 572e006f8e6b0061ebda949d13744f5108389514
github.com/coreos/etcd 18ecc297bc913bed6fc093d66b1fa22020dba7dc
github.com/docker/docker 7374852be9def787921aea2ca831771982badecf
github.com/elazarl/go-bindata-assetfs 3dcc96556217539f50599357fb481ac0dc7439b9
github.com/gogo/protobuf 98e73e511a62a9c232152f94999112c80142a813
github.com/golang/lint 7b7f4364ff76043e6c3610281525fabc0d90f0e4
github.com/google/btree cc6329d4279e3f025a53a83c397d2339b5705c45
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
github.com/jteeuwen/go-bindata dce55d09e24ac40a6e725c8420902b86554f8046
github.com/julienschmidt/httprouter 6aacfd5ab513e34f7e64ea9627ab9670371b34e7
github.com/kisielk/errcheck 50b84cf7fa18ee2985b8c63ba3de5edd604b9259
github.com/kisielk/gotool d678387370a2eb9b5b0a33218bc8c9d8de15b6be
github.com/lib/pq a8d8d01c4f91602f876bf5aa210274e8203a6b45
github.com/montanaflynn/stats 44fb56da2a2a67d394dec0e18a82dd316f192529
github.com/peterh/liner 1bb0d1c1a25ed393d8feb09bab039b2b1b1fbced
github.com/robfig/glock cb3c3ec56de988289cab7bbd284eddc04dfee6c9
github.com/samalba/dockerclient 12570e600d71374233e5056ba315f657ced496c7
github.com/spf13/cobra 66816bcd0378e248c613e3c443c020f544c28804
github.com/spf13/pflag 67cbc198fd11dab704b214c1e629a97af392c085
github.com/tebeka/go2xunit d45000af2242dd0e7b8c7b07d82a1068adc5fd40
golang.org/x/crypto cc04154d65fb9296747569b107cfd05380b1ea3e
golang.org/x/net 8bfde94a845cb31000de3266ac83edbda58dab09
golang.org/x/text d4cc1b1e16b49d6dafc4982403b40fe89c512cd5
golang.org/x/tools d02228d1857b9f49cd0252788516ff5584266eb6
gopkg.in/yaml.v1 9f9df34309c04878acc86042b16630b0f696e1de
github.com/agtorre/gocolorize f42b554bf7f006936130c9bb4f971afd2d87f671
github.com/biogo/store e1f74b3c58befe661feed7fa4cf52436de753128
github.com/cockroachdb/c-lz4 6e71f140a365017bbe0904710007f8725fd3f809
github.com/cockroachdb/c-protobuf 0f9ab7b988ca7474cf76b9a961ab03c0552abcb3
github.com/cockroachdb/c-rocksdb 7fc876fe79b96de0e25069c9ae27e6444637bd54
github.com/cockroachdb/c-snappy 618733f9e5bab8463b9049117a335a7a1bfc9fd5
github.com/cockroachdb/yacc 572e006f8e6b0061ebda949d13744f5108389514
github.com/coreos/etcd 18ecc297bc913bed6fc093d66b1fa22020dba7dc
github.com/docker/docker 7374852be9def787921aea2ca831771982badecf
github.com/elazarl/go-bindata-assetfs 3dcc96556217539f50599357fb481ac0dc7439b9
github.com/gogo/protobuf 98e73e511a62a9c232152f94999112c80142a813
github.com/golang/lint 7b7f4364ff76043e6c3610281525fabc0d90f0e4
github.com/google/btree cc6329d4279e3f025a53a83c397d2339b5705c45
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
github.com/jteeuwen/go-bindata dce55d09e24ac40a6e725c8420902b86554f8046
github.com/julienschmidt/httprouter 6aacfd5ab513e34f7e64ea9627ab9670371b34e7
github.com/kisielk/errcheck 50b84cf7fa18ee2985b8c63ba3de5edd604b9259
github.com/kisielk/gotool d678387370a2eb9b5b0a33218bc8c9d8de15b6be
github.com/lib/pq a8d8d01c4f91602f876bf5aa210274e8203a6b45
github.com/montanaflynn/stats 44fb56da2a2a67d394dec0e18a82dd316f192529
github.com/peterh/liner 1bb0d1c1a25ed393d8feb09bab039b2b1b1fbced
github.com/robfig/glock cb3c3ec56de988289cab7bbd284eddc04dfee6c9
github.com/samalba/dockerclient 12570e600d71374233e5056ba315f657ced496c7
github.com/spf13/cobra 66816bcd0378e248c613e3c443c020f544c28804
github.com/spf13/pflag 67cbc198fd11dab704b214c1e629a97af392c085
github.com/tebeka/go2xunit d45000af2242dd0e7b8c7b07d82a1068adc5fd40
golang.org/x/crypto cc04154d65fb9296747569b107cfd05380b1ea3e
golang.org/x/net 8bfde94a845cb31000de3266ac83edbda58dab09
golang.org/x/text d4cc1b1e16b49d6dafc4982403b40fe89c512cd5
golang.org/x/tools d02228d1857b9f49cd0252788516ff5584266eb6
gopkg.in/yaml.v1 9f9df34309c04878acc86042b16630b0f696e1de
{
"ImportPath": "github.com/docker/machine",
"GoVersion": "go1.4.2",
"Deps": [
{
"ImportPath": "code.google.com/p/goauth2/oauth",
"Comment": "weekly-56",
"Rev": "afe77d958c701557ec5dc56f6936fcc194d15520"
},
{
"ImportPath": "github.com/MSOpenTech/azure-sdk-for-go",
"Comment": "v1.1-17-g515f3ec",
"Rev": "515f3ec74ce6a5b31e934cefae997c97bd0a1b1e"
},
{
"ImportPath": "github.com/cenkalti/backoff",
"Rev": "9831e1e25c874e0a0601b6dc43641071414eec7a"
},
{
"ImportPath": "github.com/codegangsta/cli",
"Comment": "1.2.0-64-ge1712f3",
"Rev": "e1712f381785e32046927f64a7c86fe569203196"
},
{
"ImportPath": "github.com/digitalocean/godo",
"Comment": "v0.5.0",
"Rev": "5478aae80694de1d2d0e02c386bbedd201266234"
},
{
"ImportPath": "github.com/docker/docker/dockerversion",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/engine",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/archive",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/fileutils",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/ioutils",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/mflag",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/parsers",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/pools",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/promise",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/system",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/term",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/timeutils",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/units",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/pkg/version",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar",
"Comment": "v1.5.0",
"Rev": "a8a31eff10544860d2188dddabdee4d727545796"
},
{
"ImportPath": "github.com/docker/libtrust",
"Rev": "c54fbb67c1f1e68d7d6f8d2ad7c9360404616a41"
},
{
"ImportPath": "github.com/google/go-querystring/query",
"Rev": "30f7a39f4a218feb5325f3aebc60c32a572a8274"
},
{
"ImportPath": "github.com/mitchellh/mapstructure",
"Rev": "740c764bc6149d3f1806231418adb9f52c11bcbf"
},
{
"ImportPath": "github.com/rackspace/gophercloud",
"Comment": "v1.0.0-558-ce0f487",
"Rev": "ce0f487f6747ab43c4e4404722df25349385bebd"
},
{
"ImportPath": "github.com/skarademir/naturalsort",
"Rev": "983d4d86054d80f91fd04dd62ec52c1d078ce403"
},
{
"ImportPath": "github.com/smartystreets/go-aws-auth",
"Rev": "1f0db8c0ee6362470abe06a94e3385927ed72a4b"
},
{
"ImportPath": "github.com/stretchr/testify/assert",
"Rev": "e4ec8152c15fc46bd5056ce65997a07c7d415325"
},
{
"ImportPath": "github.com/pyr/egoscale/src/egoscale",
"Rev": "bbaa67324aeeacc90430c1fe0a9c620d3929512e"
},
{
"ImportPath": "github.com/tent/http-link-go",
"Rev": "ac974c61c2f990f4115b119354b5e0b47550e888"
},
{
"ImportPath": "github.com/vmware/govcloudair",
"Comment": "v0.0.2",
"Rev": "66a23eaabc61518f91769939ff541886fe1dceef"
},
{
"ImportPath": "golang.org/x/crypto/ssh",
"Rev": "1fbbd62cfec66bd39d91e97749579579d4d3037e"
},
{
"ImportPath": "google.golang.org/api/compute/v1",
"Rev": "aa91ac681e18e52b1a0dfe29b9d8354e88c0dcf5"
},
{
"ImportPath": "google.golang.org/api/googleapi",
"Rev": "aa91ac681e18e52b1a0dfe29b9d8354e88c0dcf5"
}
]
}
code.google.com/p/goauth2/oauth afe77d958c701557ec5dc56f6936fcc194d15520
github.com/MSOpenTech/azure-sdk-for-go 515f3ec74ce6a5b31e934cefae997c97bd0a1b1e
github.com/cenkalti/backoff 9831e1e25c874e0a0601b6dc43641071414eec7a
github.com/codegangsta/cli e1712f381785e32046927f64a7c86fe569203196
github.com/digitalocean/godo 5478aae80694de1d2d0e02c386bbedd201266234
github.com/docker/docker/dockerversion a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/engine a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/archive a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/fileutils a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/ioutils a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/mflag a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/parsers a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/pools a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/promise a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/system a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/term a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/timeutils a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/units a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/pkg/version a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar a8a31eff10544860d2188dddabdee4d727545796
github.com/docker/libtrust c54fbb67c1f1e68d7d6f8d2ad7c9360404616a41
github.com/google/go-querystring/query 30f7a39f4a218feb5325f3aebc60c32a572a8274
github.com/mitchellh/mapstructure 740c764bc6149d3f1806231418adb9f52c11bcbf
github.com/rackspace/gophercloud ce0f487f6747ab43c4e4404722df25349385bebd
github.com/skarademir/naturalsort 983d4d86054d80f91fd04dd62ec52c1d078ce403
github.com/smartystreets/go-aws-auth 1f0db8c0ee6362470abe06a94e3385927ed72a4b
github.com/stretchr/testify/assert e4ec8152c15fc46bd5056ce65997a07c7d415325
github.com/pyr/egoscale/src/egoscale bbaa67324aeeacc90430c1fe0a9c620d3929512e
github.com/tent/http-link-go ac974c61c2f990f4115b119354b5e0b47550e888
github.com/vmware/govcloudair 66a23eaabc61518f91769939ff541886fe1dceef
golang.org/x/crypto/ssh 1fbbd62cfec66bd39d91e97749579579d4d3037e
google.golang.org/api/compute/v1 aa91ac681e18e52b1a0dfe29b9d8354e88c0dcf5
google.golang.org/api/googleapi aa91ac681e18e52b1a0dfe29b9d8354e88c0dcf5
hash: ead3ea293a6143fe41069ebec814bf197d8c43a92cc7666b1f7e21a419b46feb
updated: 2016-06-20T21:53:35.420817456Z
imports:
- name: github.com/BurntSushi/toml
version: f0aeabca5a127c4078abb8c8d64298b147264b55
- name: github.com/cpuguy83/go-md2man
version: a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa
subpackages:
- md2man
- name: github.com/fsnotify/fsnotify
version: 30411dbcefb7a1da7e84f75530ad3abe4011b4f8
- name: github.com/hashicorp/hcl
version: da486364306ed66c218be9b7953e19173447c18b
subpackages:
- hcl/ast
- hcl/parser
- hcl/token
- json/parser
- hcl/scanner
- hcl/strconv
- json/scanner
- json/token
- name: github.com/inconshreveable/mousetrap
version: 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
- name: github.com/magiconair/properties
version: c265cfa48dda6474e208715ca93e987829f572f8
- name: github.com/mitchellh/mapstructure
version: d2dd0262208475919e1a362f675cfc0e7c10e905
- name: github.com/russross/blackfriday
version: 1d6b8e9301e720b08a8938b8c25c018285885438
- name: github.com/shurcooL/sanitized_anchor_name
version: 10ef21a441db47d8b13ebcc5fd2310f636973c77
- name: github.com/spf13/cast
version: 27b586b42e29bec072fe7379259cc719e1289da6
- name: github.com/spf13/jwalterweatherman
version: 33c24e77fb80341fe7130ee7c594256ff08ccc46
- name: github.com/spf13/pflag
version: dabebe21bf790f782ea4c7bbd2efc430de182afd
- name: github.com/spf13/viper
version: c1ccc378a054ea8d4e38d8c67f6938d4760b53dd
- name: golang.org/x/sys
version: 62bee037599929a6e9146f29d10dd5208c43507d
subpackages:
- unix
- name: gopkg.in/yaml.v2
version: a83829b6f1293c91addabc89d0571c246397bbf4
- name: github.com/spf13/cobra
repo: https://github.com/dnephin/cobra
subpackages:
- doc
version: v1.3
devImports: []
github.com/BurntSushi/toml f0aeabca5a127c4078abb8c8d64298b147264b55
github.com/cpuguy83/go-md2man a65d4d2de4d5f7c74868dfa9b202a3c8be315aaa
github.com/fsnotify/fsnotify 30411dbcefb7a1da7e84f75530ad3abe4011b4f8
github.com/hashicorp/hcl da486364306ed66c218be9b7953e19173447c18b
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
github.com/magiconair/properties c265cfa48dda6474e208715ca93e987829f572f8
github.com/mitchellh/mapstructure d2dd0262208475919e1a362f675cfc0e7c10e905
github.com/russross/blackfriday 1d6b8e9301e720b08a8938b8c25c018285885438
github.com/shurcooL/sanitized_anchor_name 10ef21a441db47d8b13ebcc5fd2310f636973c77
github.com/spf13/cast 27b586b42e29bec072fe7379259cc719e1289da6
github.com/spf13/jwalterweatherman 33c24e77fb80341fe7130ee7c594256ff08ccc46
github.com/spf13/pflag dabebe21bf790f782ea4c7bbd2efc430de182afd
github.com/spf13/viper c1ccc378a054ea8d4e38d8c67f6938d4760b53dd
golang.org/x/sys 62bee037599929a6e9146f29d10dd5208c43507d
gopkg.in/yaml.v2 a83829b6f1293c91addabc89d0571c246397bbf4
github.com/spf13/cobra v1.3
github.com/davecgh/go-xdr/xdr2 4930550ba2e22f87187498acfd78348b15f4e7a8
github.com/google/uuid 6a5e28554805e78ea6141142aba763936c4761c0
github.com/kr/pretty 2ee9d7453c02ef7fa518a83ae23644eb8872186a
github.com/kr/pty 95d05c1eef33a45bd58676b6ce28d105839b8d0b
github.com/vmware/vmw-guestinfo 25eff159a728be87e103a0b8045e08273f4dbec4
{
"version": 0,
"dependencies": [
{
"importpath": "github.com/davecgh/go-xdr/xdr2",
"repository": "https://github.com/rasky/go-xdr",
"vcs": "git",
"revision": "4930550ba2e22f87187498acfd78348b15f4e7a8",
"branch": "improvements",
"path": "/xdr2",
"notests": true
},
{
"importpath": "github.com/google/uuid",
"repository": "https://github.com/google/uuid",
"vcs": "git",
"revision": "6a5e28554805e78ea6141142aba763936c4761c0",
"branch": "master",
"notests": true
},
{
"importpath": "github.com/kr/pretty",
"repository": "https://github.com/dougm/pretty",
"vcs": "git",
"revision": "2ee9d7453c02ef7fa518a83ae23644eb8872186a",
"branch": "govmomi",
"notests": true
},
{
"importpath": "github.com/kr/pty",
"repository": "https://github.com/kr/pty",
"vcs": "git",
"revision": "95d05c1eef33a45bd58676b6ce28d105839b8d0b",
"branch": "master",
"notests": true
},
{
"importpath": "github.com/vmware/vmw-guestinfo",
"repository": "https://github.com/vmware/vmw-guestinfo",
"vcs": "git",
"revision": "25eff159a728be87e103a0b8045e08273f4dbec4",
"branch": "master",
"notests": true
}
]
}
github.com/Azure/azure-sdk-for-go 902d95d9f311ae585ee98cfd18f418b467d60d5a
github.com/Azure/go-autorest 6f40a8acfe03270d792cb8155e2942c09d7cff95
github.com/ajstarks/svgo 89e3ac64b5b3e403a5e7c35ea4f98d45db7b4518
github.com/altoros/gosigma 31228935eec685587914528585da4eb9b073c76d
github.com/beorn7/perks 3ac7bf7a47d159a033b107610db8a1b6575507a4
github.com/bmizerany/pat c068ca2f0aacee5ac3681d68e4d0a003b7d1fd2c
github.com/coreos/go-systemd 7b2428fec40033549c68f54e26e89e7ca9a9ce31
github.com/dgrijalva/jwt-go 01aeca54ebda6e0fbfafd0a524d234159c05ec20
github.com/dustin/go-humanize 145fabdb1ab757076a70a886d092a3af27f66f4c
github.com/godbus/dbus 32c6cc29c14570de4cf6d7e7737d68fb2d01ad15
github.com/golang/protobuf 4bd1920723d7b7c925de087aa32e2187708897f7
github.com/google/go-querystring 9235644dd9e52eeae6fa48efd539fdc351a0af53
github.com/gorilla/schema 08023a0215e7fc27a9aecd8b8c50913c40019478
github.com/gorilla/websocket 804cb600d06b10672f2fbc0a336a7bee507a428e
github.com/gosuri/uitable 36ee7e946282a3fb1cfecd476ddc9b35d8847e42
github.com/joyent/gocommon ade826b8b54e81a779ccb29d358a45ba24b7809c
github.com/joyent/gosdc 2f11feadd2d9891e92296a1077c3e2e56939547d
github.com/joyent/gosign 0da0d5f1342065321c97812b1f4ac0c2b0bab56c
github.com/juju/ansiterm b99631de12cf04a906c1d4e4ec54fb86eae5863d
github.com/juju/blobstore 06056004b3d7b54bbb7984d830c537bad00fec21
github.com/juju/bundlechanges 7725027b95e0d54635e0fb11efc2debdcdf19f75
github.com/juju/cmd 9425a576247f348b9b40afe3b60085de63470de5
github.com/juju/description d3742c23561884cd7d759ef7142340af1d22cab0
github.com/juju/errors 1b5e39b83d1835fa480e0c2ddefb040ee82d58b3
github.com/juju/gnuflag 4e76c56581859c14d9d87e1ddbe29e1c0f10195f
github.com/juju/go4 40d72ab9641a2a8c36a9c46a51e28367115c8e59
github.com/juju/gojsonpointer afe8b77aa08f272b49e01b82de78510c11f61500
github.com/juju/gojsonreference f0d24ac5ee330baa21721cdff56d45e4ee42628e
github.com/juju/gojsonschema e1ad140384f254c82f89450d9a7c8dd38a632838
github.com/juju/gomaasapi cfbc096bd45f276c17a391efc4db710b60ae3ad7
github.com/juju/httpprof 14bf14c307672fd2456bdbf35d19cf0ccd3cf565
github.com/juju/httprequest 266fd1e9debf09c037a63f074d099a2da4559ece
github.com/juju/idmclient 4dc25171f675da4206b71695d3fd80e519ad05c1
github.com/juju/jsonschema a0ef8b74ebcffeeff9fc374854deb4af388f037e
github.com/juju/loggo 21bc4c63e8b435779a080e39e592969b7b90b889
github.com/juju/mempool 24974d6c264fe5a29716e7d56ea24c4bd904b7cc
github.com/juju/mutex 59c26ee163447c5c57f63ff71610d433862013de
github.com/juju/persistent-cookiejar 5243747bf8f2d0897f6c7a52799327dc97d585e8
github.com/juju/pubsub 9dcaca7eb4340dbf685aa7b3ad4cc4f8691a33d4
github.com/juju/replicaset 6b5becf2232ce76656ea765d8d915d41755a1513
github.com/juju/retry 62c62032529169c7ec02fa48f93349604c345e1f
github.com/juju/rfc ebdbbdb950cd039a531d15cdc2ac2cbd94f068ee
github.com/juju/romulus 98d6700423d63971f10ca14afea9ecf2b9b99f0f
github.com/juju/schema 075de04f9b7d7580d60a1e12a0b3f50bb18e6998
github.com/juju/terms-client 9b925afd677234e4146dde3cb1a11e187cbed64e
github.com/juju/testing fce9bc4ebf7a77310c262ac4884e03b778eae06a
github.com/juju/txn 28898197906200d603394d8e4ce537436529f1c5
github.com/juju/usso 68a59c96c178fbbad65926e7f93db50a2cd14f33
github.com/juju/utils 9f8aeb9b09e2d8c769be8317ccfa23f7eec62c26
github.com/juju/version 1f41e27e54f21acccf9b2dddae063a782a8a7ceb
github.com/juju/webbrowser 54b8c57083b4afb7dc75da7f13e2967b2606a507
github.com/juju/xml eb759a627588d35166bc505fceb51b88500e291e
github.com/juju/zip f6b1e93fa2e29a1d7d49b566b2b51efb060c982a
github.com/julienschmidt/httprouter 77a895ad01ebc98a4dc95d8355bc825ce80a56f6
github.com/lestrrat/go-jspointer f4881e611bdbe9fb413a7780721ef8400a1f2341
github.com/lestrrat/go-jsref e452c7b5801d1c6494c9e7e0cbc7498c0f88dfd1
github.com/lestrrat/go-jsschema b09d7650b822d2ea3dc83d5091a5e2acd8330051
github.com/lestrrat/go-jsval b1258a10419fe0693f7b35ad65cd5074bc0ba1e5
github.com/lestrrat/go-pdebug 2e6eaaa5717f81bda41d27070d3c966f40a1e75f
github.com/lestrrat/go-structinfo f74c056fe41f860aa6264478c664a6fff8a64298
github.com/lunixbochs/vtclean 4fbf7632a2c6d3fbdb9931439bdbbeded02cbe36
github.com/lxc/lxd 23da0234979fa6299565b91b529a6dbeb42ee36d
github.com/masterzen/azure-sdk-for-go ee4f0065d00cd12b542f18f5bc45799e88163b12
github.com/masterzen/simplexml 4572e39b1ab9fe03ee513ce6fc7e289e98482190
github.com/masterzen/winrm 7a535cd943fccaeed196718896beec3fb51aff41
github.com/masterzen/xmlpath 13f4951698adc0fa9c1dda3e275d489a24201161
github.com/mattn/go-colorable ed8eb9e318d7a84ce5915b495b7d35e0cfe7b5a8
github.com/mattn/go-isatty 66b8e73f3f5cda9f96b69efd03dd3d7fc4a5cdb8
github.com/mattn/go-runewidth d96d1bd051f2bd9e7e43d602782b37b93b1b5666
github.com/matttproud/golang_protobuf_extensions c12348ce28de40eed0136aa2b644d0ee0650e56c
github.com/nu7hatch/gouuid 179d4d0c4d8d407a32af483c2354df1d2c91e6c3
github.com/pkg/errors 839d9e913e063e28dfd0e6c7b7512793e0a48be9
github.com/prometheus/client_golang 575f371f7862609249a1be4c9145f429fe065e32
github.com/prometheus/client_model fa8ad6fec33561be4280a8f0514318c79d7f6cb6
github.com/prometheus/common dd586c1c5abb0be59e60f942c22af711a2008cb4
github.com/prometheus/procfs abf152e5f3e97f2fafac028d2cc06c1feb87ffa5
github.com/rogpeppe/fastuuid 6724a57986aff9bff1a1770e9347036def7c89f6
github.com/vmware/govmomi c0c7ce63df7edd78e713257b924c89d9a2dac119
golang.org/x/crypto 8e06e8ddd9629eb88639aba897641bff8031f1d3
golang.org/x/net ea47fc708ee3e20177f3ca3716217c4ab75942cb
golang.org/x/oauth2 11c60b6f71a6ad48ed6f93c65fa4c6f9b1b5b46a
golang.org/x/sys 7a6e5648d140666db5d920909e082ca00a87ba2c
golang.org/x/text 2910a502d2bf9e43193af9d68ca516529614eed3
google.golang.org/api 0d3983fb069cb6651353fc44c5cb604e263f2a93
google.golang.org/cloud f20d6dcccb44ed49de45ae3703312cb46e627db1
gopkg.in/amz.v3 8c3190dff075bf5442c9eedbf8f8ed6144a099e7
gopkg.in/check.v1 4f90aeace3a26ad7021961c297b22c42160c7b25
gopkg.in/errgo.v1 442357a80af5c6bf9b6d51ae791a39c3421004f3
gopkg.in/goose.v1 ac43167b647feacdd9a1e34ee81e574551bc748d
gopkg.in/ini.v1 776aa739ce9373377cd16f526cdf06cb4c89b40f
gopkg.in/juju/blobstore.v2 51fa6e26128d74e445c72d3a91af555151cc3654
gopkg.in/juju/charm.v6-unstable 83771c4919d6810bce5b7e63f46bea5fbfed0b93
gopkg.in/juju/charmrepo.v2-unstable e79aa298df89ea887c9bffec46063c24bfb730f7
gopkg.in/juju/charmstore.v5-unstable fd1eef3002fc6b6daff5e97efab6f5056d22dcc7
gopkg.in/juju/environschema.v1 7359fc7857abe2b11b5b3e23811a9c64cb6b01e0
gopkg.in/juju/jujusvg.v2 d82160011935ef79fc7aca84aba2c6f74700fe75
gopkg.in/juju/names.v2 0847c26d322a121e52614f969fb82eae2820c715
gopkg.in/juju/worker.v1 6965b9d826717287bb002e02d1fd4d079978083e
gopkg.in/macaroon-bakery.v1 469b44e6f1f9479e115c8ae879ef80695be624d5
gopkg.in/macaroon.v1 ab3940c6c16510a850e1c2dd628b919f0f3f1464
gopkg.in/mgo.v2 f2b6f6c918c452ad107eec89615f074e3bd80e33
gopkg.in/natefinch/lumberjack.v2 514cbda263a734ae8caac038dadf05f8f3f9f738
gopkg.in/natefinch/npipe.v2 c1b8fa8bdccecb0b8db834ee0b92fdbcfa606dd6
gopkg.in/retry.v1 c09f6b86ba4d5d2cf5bdf0665364aec9fd4815db
gopkg.in/tomb.v1 dd632973f1e7218eb1089048e0798ec9ae7dceb8
gopkg.in/yaml.v2 a3f3340b5840cee44f372bddb5880fcbc419b46a
github.com/Azure/azure-sdk-for-go git 902d95d9f311ae585ee98cfd18f418b467d60d5a 2016-07-20T05:16:58Z
github.com/Azure/go-autorest git 6f40a8acfe03270d792cb8155e2942c09d7cff95 2016-07-19T23:14:56Z
github.com/ajstarks/svgo git 89e3ac64b5b3e403a5e7c35ea4f98d45db7b4518 2014-10-04T21:11:59Z
github.com/altoros/gosigma git 31228935eec685587914528585da4eb9b073c76d 2015-04-08T14:52:32Z
github.com/beorn7/perks git 3ac7bf7a47d159a033b107610db8a1b6575507a4 2016-02-29T21:34:45Z
github.com/bmizerany/pat git c068ca2f0aacee5ac3681d68e4d0a003b7d1fd2c 2016-02-17T10:32:42Z
github.com/coreos/go-systemd git 7b2428fec40033549c68f54e26e89e7ca9a9ce31 2016-02-02T21:14:25Z
github.com/dgrijalva/jwt-go git 01aeca54ebda6e0fbfafd0a524d234159c05ec20 2016-07-05T20:30:06Z
github.com/dustin/go-humanize git 145fabdb1ab757076a70a886d092a3af27f66f4c 2014-12-28T07:11:48Z
github.com/godbus/dbus git 32c6cc29c14570de4cf6d7e7737d68fb2d01ad15 2016-05-06T22:25:50Z
github.com/golang/protobuf git 4bd1920723d7b7c925de087aa32e2187708897f7 2016-11-09T07:27:36Z
github.com/google/go-querystring git 9235644dd9e52eeae6fa48efd539fdc351a0af53 2016-04-01T23:30:42Z
github.com/gorilla/schema git 08023a0215e7fc27a9aecd8b8c50913c40019478 2016-04-26T23:15:12Z
github.com/gorilla/websocket git 804cb600d06b10672f2fbc0a336a7bee507a428e 2017-02-14T17:41:18Z
github.com/gosuri/uitable git 36ee7e946282a3fb1cfecd476ddc9b35d8847e42 2016-04-04T20:39:58Z
github.com/joyent/gocommon git ade826b8b54e81a779ccb29d358a45ba24b7809c 2016-03-20T19:31:33Z
github.com/joyent/gosdc git 2f11feadd2d9891e92296a1077c3e2e56939547d 2014-05-24T00:08:15Z
github.com/joyent/gosign git 0da0d5f1342065321c97812b1f4ac0c2b0bab56c 2014-05-24T00:07:34Z
github.com/juju/ansiterm git b99631de12cf04a906c1d4e4ec54fb86eae5863d 2016-09-07T23:45:32Z
github.com/juju/blobstore git 06056004b3d7b54bbb7984d830c537bad00fec21 2015-07-29T11:18:58Z
github.com/juju/bundlechanges git 7725027b95e0d54635e0fb11efc2debdcdf19f75 2016-12-15T16:06:52Z
github.com/juju/cmd git 9425a576247f348b9b40afe3b60085de63470de5 2017-03-20T01:37:09Z
github.com/juju/description git d3742c23561884cd7d759ef7142340af1d22cab0 2017-03-20T07:46:40Z
github.com/juju/errors git 1b5e39b83d1835fa480e0c2ddefb040ee82d58b3 2015-09-16T12:56:42Z
github.com/juju/gnuflag git 4e76c56581859c14d9d87e1ddbe29e1c0f10195f 2016-08-09T16:52:14Z
github.com/juju/go4 git 40d72ab9641a2a8c36a9c46a51e28367115c8e59 2016-02-22T16:32:58Z
github.com/juju/gojsonpointer git afe8b77aa08f272b49e01b82de78510c11f61500 2015-02-04T19:46:29Z
github.com/juju/gojsonreference git f0d24ac5ee330baa21721cdff56d45e4ee42628e 2015-02-04T19:46:33Z
github.com/juju/gojsonschema git e1ad140384f254c82f89450d9a7c8dd38a632838 2015-03-12T17:00:16Z
github.com/juju/gomaasapi git cfbc096bd45f276c17a391efc4db710b60ae3ad7 2017-02-27T07:51:07Z
github.com/juju/httpprof git 14bf14c307672fd2456bdbf35d19cf0ccd3cf565 2014-12-17T16:00:36Z
github.com/juju/httprequest git 266fd1e9debf09c037a63f074d099a2da4559ece 2016-10-06T15:09:09Z
github.com/juju/idmclient git 4dc25171f675da4206b71695d3fd80e519ad05c1 2017-02-09T16:27:49Z
github.com/juju/jsonschema git a0ef8b74ebcffeeff9fc374854deb4af388f037e 2016-11-02T18:19:19Z
github.com/juju/loggo git 21bc4c63e8b435779a080e39e592969b7b90b889 2017-02-22T12:20:47Z
github.com/juju/mempool git 24974d6c264fe5a29716e7d56ea24c4bd904b7cc 2016-02-05T10:49:27Z
github.com/juju/mutex git 59c26ee163447c5c57f63ff71610d433862013de 2016-06-17T01:09:07Z
github.com/juju/persistent-cookiejar git 5243747bf8f2d0897f6c7a52799327dc97d585e8 2016-11-15T13:33:28Z
github.com/juju/pubsub git 9dcaca7eb4340dbf685aa7b3ad4cc4f8691a33d4 2016-07-28T03:00:34Z
github.com/juju/replicaset git 6b5becf2232ce76656ea765d8d915d41755a1513 2016-11-25T16:08:49Z
github.com/juju/retry git 62c62032529169c7ec02fa48f93349604c345e1f 2015-10-29T02:48:21Z
github.com/juju/rfc git ebdbbdb950cd039a531d15cdc2ac2cbd94f068ee 2016-07-11T02:42:13Z
github.com/juju/romulus git 98d6700423d63971f10ca14afea9ecf2b9b99f0f 2017-01-23T14:29:29Z
github.com/juju/schema git 075de04f9b7d7580d60a1e12a0b3f50bb18e6998 2016-04-20T04:42:03Z
github.com/juju/terms-client git 9b925afd677234e4146dde3cb1a11e187cbed64e 2016-08-09T13:19:00Z
github.com/juju/testing git fce9bc4ebf7a77310c262ac4884e03b778eae06a 2017-02-22T09:01:19Z
github.com/juju/txn git 28898197906200d603394d8e4ce537436529f1c5 2016-11-16T04:07:55Z
github.com/juju/usso git 68a59c96c178fbbad65926e7f93db50a2cd14f33 2016-04-01T10:44:24Z
github.com/juju/utils git 9f8aeb9b09e2d8c769be8317ccfa23f7eec62c26 2017-02-15T08:19:00Z
github.com/juju/version git 1f41e27e54f21acccf9b2dddae063a782a8a7ceb 2016-10-31T05:19:06Z
github.com/juju/webbrowser git 54b8c57083b4afb7dc75da7f13e2967b2606a507 2016-03-09T14:36:29Z
github.com/juju/xml git eb759a627588d35166bc505fceb51b88500e291e 2015-04-13T13:11:21Z
github.com/juju/zip git f6b1e93fa2e29a1d7d49b566b2b51efb060c982a 2016-02-05T10:52:21Z
github.com/julienschmidt/httprouter git 77a895ad01ebc98a4dc95d8355bc825ce80a56f6 2015-10-13T22:55:20Z
github.com/lestrrat/go-jspointer git f4881e611bdbe9fb413a7780721ef8400a1f2341 2016-02-29T02:13:54Z
github.com/lestrrat/go-jsref git e452c7b5801d1c6494c9e7e0cbc7498c0f88dfd1 2016-06-01T01:32:40Z
github.com/lestrrat/go-jsschema git b09d7650b822d2ea3dc83d5091a5e2acd8330051 2016-09-03T13:19:57Z
github.com/lestrrat/go-jsval git b1258a10419fe0693f7b35ad65cd5074bc0ba1e5 2016-10-12T04:57:17Z
github.com/lestrrat/go-pdebug git 2e6eaaa5717f81bda41d27070d3c966f40a1e75f 2016-08-17T06:33:33Z
github.com/lestrrat/go-structinfo git f74c056fe41f860aa6264478c664a6fff8a64298 2016-03-08T13:11:05Z
github.com/lunixbochs/vtclean git 4fbf7632a2c6d3fbdb9931439bdbbeded02cbe36 2016-01-25T03:51:06Z
github.com/lxc/lxd git 23da0234979fa6299565b91b529a6dbeb42ee36d 2017-02-16T05:29:42Z
github.com/masterzen/azure-sdk-for-go git ee4f0065d00cd12b542f18f5bc45799e88163b12 2016-10-14T13:56:28Z
github.com/masterzen/simplexml git 4572e39b1ab9fe03ee513ce6fc7e289e98482190 2016-06-08T18:30:07Z
github.com/masterzen/winrm git 7a535cd943fccaeed196718896beec3fb51aff41 2016-10-14T15:10:40Z
github.com/masterzen/xmlpath git 13f4951698adc0fa9c1dda3e275d489a24201161 2014-02-18T18:59:01Z
github.com/mattn/go-colorable git ed8eb9e318d7a84ce5915b495b7d35e0cfe7b5a8 2016-07-31T23:54:17Z
github.com/mattn/go-isatty git 66b8e73f3f5cda9f96b69efd03dd3d7fc4a5cdb8 2016-08-06T12:27:52Z
github.com/mattn/go-runewidth git d96d1bd051f2bd9e7e43d602782b37b93b1b5666 2015-11-18T07:21:59Z
github.com/matttproud/golang_protobuf_extensions git c12348ce28de40eed0136aa2b644d0ee0650e56c 2016-04-24T11:30:07Z
github.com/nu7hatch/gouuid git 179d4d0c4d8d407a32af483c2354df1d2c91e6c3 2013-12-21T20:05:32Z
github.com/pkg/errors git 839d9e913e063e28dfd0e6c7b7512793e0a48be9 2016-10-02T05:25:12Z
github.com/prometheus/client_golang git 575f371f7862609249a1be4c9145f429fe065e32 2016-11-24T15:57:32Z
github.com/prometheus/client_model git fa8ad6fec33561be4280a8f0514318c79d7f6cb6 2015-02-12T10:17:44Z
github.com/prometheus/common git dd586c1c5abb0be59e60f942c22af711a2008cb4 2016-05-03T22:05:32Z
github.com/prometheus/procfs git abf152e5f3e97f2fafac028d2cc06c1feb87ffa5 2016-04-11T19:08:41Z
github.com/rogpeppe/fastuuid git 6724a57986aff9bff1a1770e9347036def7c89f6 2015-01-06T09:32:20Z
github.com/vmware/govmomi git c0c7ce63df7edd78e713257b924c89d9a2dac119 2016-06-30T15:37:42Z
golang.org/x/crypto git 8e06e8ddd9629eb88639aba897641bff8031f1d3 2016-09-22T17:06:29Z
golang.org/x/net git ea47fc708ee3e20177f3ca3716217c4ab75942cb 2015-08-29T23:03:18Z
golang.org/x/oauth2 git 11c60b6f71a6ad48ed6f93c65fa4c6f9b1b5b46a 2015-03-25T02:00:22Z
golang.org/x/sys git 7a6e5648d140666db5d920909e082ca00a87ba2c 2017-02-01T05:12:45Z
golang.org/x/text git 2910a502d2bf9e43193af9d68ca516529614eed3 2016-07-26T16:48:57Z
google.golang.org/api git 0d3983fb069cb6651353fc44c5cb604e263f2a93 2014-12-10T23:51:26Z
google.golang.org/cloud git f20d6dcccb44ed49de45ae3703312cb46e627db1 2015-03-19T22:36:35Z
gopkg.in/amz.v3 git 8c3190dff075bf5442c9eedbf8f8ed6144a099e7 2016-12-15T13:08:49Z
gopkg.in/check.v1 git 4f90aeace3a26ad7021961c297b22c42160c7b25 2016-01-05T16:49:36Z
gopkg.in/errgo.v1 git 442357a80af5c6bf9b6d51ae791a39c3421004f3 2016-12-22T12:58:16Z
gopkg.in/goose.v1 git ac43167b647feacdd9a1e34ee81e574551bc748d 2017-02-15T01:56:23Z
gopkg.in/ini.v1 git 776aa739ce9373377cd16f526cdf06cb4c89b40f 2016-02-22T23:24:41Z
gopkg.in/juju/blobstore.v2 git 51fa6e26128d74e445c72d3a91af555151cc3654 2016-01-25T02:37:03Z
gopkg.in/juju/charm.v6-unstable git 83771c4919d6810bce5b7e63f46bea5fbfed0b93 2016-10-03T20:31:18Z
gopkg.in/juju/charmrepo.v2-unstable git e79aa298df89ea887c9bffec46063c24bfb730f7 2016-11-17T15:25:28Z
gopkg.in/juju/charmstore.v5-unstable git fd1eef3002fc6b6daff5e97efab6f5056d22dcc7 2016-09-16T10:09:07Z
gopkg.in/juju/environschema.v1 git 7359fc7857abe2b11b5b3e23811a9c64cb6b01e0 2015-11-04T11:58:10Z
gopkg.in/juju/jujusvg.v2 git d82160011935ef79fc7aca84aba2c6f74700fe75 2016-06-09T10:52:15Z
gopkg.in/juju/names.v2 git 0847c26d322a121e52614f969fb82eae2820c715 2016-11-02T13:43:03Z
gopkg.in/juju/worker.v1 git 6965b9d826717287bb002e02d1fd4d079978083e 2017-03-08T00:24:58Z
gopkg.in/macaroon-bakery.v1 git 469b44e6f1f9479e115c8ae879ef80695be624d5 2016-06-22T12:14:21Z
gopkg.in/macaroon.v1 git ab3940c6c16510a850e1c2dd628b919f0f3f1464 2015-01-21T11:42:31Z
gopkg.in/mgo.v2 git f2b6f6c918c452ad107eec89615f074e3bd80e33 2016-08-18T01:52:18Z
gopkg.in/natefinch/lumberjack.v2 git 514cbda263a734ae8caac038dadf05f8f3f9f738 2016-01-25T11:17:49Z
gopkg.in/natefinch/npipe.v2 git c1b8fa8bdccecb0b8db834ee0b92fdbcfa606dd6 2016-06-21T03:49:01Z
gopkg.in/retry.v1 git c09f6b86ba4d5d2cf5bdf0665364aec9fd4815db 2016-10-25T18:14:30Z
gopkg.in/tomb.v1 git dd632973f1e7218eb1089048e0798ec9ae7dceb8 2014-10-24T13:56:13Z
gopkg.in/yaml.v2 git a3f3340b5840cee44f372bddb5880fcbc419b46a 2017-02-08T14:18:51Z
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
github.com/Microsoft/hcsshim v0.6.5
github.com/Microsoft/go-winio v0.4.5
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609
github.com/gorilla/context v1.1
github.com/gorilla/mux v1.1
github.com/Microsoft/opengcs v0.3.4
github.com/kr/pty 5cf931ef8f
github.com/mattn/go-shellwords v1.0.3
github.com/sirupsen/logrus v1.0.3
github.com/tchap/go-patricia v2.2.6
github.com/vdemeester/shakers 24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3
golang.org/x/net 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6
golang.org/x/sys 07c182904dbd53199946ba614a412c61d3c548f5
github.com/docker/go-units 9e638d38cf6977a37a8ea0078f3ee75a7cdb2dd1
github.com/docker/go-connections 3ede32e2033de7505e6500d6c868c2b9ed9f169d
golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756
github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
github.com/pmezard/go-difflib v1.0.0
github.com/gotestyourself/gotestyourself v1.1.0
github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
github.com/imdario/mergo 0.2.1
golang.org/x/sync de49d9dcd27d4f764488181bea099dfe6179bcf0
github.com/containerd/continuity 22694c680ee48fb8f50015b44618517e2bde77e8
github.com/moby/buildkit aaff9d591ef128560018433fe61beb802e149de8
github.com/tonistiigi/fsutil dea3a0da73aee887fc02142d995be764106ac5e2
github.com/docker/libnetwork 68f1039f172434709a4550fe92e3e058406c74ce
github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b
github.com/hashicorp/memberlist v0.1.0
github.com/sean-/seed e2103e2c35297fb7e17febb81e49b312087a2372
github.com/hashicorp/go-sockaddr acd314c5781ea706c710d9ea70069fd2e110d61d
github.com/hashicorp/go-multierror fcdddc395df1ddf4247c69bd436e84cfa0733f7e
github.com/hashicorp/serf 598c54895cc5a7b1a24a398d635e8c0ea0959870
github.com/docker/libkv 1d8431073ae03cdaedb198a89722f3aab6d418ef
github.com/vishvananda/netns 604eaf189ee867d8c147fafc28def2394e878d25
github.com/vishvananda/netlink bd6d5de5ccef2d66b0a26177928d0d8895d7f969
github.com/BurntSushi/toml f706d00e3de6abe700c994cdd545a1a4915af060
github.com/samuel/go-zookeeper d0e0d8e11f318e000a8cc434616d69e329edc374
github.com/deckarep/golang-set ef32fa3046d9f249d399f98ebaf9be944430fd1d
github.com/coreos/etcd v3.2.1
github.com/coreos/go-semver v0.2.0
github.com/ugorji/go f1f1a805ed361a0e078bb537e4ea78cd37dcf065
github.com/hashicorp/consul v0.5.2
github.com/boltdb/bolt fff57c100f4dea1905678da7e90d92429dff2904
github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
github.com/vbatts/tar-split v0.10.1
github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb
github.com/mistifyio/go-zfs 22c9b32c84eb0d0c6f4043b6e90fc94073de92fa
github.com/pborman/uuid v1.0
google.golang.org/grpc v1.3.0
github.com/opencontainers/runc 0351df1c5a66838d0c392b4ac4cf9450de844e2d
github.com/opencontainers/image-spec 372ad780f63454fbbbbcc7cf80e5b90245c13e13
github.com/opencontainers/runtime-spec v1.0.0
github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0
github.com/coreos/go-systemd v4
github.com/godbus/dbus v4.0.0
github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852
github.com/golang/protobuf 7a211bcf3bce0e3f1d74f9894916e6f116ae83b4
github.com/Graylog2/go-gelf v2
github.com/fluent/fluent-logger-golang v1.2.1
github.com/philhofer/fwd 98c11a7a6ec829d672b03833c3d69a7fae1ca972
github.com/tinylib/msgp 75ee40d2601edf122ef667e2a07d600d4c44490c
github.com/fsnotify/fsnotify v1.4.2
github.com/aws/aws-sdk-go v1.4.22
github.com/go-ini/ini 060d7da055ba6ec5ea7a31f116332fe5efa04ce0
github.com/jmespath/go-jmespath 0b12d6b521d83fc7f755e7cfc1b1fbdd35a01a74
github.com/bsphere/le_go 7a984a84b5492ae539b79b62fb4a10afc63c7bcf
golang.org/x/oauth2 96382aa079b72d8c014eb0c50f6c223d1e6a2de0
google.golang.org/api 3cc2e591b550923a2c5f0ab5a803feda924d5823
cloud.google.com/go 9d965e63e8cceb1b5d7977a202f0fcb8866d6525
github.com/googleapis/gax-go da06d194a00e19ce00d9011a13931c3f6f6887c7
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
github.com/containerd/containerd 06b9cb35161009dcb7123345749fef02f7cea8e0
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
github.com/docker/swarmkit 872861d2ae46958af7ead1d5fffb092c73afbaf0
github.com/gogo/protobuf v0.4
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a
github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e
golang.org/x/crypto 558b6879de74bc843225cde5686419267ff707ca
golang.org/x/time a4bde12657593d5e90d0533a3e4fd95e635124cb
github.com/hashicorp/go-memdb cb9a474f84cc5e41b273b20c6927680b2a8776ad
github.com/hashicorp/go-immutable-radix 8e8ed81f8f0bf1bdd829593fdd5c29922c1ea990
github.com/hashicorp/golang-lru a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4
github.com/coreos/pkg fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8
github.com/pivotal-golang/clock 3fd3c1944c59d9742e1cd333672181cd1a6f9fa0
github.com/prometheus/client_golang 52437c81da6b127a9925d17eb3a382a2e5fd395e
github.com/beorn7/perks 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9
github.com/prometheus/client_model fa8ad6fec33561be4280a8f0514318c79d7f6cb6
github.com/prometheus/common ebdfc6da46522d58825777cf1f90490a5b1ef1d8
github.com/prometheus/procfs abf152e5f3e97f2fafac028d2cc06c1feb87ffa5
github.com/matttproud/golang_protobuf_extensions v1.0.0
github.com/pkg/errors 839d9e913e063e28dfd0e6c7b7512793e0a48be9
github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f0f7e0
github.com/spf13/cobra v1.5.1
github.com/spf13/pflag 9ff6c6923cfffbcd502984b8e0c80539a94968b7
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c
github.com/docker/go-metrics d466d4f6fd960e01820085bd7e1a24426ee7ef18
github.com/opencontainers/selinux v1.0.0-rc1
# the following lines are in sorted order, FYI
github.com/Azure/go-ansiterm d6e3b3328b783f23731bc4d058875b0371ff8109
github.com/Microsoft/hcsshim v0.6.5
github.com/Microsoft/go-winio v0.4.5
github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76
github.com/docker/libtrust 9cbd2a1374f46905c68a4eb3694a130610adc62a
github.com/go-check/check 4ed411733c5785b40214c70bce814c3a3a689609 https://github.com/cpuguy83/check.git
github.com/gorilla/context v1.1
github.com/gorilla/mux v1.1
github.com/Microsoft/opengcs v0.3.4
github.com/kr/pty 5cf931ef8f
github.com/mattn/go-shellwords v1.0.3
github.com/sirupsen/logrus v1.0.3
github.com/tchap/go-patricia v2.2.6
github.com/vdemeester/shakers 24d7f1d6a71aa5d9cbe7390e4afb66b7eef9e1b3
golang.org/x/net 7dcfb8076726a3fdd9353b6b8a1f1b6be6811bd6
golang.org/x/sys 07c182904dbd53199946ba614a412c61d3c548f5
github.com/docker/go-units 9e638d38cf6977a37a8ea0078f3ee75a7cdb2dd1
github.com/docker/go-connections 3ede32e2033de7505e6500d6c868c2b9ed9f169d
golang.org/x/text f72d8390a633d5dfb0cc84043294db9f6c935756
github.com/stretchr/testify 4d4bfba8f1d1027c4fdbe371823030df51419987
github.com/pmezard/go-difflib v1.0.0
github.com/gotestyourself/gotestyourself v1.1.0
github.com/RackSec/srslog 456df3a81436d29ba874f3590eeeee25d666f8a5
github.com/imdario/mergo 0.2.1
golang.org/x/sync de49d9dcd27d4f764488181bea099dfe6179bcf0
github.com/containerd/continuity 22694c680ee48fb8f50015b44618517e2bde77e8
github.com/moby/buildkit aaff9d591ef128560018433fe61beb802e149de8
github.com/tonistiigi/fsutil dea3a0da73aee887fc02142d995be764106ac5e2
#get libnetwork packages
github.com/docker/libnetwork 68f1039f172434709a4550fe92e3e058406c74ce
github.com/docker/go-events 9461782956ad83b30282bf90e31fa6a70c255ba9
github.com/armon/go-radix e39d623f12e8e41c7b5529e9a9dd67a1e2261f80
github.com/armon/go-metrics eb0af217e5e9747e41dd5303755356b62d28e3ec
github.com/hashicorp/go-msgpack 71c2886f5a673a35f909803f38ece5810165097b
github.com/hashicorp/memberlist v0.1.0
github.com/sean-/seed e2103e2c35297fb7e17febb81e49b312087a2372
github.com/hashicorp/go-sockaddr acd314c5781ea706c710d9ea70069fd2e110d61d
github.com/hashicorp/go-multierror fcdddc395df1ddf4247c69bd436e84cfa0733f7e
github.com/hashicorp/serf 598c54895cc5a7b1a24a398d635e8c0ea0959870
github.com/docker/libkv 1d8431073ae03cdaedb198a89722f3aab6d418ef
github.com/vishvananda/netns 604eaf189ee867d8c147fafc28def2394e878d25
github.com/vishvananda/netlink bd6d5de5ccef2d66b0a26177928d0d8895d7f969
github.com/BurntSushi/toml f706d00e3de6abe700c994cdd545a1a4915af060
github.com/samuel/go-zookeeper d0e0d8e11f318e000a8cc434616d69e329edc374
github.com/deckarep/golang-set ef32fa3046d9f249d399f98ebaf9be944430fd1d
github.com/coreos/etcd v3.2.1
github.com/coreos/go-semver v0.2.0
github.com/ugorji/go f1f1a805ed361a0e078bb537e4ea78cd37dcf065
github.com/hashicorp/consul v0.5.2
github.com/boltdb/bolt fff57c100f4dea1905678da7e90d92429dff2904
github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7
# get graph and distribution packages
github.com/docker/distribution edc3ab29cdff8694dd6feb85cfeb4b5f1b38ed9c
github.com/vbatts/tar-split v0.10.1
github.com/opencontainers/go-digest a6d0ee40d4207ea02364bd3b9e8e77b9159ba1eb
# get go-zfs packages
github.com/mistifyio/go-zfs 22c9b32c84eb0d0c6f4043b6e90fc94073de92fa
github.com/pborman/uuid v1.0
google.golang.org/grpc v1.3.0
# When updating, also update RUNC_COMMIT in hack/dockerfile/binaries-commits accordingly
github.com/opencontainers/runc 0351df1c5a66838d0c392b4ac4cf9450de844e2d
github.com/opencontainers/image-spec 372ad780f63454fbbbbcc7cf80e5b90245c13e13
github.com/opencontainers/runtime-spec v1.0.0
github.com/seccomp/libseccomp-golang 32f571b70023028bd57d9288c20efbcb237f3ce0
# libcontainer deps (see src/github.com/opencontainers/runc/Godeps/Godeps.json)
github.com/coreos/go-systemd v4
github.com/godbus/dbus v4.0.0
github.com/syndtr/gocapability 2c00daeb6c3b45114c80ac44119e7b8801fdd852
github.com/golang/protobuf 7a211bcf3bce0e3f1d74f9894916e6f116ae83b4
# gelf logging driver deps
github.com/Graylog2/go-gelf v2
github.com/fluent/fluent-logger-golang v1.2.1
# fluent-logger-golang deps
github.com/philhofer/fwd 98c11a7a6ec829d672b03833c3d69a7fae1ca972
github.com/tinylib/msgp 75ee40d2601edf122ef667e2a07d600d4c44490c
# fsnotify
github.com/fsnotify/fsnotify v1.4.2
# awslogs deps
github.com/aws/aws-sdk-go v1.4.22
github.com/go-ini/ini 060d7da055ba6ec5ea7a31f116332fe5efa04ce0
github.com/jmespath/go-jmespath 0b12d6b521d83fc7f755e7cfc1b1fbdd35a01a74
# logentries
github.com/bsphere/le_go 7a984a84b5492ae539b79b62fb4a10afc63c7bcf
# gcplogs deps
golang.org/x/oauth2 96382aa079b72d8c014eb0c50f6c223d1e6a2de0
google.golang.org/api 3cc2e591b550923a2c5f0ab5a803feda924d5823
cloud.google.com/go 9d965e63e8cceb1b5d7977a202f0fcb8866d6525
github.com/googleapis/gax-go da06d194a00e19ce00d9011a13931c3f6f6887c7
google.golang.org/genproto d80a6e20e776b0b17a324d0ba1ab50a39c8e8944
# containerd
github.com/containerd/containerd 06b9cb35161009dcb7123345749fef02f7cea8e0
github.com/tonistiigi/fifo 1405643975692217d6720f8b54aeee1bf2cd5cf4
# cluster
github.com/docker/swarmkit 872861d2ae46958af7ead1d5fffb092c73afbaf0
github.com/gogo/protobuf v0.4
github.com/cloudflare/cfssl 7fb22c8cba7ecaf98e4082d22d65800cf45e042a
github.com/google/certificate-transparency d90e65c3a07988180c5b1ece71791c0b6506826e
golang.org/x/crypto 558b6879de74bc843225cde5686419267ff707ca
golang.org/x/time a4bde12657593d5e90d0533a3e4fd95e635124cb
github.com/hashicorp/go-memdb cb9a474f84cc5e41b273b20c6927680b2a8776ad
github.com/hashicorp/go-immutable-radix 8e8ed81f8f0bf1bdd829593fdd5c29922c1ea990
github.com/hashicorp/golang-lru a0d98a5f288019575c6d1f4bb1573fef2d1fcdc4
github.com/coreos/pkg fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8
github.com/pivotal-golang/clock 3fd3c1944c59d9742e1cd333672181cd1a6f9fa0
github.com/prometheus/client_golang 52437c81da6b127a9925d17eb3a382a2e5fd395e
github.com/beorn7/perks 4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9
github.com/prometheus/client_model fa8ad6fec33561be4280a8f0514318c79d7f6cb6
github.com/prometheus/common ebdfc6da46522d58825777cf1f90490a5b1ef1d8
github.com/prometheus/procfs abf152e5f3e97f2fafac028d2cc06c1feb87ffa5
github.com/matttproud/golang_protobuf_extensions v1.0.0
github.com/pkg/errors 839d9e913e063e28dfd0e6c7b7512793e0a48be9
github.com/grpc-ecosystem/go-grpc-prometheus 6b7015e65d366bf3f19b2b2a000a831940f0f7e0
# cli
github.com/spf13/cobra v1.5.1 https://github.com/dnephin/cobra.git
github.com/spf13/pflag 9ff6c6923cfffbcd502984b8e0c80539a94968b7
github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
github.com/Nvveen/Gotty a8b993ba6abdb0e0c12b0125c603323a71c7790c https://github.com/ijc25/Gotty
# metrics
github.com/docker/go-metrics d466d4f6fd960e01820085bd7e1a24426ee7ef18
github.com/opencontainers/selinux v1.0.0-rc1
# archive/tar
# mkdir -p ./vendor/archive
# git clone git://github.com/tonistiigi/go-1.git ./go
# git --git-dir ./go/.git --work-tree ./go checkout revert-prefix-ignore
# cp -a go/src/archive/tar ./vendor/archive/tar
# rm -rf ./go
# vndr
github.com/kr/pretty 737b74a46c4bf788349f72cb256fed10aea4d0ac
github.com/kr/text 7cafcd837844e784b526369c9bce262804aebc60
github.com/maruel/ut a9c9f15ccfa6f8b90182a53df32f4745586fbae3
github.com/mattn/go-colorable 9056b7a9f2d1f2d96498d6d146acd1f9d5ed3d59
github.com/mattn/go-isatty 56b76bdf51f7708750eac80fa38b952bb9f32639
github.com/mgutz/ansi c286dcecd19ff979eeb73ea444e479b903f2cfcb
github.com/pmezard/go-difflib 792786c7400a136282c1664665ae0a8db921c6c2
golang.org/x/sys a646d33e2ee3172a661fc09bca23bb4889a41bc8
vendors:
- path: github.com/kr/pretty
rev: 737b74a46c4bf788349f72cb256fed10aea4d0ac
- path: github.com/kr/text
rev: 7cafcd837844e784b526369c9bce262804aebc60
- path: github.com/maruel/ut
rev: a9c9f15ccfa6f8b90182a53df32f4745586fbae3
- path: github.com/mattn/go-colorable
rev: 9056b7a9f2d1f2d96498d6d146acd1f9d5ed3d59
- path: github.com/mattn/go-isatty
rev: 56b76bdf51f7708750eac80fa38b952bb9f32639
- path: github.com/mgutz/ansi
rev: c286dcecd19ff979eeb73ea444e479b903f2cfcb
- path: github.com/pmezard/go-difflib
rev: 792786c7400a136282c1664665ae0a8db921c6c2
- path: golang.org/x/sys
rev: a646d33e2ee3172a661fc09bca23bb4889a41bc8
This diff is collapsed.
This diff is collapsed.
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
branch = "master"
name = "bazil.org/fuse"
packages = [".","fs","fuseutil"]
revision = "371fbbdaa8987b715bdd21d6adc4c9b20155f748"
[[projects]]
branch = "master"
name = "github.com/NYTimes/gziphandler"
packages = ["."]
revision = "97ae7fbaf81620fe97840685304a78a306a39c64"
[[projects]]
branch = "master"
name = "github.com/golang/protobuf"
packages = ["proto"]
revision = "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9"
[[projects]]
branch = "master"
name = "github.com/russross/blackfriday"
packages = ["."]
revision = "6d1ef893fcb01b4f50cb6e57ed7df3e2e627b6b2"
[[projects]]
branch = "master"
name = "golang.org/x/crypto"
packages = ["acme","acme/autocert","hkdf"]
revision = "13931e22f9e72ea58bb73048bc752b48c6d4d4ac"
[[projects]]
branch = "master"
name = "golang.org/x/net"
packages = ["context"]
revision = "4b14673ba32bee7f5ac0f990a48f033919fd418b"
[[projects]]
branch = "master"
name = "golang.org/x/text"
packages = ["cases","internal","internal/gen","internal/tag","internal/triegen","internal/ucd","language","runes","secure/bidirule","secure/precis","transform","unicode/bidi","unicode/cldr","unicode/norm","unicode/rangetable","width"]
revision = "6eab0e8f74e86c598ec3b6fad4888e0c11482d48"
[[projects]]
branch = "v2"
name = "gopkg.in/yaml.v2"
packages = ["."]
revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "2246e647ba1c78b0b9f948f9fb072fff1467284fb138709c063e99736f646b90"
solver-name = "gps-cdcl"
solver-version = 1
bazil.org/fuse 371fbbdaa8987b715bdd21d6adc4c9b20155f748
github.com/NYTimes/gziphandler 97ae7fbaf81620fe97840685304a78a306a39c64
github.com/golang/protobuf 1643683e1b54a9e88ad26d98f81400c8c9d9f4f9
github.com/russross/blackfriday 6d1ef893fcb01b4f50cb6e57ed7df3e2e627b6b2
golang.org/x/crypto 13931e22f9e72ea58bb73048bc752b48c6d4d4ac
golang.org/x/net 4b14673ba32bee7f5ac0f990a48f033919fd418b
golang.org/x/text 6eab0e8f74e86c598ec3b6fad4888e0c11482d48
gopkg.in/yaml.v2 eb3733d160e74a9c7e442f435eb3bea458e1d19f
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package modconv
import (
"strings"
"cmd/go/internal/module"
)
func ParseDependenciesTSV(file string, data []byte) ([]module.Version, error) {
var list []module.Version
for lineno, line := range strings.Split(string(data), "\n") {
lineno++
f := strings.Split(line, "\t")
if len(f) >= 3 {
list = append(list, module.Version{Path: f[0], Version: f[2]})
}
}
return list, nil
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package bitbucket
import (
"fmt"
"strings"
"cmd/go/internal/modfetch/codehost"
"cmd/go/internal/modfetch/gitrepo"
)
func Lookup(path string) (codehost.Repo, error) {
f := strings.Split(path, "/")
if len(f) < 3 || f[0] != "bitbucket.org" {
return nil, fmt.Errorf("bitbucket repo must be bitbucket.org/org/project")
}
path = f[0] + "/" + f[1] + "/" + f[2]
return gitrepo.Repo("https://"+path, path)
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment