Giter VIP home page Giter VIP logo

manul's Introduction

MANUL Build Status License Go Report Card

madness

Manul is a vendoring utility for Go programs.

Installation

manul can be obtained using go get:

go get github.com/kovetskiy/manul

Packages are also available for Ubuntu/Debian and Arch Linux.

What's the reason for yet another utility?

Because all other vendor utilities suffer from the following:

  • Some wrap the go binary and spoof the GOPATH env variable. You will have a non-go-gettable project which needs additional software in order to compile and run;

  • Some copy the source code of dependencies into the vendor directory:

    • It will be nearly impossible to find anything using GitHub Search, because you will get many false-positive results;
    • Updating dependencies will require manual intervention and committing a lot of modified lines straight into the main repo;
    • You will not be able to tell what version of dependency your project is using will by looking at repository; you have to keep versions in the additional ambiguous file with vendors associated with commits.
  • Various architecture problems:

    • Impossible to update all or specific vendored dependencies;
    • Impossible to rollback vendored dependencies to specific version;
    • Impossible to remove unused vendored dependencies;
    • Impossible to lock version of vendored dependency.

Solution

We all love git, it's a very powerful instrument. Why don't we use its power for vendoring dependencies using an awesome feature, which is called git submodule?

With git submodule you will have a git repository for each dependency. They can be managed in the same way as main project by git.

Pros:

  • No need for additional software for building/running your Go project;

  • No need for additional JSON/TOML/YAML file for storing dependencies;

  • Update vendored dependencies directly from remote origins;

  • Rollback changes in dependencies;

  • Go-gettable

git submodule might look like a Silver Bullet, but it's still clumsy to work with manually. We want to have a powerful yet simple interface for vendoring dependencies using this technology.

manul can do it for us.

Usage

Who needs a documentation when there are GIFs?

First of all, we should request dependencies which we have in our project. To do this, just run manul with -Q (query) flag. It will output all the project imports (dependencies), like this:

first query

For example, we have six dependencies, let's lock versions of critical dependencies by adding submodules: in our case it's zhash and blackfriday packages.

For locking versions (installing dependencies) we should use -I (install) flag and specify dependencies, which we wish to install:

install two dependencies

After installation we can have a look for vendored and non-vendored dependencies by using flag -Q. After previous step we should see git commits along with two already vendored dependencies (zhash and blackfriday):

query after install

Let's install submodules for remaining dependencies, go the limit! Just run manul with flag -I without specifying any dependencies, manul will install all detected dependencies with skipping already vendored:

install all dependencies

Wow, that was crazy! Now, to update some vendored dependencies, for example, docopt-go package, manul should be invoked with the flag -U and import path (github.com/docopt/docopt-go):

update docopt

manul can be used to remove specified submodules of vendored dependencies by using -R (remove) flag and specifying dependencies import path:

removing

By the way, manul can detect and remove unused vendored dependencies using -C (clean) flag:

unused dependencies

manul can also get you a specific version of a dependency by using a commit-ish, for example:

  • manul -I golang.org/x/foo=34a235h1 will install foo at the specified commit
  • manul -U github.com/x/bar=this-tag will update it to this-tag version.

Let's summarize:

  • -I [<dependency>...] - install git submodules for specified/all dependencies;
  • -U [<dependency>...] - update specified/all already vendored dependencies;
  • -R [<dependency>...] - remove git submodules for specified/all dependencies;
  • -Q [<dependency>...] - list all used dependencies;
  • -C - detect and remove all git submodules for unused vendored dependencies.

You can see similar help message by passing -h or --help flag.

manul's People

Contributors

blang avatar hnakamur avatar icholy avatar ivy avatar johansglock avatar johansja avatar klautcomputing avatar kovetskiy avatar seletskiy avatar xyproto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

manul's Issues

import own package

Hi !

just one note

if you have import your package inside of your sources, then manul tried to vendor it again.

example:
my package is github.com/demo/abc

inside of main.go i have something like that

package main

import (
        "github.com/demo/abc/src/backend/controllers"
        "github.com/demo/abc/src/backend/controllers/admin"
        "github.com/demo/abc/src/backend/model"
        "github.com/labstack/echo"
        "github.com/labstack/echo/middleware"
        "github.com/labstack/echo/engine/standard"
        "golang.org/x/net/websocket"
        jwt "github.com/dgrijalva/jwt-go"
        "fmt"
        "net"
        "sync"
        "os"
)

and I'll try to run manul -I
then, my package will be 'vendored' inside of my package

jenya@MBP:backend $ manul -I
2016/05/11 08:31:51 skipping github.com/astaxie/beego, already vendored
2016/05/11 08:31:51 skipping github.com/dgrijalva/jwt-go, already vendored
.....
2016/05/11 08:31:51 adding submodule for github.com/demo/abc   <---<<<

Thank you!

Support actual copy of drpendencies

Hi,

this looks really nice.

Could you clear up a question: What happens if a "vendored" repo in manul's sense is deleted from GitHub? Will manual still work or will it break since it cannot find a dependency?

I am fine with submodules, but I thought vendoring means to be safe in case someone removes their GitHub repo you rely on.

So maybe manul could keep a copy along the submodule.

Fail to build

I've clone your repo.
checkout to branch pkg-debian

Then try to build

./build.sh
golang.org/x/crypto/ssh
github.com/kovetskiy/executil
github.com/kovetskiy/manul
# github.com/kovetskiy/manul
src/github.com/kovetskiy/manul/imports.go:19: undefined: build.IgnoreVendor
src/github.com/kovetskiy/manul/submodule.go:119: undefined: build.IgnoreVendor

Getting this error.

Vendoring test deps fails when using external test package

Using this repo as an example, executing manul -I -t results in no dependencies being installed:

2018-02-01 22:17:41  [INFO]: all dependencies already vendored

I suspect this is because of the use of an external package for tests which uses the key XTestImports instead of TestImports in the output of go list -e -json github.com/ivy/manul-test-deps-bug:

{
	"Dir": "/Users/ivy/src/github.com/ivy/manul-test-deps-bug",
	"ImportPath": "github.com/ivy/manul-test-deps-bug",
	"Name": "main",
	"Target": "/Users/ivy/bin/manul-test-deps-bug",
	"Stale": true,
	"StaleReason": "cannot stat install target",
	"Root": "/Users/ivy",
	"GoFiles": [
		"main.go"
	],
	"Imports": [
		"fmt"
	],
	"Deps": [
		"errors",
		"fmt",
		"internal/cpu",
		"internal/poll",
		"internal/race",
		"io",
		"math",
		"os",
		"reflect",
		"runtime",
		"runtime/internal/atomic",
		"runtime/internal/sys",
		"strconv",
		"sync",
		"sync/atomic",
		"syscall",
		"time",
		"unicode",
		"unicode/utf8",
		"unsafe"
	],
	"XTestGoFiles": [
		"main_test.go"
	],
	"XTestImports": [
		"github.com/stretchr/testify/assert",
		"testing"
	]
}

Prefer HTTPS over plain Git protocol

Looking at addVendorSubmodule I noticed that the order of protocols used is git then https then git+ssh.

Given the insecure nature of the plain git protocol, how do you feel about making https the default / first protocol tried?

how to ignore the vendor directory from dependency repos?

My main repo depens on k8s repo, both my repo and k8s depens on glog. If I don't delete the vendor directory in k8s repo, eg. vendor/k8s.io/kubernetes/vendor/, my program will run into the following error:

./galaxy flag redefined: log_dir
panic: ./galaxy flag redefined: log_dir

goroutine 1 [running]:
panic(0x85c140, 0xc82024a470)
	/usr/local/go/src/runtime/panic.go:481 +0x3e6
flag.(*FlagSet).Var(0xc820058060, 0x7fa71593c1e8, 0xc82024a420, 0x9f2920, 0x7, 0xa90440, 0x2f)
	/usr/local/go/src/flag/flag.go:776 +0x454
flag.(*FlagSet).StringVar(0xc820058060, 0xc82024a420, 0x9f2920, 0x7, 0x0, 0x0, 0xa90440, 0x2f)
	/usr/local/go/src/flag/flag.go:679 +0xc7
flag.(*FlagSet).String(0xc820058060, 0x9f2920, 0x7, 0x0, 0x0, 0xa90440, 0x2f, 0xc82024a410)
	/usr/local/go/src/flag/flag.go:692 +0x83
flag.String(0x9f2920, 0x7, 0x0, 0x0, 0xa90440, 0x2f, 0x7eca7a)
	/usr/local/go/src/flag/flag.go:699 +0x5f
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog.init()
	/go/src/git.code.oa.com/gaiastack/galaxy/go/src/git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog/glog_file.go:41 +0x13e
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/iptables.init()
	/go/src/git.code.oa.com/gaiastack/galaxy/go/src/git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/iptables/save_restore.go:108 +0x5e
git.code.oa.com/gaiastack/galaxy/pkg/network/portmapping.init()
	/go/src/git.code.oa.com/gaiastack/galaxy/go/src/git.code.oa.com/gaiastack/galaxy/pkg/network/portmapping/iptables.go:269 +0x63
git.code.oa.com/gaiastack/galaxy/pkg/galaxy.init()
	/go/src/git.code.oa.com/gaiastack/galaxy/go/src/git.code.oa.com/gaiastack/galaxy/pkg/galaxy/server.go:161 +0x9c
main.init()
	/go/src/git.code.oa.com/gaiastack/galaxy/go/src/git.code.oa.com/gaiastack/galaxy/cmd/galaxy/galaxy.go:27 +0x45

Here is the output of compiling. glog linked twice from git.code.oa.com/gaiastack/galaxy/vendor/github.com/golang/glog and git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog.

Building galaxy
git.code.oa.com/gaiastack/galaxy/vendor/github.com/containernetworking/cni/pkg/types
git.code.oa.com/gaiastack/galaxy/vendor/github.com/containernetworking/cni/pkg/version
git.code.oa.com/gaiastack/galaxy/vendor/github.com/containernetworking/cni/pkg/invoke
git.code.oa.com/gaiastack/galaxy/vendor/github.com/containernetworking/cni/pkg/skel
git.code.oa.com/gaiastack/galaxy/pkg/network/flannel
git.code.oa.com/gaiastack/galaxy/vendor/github.com/golang/glog
git.code.oa.com/gaiastack/galaxy/pkg/api/cniutil
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/distribution/digest
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/distribution/reference
git.code.oa.com/gaiastack/galaxy/vendor/github.com/Sirupsen/logrus
git.code.oa.com/gaiastack/galaxy/vendor/github.com/opencontainers/runc/libcontainer/user
git.code.oa.com/gaiastack/galaxy/vendor/golang.org/x/net/proxy
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/go-connections/sockets
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/client/transport
git.code.oa.com/gaiastack/galaxy/vendor/golang.org/x/net/context
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/client/transport/cancellable
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/blkiodev
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/strslice
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/go-connections/nat
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/go-units
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/container
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/versions
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/filters
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/network
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/registry
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/reference
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/types/time
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/go-connections/tlsconfig
git.code.oa.com/gaiastack/galaxy/vendor/github.com/docker/engine-api/client
git.code.oa.com/gaiastack/galaxy/pkg/api/docker
git.code.oa.com/gaiastack/galaxy/pkg/api/k8s
git.code.oa.com/gaiastack/galaxy/pkg/api/galaxy
git.code.oa.com/gaiastack/galaxy/vendor/github.com/vishvananda/netns
git.code.oa.com/gaiastack/galaxy/vendor/github.com/vishvananda/netlink/nl
git.code.oa.com/gaiastack/galaxy/vendor/github.com/vishvananda/netlink
git.code.oa.com/gaiastack/galaxy/pkg/flags
git.code.oa.com/gaiastack/galaxy/pkg/wait
git.code.oa.com/gaiastack/galaxy/pkg/gc
git.code.oa.com/gaiastack/galaxy/pkg/network/kernel
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/godbus/dbus
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/dbus
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/exec
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/coreos/go-semver/semver
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/vendor/github.com/golang/glog
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/sets
git.code.oa.com/gaiastack/galaxy/vendor/k8s.io/kubernetes/pkg/util/iptables
git.code.oa.com/gaiastack/galaxy/pkg/network/portmapping
git.code.oa.com/gaiastack/galaxy/pkg/api/apiswitch
git.code.oa.com/gaiastack/galaxy/pkg/utils/httputils
git.code.oa.com/gaiastack/galaxy/pkg/network/remote
git.code.oa.com/gaiastack/galaxy/vendor/github.com/emicklei/go-restful/log
git.code.oa.com/gaiastack/galaxy/vendor/github.com/emicklei/go-restful
git.code.oa.com/gaiastack/galaxy/pkg/galaxy
git.code.oa.com/gaiastack/galaxy/pkg/signal
git.code.oa.com/gaiastack/galaxy/cmd/galaxy

manul tries to add /usr/local to vendor dir

Go 1.8 installed from official package for macOs, manul appends usr/local to the vendor list:

$ git log -n1
commit 7e37fe3bb1c4b271c266ce84a3a1fdc5bb234c15
Author: Egor Kovetskiy <[email protected]>
Date:   Fri Feb 24 17:04:34 2017 +0700

    travis: run make test instead

$ manul -Q
github.com/PuerkitoBio/goquery     e1271ee34c6a305e38566ecd27ae374944907ee9
github.com/kovetskiy/godocs        2d9428f80f3442e07f67daf7ba378cd0ff6cfe24
github.com/kovetskiy/lorg          7cb623cb98d96cafa00c82e4eaee8fa1149bbb83
github.com/reconquest/hierr-go     5322b90dda9c2b563e915c9af76bf20a8b95f630
github.com/reconquest/lexec-go     bc3b4d045eeb6c9a51df6ed36d53a681fbcb34f3
github.com/reconquest/ser-go       47f084a1e4a5433ac3d6ab6cfe8c1e30028a4d76
usr/local

Seems to be due:

2017-03-25 20:22:23 [DEBUG]: {go} <exec> ["go" "list" "-e" "-json" "github.com/kovetskiy/manul"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/crypto/tls" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local

Full output with with --verbose:

$ manul -Qv
2017-03-25 20:22:22 [DEBUG]: {git} <exec> ["git" "submodule" "status"] start
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  e1271ee34c6a305e38566ecd27ae374944907ee9 vendor/github.com/PuerkitoBio/goquery (v1.0.0-20-ge1271ee)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  2d9428f80f3442e07f67daf7ba378cd0ff6cfe24 vendor/github.com/kovetskiy/godocs (0.6.2-13-g2d9428f)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  7cb623cb98d96cafa00c82e4eaee8fa1149bbb83 vendor/github.com/kovetskiy/lorg (heads/master)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  5322b90dda9c2b563e915c9af76bf20a8b95f630 vendor/github.com/reconquest/hierr-go (heads/master)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  b8d543eadad8fc21b80e512aff83f2c7502e9ef0 vendor/github.com/reconquest/import.bash (heads/master)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  bc3b4d045eeb6c9a51df6ed36d53a681fbcb34f3 vendor/github.com/reconquest/lexec-go (heads/master)
2017-03-25 20:22:22 [DEBUG]: {git} <stdout>  47f084a1e4a5433ac3d6ab6cfe8c1e30028a4d76 vendor/github.com/reconquest/ser-go (heads/master)
2017-03-25 20:22:22 [DEBUG]: {git} <exec> ["git" "submodule" "status"] exit code 0
2017-03-25 20:22:22 [DEBUG]: {go} <exec> ["go" "list" "-e" "./..."] start
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/arguments
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/calculator
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/config_file
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/counted
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git/branch
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git/checkout
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git/clone
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git/push
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/git/remote
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/naval_fate
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/odd_even
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/options
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/options_shortcut
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/quick
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs/examples/type_assert
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg/examples/custom-format
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg/examples/custom-placeholder
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg/examples/shortcuts
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg/examples/zero-configuration
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg/shortcuts
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go
2017-03-25 20:22:22 [DEBUG]: {go} <stdout> github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go
2017-03-25 20:22:22 [DEBUG]: {go} <exec> ["go" "list" "-e" "./..."] exit code 0
2017-03-25 20:22:22 [DEBUG]: {go} <exec> ["go" "get" "-d" "github.com/kovetskiy/manul"] start
2017-03-25 20:22:22 [DEBUG]: {go} <exec> ["go" "get" "-d" "github.com/kovetskiy/manul"] exit code 0
2017-03-25 20:22:22 [DEBUG]: {go} <exec> ["go" "list" "-e" "-json" "github.com/kovetskiy/manul"] start
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> {
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Dir": "/Users/lukasz/Go/src/github.com/kovetskiy/manul",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"ImportPath": "github.com/kovetskiy/manul",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Name": "main",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Target": "/Users/lukasz/Go/bin/manul",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Root": "/Users/lukasz/Go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"GoFiles": [
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"imports.go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"main.go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"submodule.go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"utils.go"
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	],
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Imports": [
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/tls",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/json",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"fmt",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/build",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/http",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"os",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"os/exec",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"path/filepath",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"sort",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"strconv",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"strings"
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	],
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	"Deps": [
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"bufio",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"bytes",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"compress/flate",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"compress/gzip",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"container/list",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"context",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/aes",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/cipher",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/des",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/dsa",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/ecdsa",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/elliptic",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/hmac",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/internal/cipherhw",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/md5",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/rand",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/rc4",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/rsa",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/sha1",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/sha256",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/sha512",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/subtle",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/tls",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/x509",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"crypto/x509/pkix",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/asn1",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/base64",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/binary",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/hex",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/json",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"encoding/pem",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"errors",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"fmt",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/andybalholm/cascadia",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/callbackwriter-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/executil-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/hierr-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/lineflushwriter-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/nopio-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/reconquest/ser-go",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"github.com/zazab/zhash",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/ast",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/build",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/doc",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/parser",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/scanner",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"go/token",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/crypto/curve25519",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/crypto/ed25519",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/crypto/ed25519/internal/edwards25519",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/crypto/ssh",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/net/html",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"golang.org/x/net/html/atom",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"hash",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"hash/crc32",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"internal/nettrace",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"internal/race",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"internal/singleflight",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"io",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"io/ioutil",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"log",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"math",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"math/big",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"math/rand",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"mime",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"mime/multipart",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"mime/quotedprintable",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/http",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/http/httptrace",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/http/internal",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/textproto",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"net/url",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"os",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"os/exec",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"path",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"path/filepath",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"reflect",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"regexp",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"regexp/syntax",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"runtime",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"runtime/cgo",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"runtime/internal/atomic",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"runtime/internal/sys",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"sort",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"strconv",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"strings",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"sync",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"sync/atomic",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"syscall",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"text/template",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"text/template/parse",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"time",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"unicode",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"unicode/utf16",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"unicode/utf8",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"unsafe",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/crypto/chacha20poly1305",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/crypto/chacha20poly1305/internal/chacha20",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/crypto/curve25519",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/crypto/poly1305",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/net/http2/hpack",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/net/idna",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/net/lex/httplex",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/net/route",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/text/transform",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/text/unicode/norm",
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 		"vendor/golang_org/x/text/width"
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> 	]
2017-03-25 20:22:23 [DEBUG]: {go} <stdout> }
2017-03-25 20:22:23 [DEBUG]: {go} <exec> ["go" "list" "-e" "-json" "github.com/kovetskiy/manul"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/crypto/tls" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/crypto/tls" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/encoding/json" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/encoding/json" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/fmt" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/fmt" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/PuerkitoBio/goquery" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/godocs" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/kovetskiy/lorg" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/hierr-go" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/lexec-go" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/Users/lukasz/Go/src/github.com/kovetskiy/manul/vendor/github.com/reconquest/ser-go" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/go/build" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/go/build" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/net/http" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/net/http" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/os" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/os" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/os/exec" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/os/exec" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/path/filepath" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/path/filepath" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/sort" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/sort" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/strconv" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/strconv" "rev-parse" "--show-toplevel"] exit code 0
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/strings" "rev-parse" "--show-toplevel"] start
2017-03-25 20:22:23 [DEBUG]: {git} <stdout> /usr/local
2017-03-25 20:22:23 [DEBUG]: {git} <exec> ["git" "-C" "/usr/local/go/src/strings" "rev-parse" "--show-toplevel"] exit code 0
github.com/PuerkitoBio/goquery     e1271ee34c6a305e38566ecd27ae374944907ee9
github.com/kovetskiy/godocs        2d9428f80f3442e07f67daf7ba378cd0ff6cfe24
github.com/kovetskiy/lorg          7cb623cb98d96cafa00c82e4eaee8fa1149bbb83
github.com/reconquest/hierr-go     5322b90dda9c2b563e915c9af76bf20a8b95f630
github.com/reconquest/lexec-go     bc3b4d045eeb6c9a51df6ed36d53a681fbcb34f3
github.com/reconquest/ser-go       47f084a1e4a5433ac3d6ab6cfe8c1e30028a4d76
usr/local

My go env:

$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/lukasz/Go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/qs/6r1dd8md22bggtghnmmhlf9m0000gn/T/go-build447506934=/tmp/go-build -gno-record-gcc-switches -fno-common"
CXX="clang++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"

what is license of manul?

Can you specify license of the application? There is no license file and no mentions of license in source code now.

build failed: no url found

branch: master || pkg-debian
go: 1.9
git: 2.14.1

$ ./build.sh
github.com/kovetskiy/manul (download)                                                                                 
# cd /tmp/manul/src/github.com/kovetskiy/manul; git submodule update --init --recursive                               
Submodule 'vendor/github.com/PuerkitoBio/goquery' (https://github.com/PuerkitoBio/goquery) registered for path 'vendor
/github.com/PuerkitoBio/goquery'                                                                                      
Submodule 'vendor/github.com/kovetskiy/godocs' (https://github.com/kovetskiy/godocs) registered for path 'vendor/githu
b.com/kovetskiy/godocs'                                                                                               
Submodule 'vendor/github.com/kovetskiy/lorg' (https://github.com/kovetskiy/lorg) registered for path 'vendor/github.co
m/kovetskiy/lorg'                                                                                                     
fatal: No url found for submodule path 'vendor/github.com/reconquest/coproc.bash' in .gitmodules                      
package github.com/kovetskiy/manul: exit status 128                                                                   

no such host

C:\workspace\golang\src\mymain>ver

Microsoft Windows [Version 10.0.14393]

C:\workspace\golang\src\mymain>manul -I github.com/gorilla/mux
2017-09-04 19:42:36 [FATAL]: unknown dependency: github.com/gorilla/mux

C:\workspace\golang\src\mymain>manul -I
2017-09-04 19:43:35  [INFO]: adding submodule for C:/workspace/golang/src/github.com/gorilla/mux
2017-09-04 19:43:41 [FATAL]: unable to add submodule for C:/workspace/golang/src/github.com/gorilla/mux
                             ├─ Get https://C/workspace/golang/src/github.com/gorilla/mux?go-get=1: dial tcp: lookup C: no such host
                             ├─ exec ["git" "submodule" "add" "-f" "git+ssh://C:/workspace/golang/src/github.com/gorilla/mux" "vendor/C:/workspace/golang/src/github.com/gorilla/mux"] error (exit status 128)
                             └─ exec ["git" "submodule" "add" "-f" "git://C:/workspace/golang/src/github.com/gorilla/mux" "vendor/C:/workspace/golang/src/github.com/gorilla/mux"] error (exit status 128)



root@me:/workspace/golang/src/mymain# uname -a
Linux me 3.4.0+ #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

root@me:/workspace/golang/src/mymain# manul -I
2017-09-04 19:53:17 [FATAL]: unable to list dependecies for package: mymain
                             └─ can't finish command execution: ["go" "list" "-e" "-json" "mymain"]
                                └─ read |0: interrupted system call


Update subcommand needs `git submodule update --init`

dependency on gopkg.in/ini.v1 shows vendored, however it's empty inside

manul -Q
gopkg.in/ini.v1                                   6f66b0e091edb3c7b380f7c4f0f884274d550b67

manul -I 
2016/12/30 23:19:40 skipping gopkg.in/ini.v1, already vendored

ls -alh vendor/gopkg.in/ini.v1
total 0
drwxr-xr-x  2 zhuo  staff    68B 12 30 22:00 .
drwxr-xr-x  3 zhuo  staff   102B 12 30 22:00 ..

manul -U -v gopkg.in/ini.v1
2016/12/30 23:25:17 exec ["git" "submodule" "status"]
2016/12/30 23:25:17 updating dependency gopkg.in/ini.v1
2016/12/30 23:25:17 exec ["git" "pull" "origin" "master"] in /Users/zhuo/go/src/github.com/mengzhuo/bla/vendor/gopkg.in/ini.v1
updated 1 dependency

ls vendor/gopkg.in/ini.v1 
// it's still empty

git submodule status
-6f66b0e091edb3c7b380f7c4f0f884274d550b67 vendor/gopkg.in/ini.v1

version: manul 1.4

not working on mac osx

test file

package main

import "github.com/kovetskiy/manul-test-foo"

func main() {
    foo.A()
}

run command throw error, but "all dependencies already vendored" in the end.

 $ /usr/local/bin/manul -I
2016/10/23 00:41:47 cannot find package "github.com/kovetskiy/manul-test-foo" in any of:
    /usr/local/Cellar/go/1.7.3/libexec/src/github.com/kovetskiy/manul-test-foo (from $GOROOT)
    /opt/dev/fxquant/go/src/github.com/kovetskiy/manul-test-foo (from $GOPATH)
all dependencies already vendored

version

$ /usr/local/bin/manul --version
manul 1.4

Support Recursive Vendoring

Would you consider supporting vendoring dependencies of dependencies? This way 100% of all dependencies for a project can be vendored.

This should probably be an optional argument -r or something:

# Query all deps recursively
manul -Q -r
# Install all deps recursively 
manul -I -r
# update all deps recursively
manul -U -r
# remove probably shouldn't support the recurse option, just use clean after remove if needed
# clean all unneeded deps taking into account recursive deps.
manul -C -r
# clean all unneeded deps taking into account only top level deps. This would remove all vendored recursive deps
manul -C

can't vendor golang.org packages

Hello,

not sure I need to vendor golang.org/x/net, but it failed..

me@MBP:backend $ manul -I
2016/05/11 01:50:02 adding submodule for github.com/astaxie/beego
2016/05/11 01:50:06 adding submodule for github.com/dgrijalva/jwt-go
2016/05/11 01:50:07 skipping github.com/go-ini/ini, already vendored
2016/05/11 01:50:07 adding submodule for github.com/go-sql-driver/mysql
2016/05/11 01:50:09 adding submodule for github.com/labstack/echo
2016/05/11 01:50:11 adding submodule for github.com/labstack/gommon
2016/05/11 01:50:12 adding submodule for github.com/mattn/go-colorable
2016/05/11 01:50:13 adding submodule for github.com/mattn/go-isatty
2016/05/11 01:50:14 adding submodule for github.com/valyala/fasttemplate
2016/05/11 01:50:15 adding submodule for golang.org/x/net
2016/05/11 01:52:46 exec ["git" "submodule" "add" "-f" "git://golang.org/x/net" "vendor/golang.org/x/net"] error (exit status 128) with output:
Cloning into 'src/backend/vendor/golang.org/x/net'...
fatal: unable to connect to golang.org:
golang.org[0: 216.58.214.177]: errno=Operation timed out
golang.org[1: 2a00:1450:4003:801::2011]: errno=No route to host

fatal: clone of 'git://golang.org/x/net' into submodule path 'src/backend/vendor/golang.org/x/net' failed

exec ["git" "submodule" "add" "-f" "https://golang.org/x/net" "vendor/golang.org/x/net"] error (exit status 128) with output:
Cloning into 'src/backend/vendor/golang.org/x/net'...
fatal: https://golang.org/x/net/info/refs not valid: is this a git repository?
fatal: clone of 'https://golang.org/x/net' into submodule path 'src/backend/vendor/golang.org/x/net' failed

exec ["git" "submodule" "add" "-f" "git+ssh://golang.org/x/net" "vendor/golang.org/x/net"] error (exit status 128) with output:
Cloning into 'src/backend/vendor/golang.org/x/net'...
ssh: connect to host golang.org port 22: No route to host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'git+ssh://golang.org/x/net' into submodule path 'src/backend/vendor/golang.org/x/net' failed

P.S.
It's awesome idea to use submodules of git!!!
Thanks!

Dependencies in the test files are ignored

The dependencies in the test files are ignored when searching for imports. In the imports.go only Package.Imports are being considered. I guess even Package.TestImports should be included.

Thanks,
Koushik Shetty

Custom repository domains

When trying to vendor packages like google.golang.org/api or bazil.org/fuse manul fails with timeout errors. This may be related to the use of git+ssh scheme instead of https (#8).

Recursive dependencies with own vendoring

Given the following example:

# start within a new, empty $GOPATH

# install manul
go get github.com/kovetskiy/manul

# create an example project importing fsouza/go-dockerclient
mkdir -p src/github.com/example/example
cd src/github.com/example/example
cat > main.go <<EOF
package main
import "github.com/fsouza/go-dockerclient"
EOF

# get all dependencies recursively
go get ./...

# query manul
manul -Q

Which outputs:

2017/01/31 22:31:53 cannot find package "github.com/docker/go-connections/nat" in any of:
	/usr/local/Cellar/go/1.7.5/libexec/src/github.com/docker/go-connections/nat (from $GOROOT)
	<my-gopath>/src/github.com/docker/go-connections/nat (from $GOPATH)
github.com/docker/docker
github.com/fsouza/go-dockerclient

First of all, why is github.com/docker/docker even there? It is a dependency of a dependency, but I did not add -r to my command for recursive querying. Does manul do this by default? If so, what's the use of the -r flag?

So the recursive dependency process is stopped at the first package it could not find. It complains about github.com/docker/go-connections/nat, but in fact there are more.

The reason github.com/docker/go-connections/nat was not installed by the go get command, is because this dependency is already vendored in the repo that contains the package that imports it (github.com/docker/docker).

Manul, however, wants the package to be installed and wants to vendor it. Of course, I can manually go get github.com/docker/go-connections/nat (and the others that follow afterwards) and subsequently vendor them with manul -I, but then I would end up with an unnecessary, unused vendor package that doesn't even match with the intended version (<...>/docker/docker/vendor/ might contain a different version).

Am I correct in thinking that the solution for this would be to have manul detect dependencies that are already vendored by the dependency that imports it, just like go get does when doing recursive installs?

manul ignores build tags?

This is on mac.

You can repro with this code: https://github.com/kjk/web-blog (git clone --recursive https://github.com/kjk/web-blog)

$ manul -U -r
2016/10/22 14:30:37 updating dependency github.com/garyburd/go-oauth
2016/10/22 14:30:37 updating dependency github.com/go-fsnotify/fsnotify
2016/10/22 14:30:38 updating dependency github.com/gorilla/securecookie
2016/10/22 14:30:38 updating dependency github.com/gorilla/websocket
2016/10/22 14:30:39 updating dependency github.com/kjk/u
2016/10/22 14:30:39 updating dependency github.com/kr/fs
2016/10/22 14:30:40 updating dependency github.com/microcosm-cc/bluemonday
2016/10/22 14:30:40 updating dependency github.com/russross/blackfriday
2016/10/22 14:30:41 updating dependency github.com/shurcooL/sanitized_anchor_name
2016/10/22 14:30:42 updating dependency github.com/thomas11/atomgenerator
2016/10/22 14:30:42 updating dependency golang.org/x/net
updated 11 dependencies
$ go build
vendor/github.com/go-fsnotify/fsnotify/kqueue.go:18:2: cannot find package "golang.org/x/sys/unix" in any of:
    /Users/kjk/src/go/src/github.com/kjk/blog/vendor/golang.org/x/sys/unix (vendor tree)
    /usr/local/Cellar/go/1.7.3/libexec/src/golang.org/x/sys/unix (from $GOROOT)
    /Users/kjk/src/go/src/golang.org/x/sys/unix (from $GOPATH)
kjkmacpro:blog kjk$

The problem seems to be that in kqueue.go we have:

// +build freebsd openbsd netbsd dragonfly darwin

package fsnotify

import (
    "errors"
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"
    "sync"
    "time"

    "golang.org/x/sys/unix"
)

I assume it's the build tag. Since I'm building on mac and build tag specifies darwin, the file should be parsed and golang.org/x/sys/unix be vendored as well.

Manul keeps complaining about missing packages

Just installed Manul – switching from govendor and my manual approach.

I removed the original vendor directory and just wanted to see what Manul does: manul -v -Q.

Output is as following:

2016/05/17 09:46:34 cannot find package "google.golang.org/grpc" in any of:
    /Users/annismckenzie/git/GitHub/go/src/google.golang.org/grpc (from $GOROOT)
    /Users/annismckenzie/git/go/src/google.golang.org/grpc (from $GOPATH)

Not sure what's going (wr)on(g). Of course that package isn't there, I want Manul to handle this. So I did a manual go get google.golang.org/grpc but now it's complaining about the next package. Did I miss something? Using go1.6.2.

How to resolve dependency from vendor?

I have an issue with dependency from dependent library. Let's say I need to perform testing with go test. As follow:

go on  master via 🐹 v1.1
➜ go test github.com/incubus8/go/pkg/gin
vendor/github.com/gin-gonic/gin/binding/default_validator.go:11:2: cannot find package "gopkg.in/go-playground/validator.v8" in any of:
	/Users/angel/go/src/github.com/incubus8/go/vendor/github.com/gin-gonic/gin/vendor/gopkg.in/go-playground/validator.v8 (vendor tree)
	/Users/angel/go/src/github.com/incubus8/go/vendor/gopkg.in/go-playground/validator.v8
	/usr/local/opt/go/libexec/src/gopkg.in/go-playground/validator.v8 (from $GOROOT)
	/Users/angel/go/src/gopkg.in/go-playground/validator.v8 (from $GOPATH)
vendor/github.com/gin-gonic/gin/render/yaml.go:10:2: cannot find package "gopkg.in/yaml.v2" in any of:
	/Users/angel/go/src/github.com/incubus8/go/vendor/github.com/gin-gonic/gin/vendor/gopkg.in/yaml.v2 (vendor tree)
	/Users/angel/go/src/github.com/incubus8/go/vendor/gopkg.in/yaml.v2
	/usr/local/opt/go/libexec/src/gopkg.in/yaml.v2 (from $GOROOT)
	/Users/angel/go/src/gopkg.in/yaml.v2 (from $GOPATH)
go on  master via 🐹 v1.1
➜ manul -I gopkg.in/yaml.v2
2018-04-14 17:05:45 [FATAL]: unknown dependency: gopkg.in/yaml.v2

go on  master via 🐹 v1.1 took 5s
➜ manul -I gopkg.in/go-playground/validator.v8
2018-04-14 17:05:52 [FATAL]: unknown dependency: gopkg.in/go-playground/validator.v8

go on  master via 🐹 v1.1 took 4s
➜ go test github.com/incubus8/go/pkg/gin
vendor/github.com/gin-gonic/gin/binding/default_validator.go:11:2: cannot find package "gopkg.in/go-playground/validator.v8" in any of:
	/Users/angel/go/src/github.com/incubus8/go/vendor/github.com/gin-gonic/gin/vendor/gopkg.in/go-playground/validator.v8 (vendor tree)
	/Users/angel/go/src/github.com/incubus8/go/vendor/gopkg.in/go-playground/validator.v8
	/usr/local/opt/go/libexec/src/gopkg.in/go-playground/validator.v8 (from $GOROOT)
	/Users/angel/go/src/gopkg.in/go-playground/validator.v8 (from $GOPATH)
vendor/github.com/gin-gonic/gin/render/yaml.go:10:2: cannot find package "gopkg.in/yaml.v2" in any of:
	/Users/angel/go/src/github.com/incubus8/go/vendor/github.com/gin-gonic/gin/vendor/gopkg.in/yaml.v2 (vendor tree)
	/Users/angel/go/src/github.com/incubus8/go/vendor/gopkg.in/yaml.v2
	/usr/local/opt/go/libexec/src/gopkg.in/yaml.v2 (from $GOROOT)
	/Users/angel/go/src/gopkg.in/yaml.v2 (from $GOPATH)

How can I resolve that using Manul? Need help.

Vendoring golang.org/x/net/ipv4

Hello,

My project depends on golang.org/x/net/ipv4 package but manul -Q command doesn't list it in the dependency list. I'm also unable vendor it using manul -I command. Here is the output:

$ manul -Q
2016/07/23 23:06:38 cannot find package "golang.org/x/net/ipv4" in any of:
    /usr/x86_64-pc-linux-gnu/lib/go/src/golang.org/x/net/ipv4 (from $GOROOT)
    /home/burak/Projects/go/src/golang.org/x/net/ipv4 (from $GOPATH)
2016/07/23 23:06:38 cannot find package "golang.org/x/net/ipv4" in any of:
    /usr/x86_64-pc-linux-gnu/lib/go/src/golang.org/x/net/ipv4 (from $GOROOT)
    /home/burak/Projects/go/src/golang.org/x/net/ipv4 (from $GOPATH)
2016/07/23 23:06:38 cannot find package "golang.org/x/net/netutil" in any of:
    /usr/x86_64-pc-linux-gnu/lib/go/src/golang.org/x/net/netutil (from $GOROOT)
    /home/burak/Projects/go/src/golang.org/x/net/netutil (from $GOPATH)
github.com/Sirupsen/logrus    a283a10442df8dc09befd873fab202bf8a253d6a
github.com/gorilla/handlers   801d6e3b008914ee888c9ab9b1b379b9a56fbf44
github.com/gorilla/websocket  5e2e56d5dfd46884df1036f828777ee6273f2cff
github.com/purak/httptimeout  995bf143603e7eacbe26b771b837dacbe797d654
github.com/syndtr/goleveldb   ab8b5dcf1042e818ab68e770d465112a899b668e
github.com/syndtr/gosnappy    156a073208e131d7d2e212cb749feae7c339e846
gopkg.in/tylerb/graceful.v1   c838c13b2beeea4f4f54496da96a3a6ae567c37a
gopkg.in/yaml.v2              e4d366fc3c7938e2958e662b4258c7a89e1f0e3e
$ manul -I golang.org/x/net/ipv4
2016/07/23 23:13:55 unknown dependency golang.org/x/net/ipv4
~/Projects/go/src/golang.org/x/net $ git remote -v
origin  https://go.googlesource.com/net (fetch)
origin  https://go.googlesource.com/net (push)

golang.org/x/blabla repositories seem an exceptional case for manul. Do you have any idea how I add this sort of dependencies via manul?

How to get specific SHAs and releases

The title basically says it all. How do I get another sha then master and how do I get a specific release? Couldn't find info about that in the readme.

cannot find package "golang_org/x/net/http2/hpack"

->manul -Q
2016/09/05 17:11:00 cannot find package "golang_org/x/net/http2/hpack" in any of:
/usr/local/go/src/golang_org/x/net/http2/hpack (from $GOROOT)
/home/tiger/go/src/golang_org/x/net/http2/hpack (from $GOPATH)

->go version
go version go1.7 linux/amd64

Support projects with empty root

If project has no Go files inside root directory manul -Q will exit with the following message:

no buildable Go source files in /path/to/repo

For go tool it is solved with ./... argument which means walk current directory recursively.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.