浏览代码

Merge pull request #305 from vmarkovtsev/master

Add --order-ownership-by-time
Vadim Markovtsev 5 年之前
父节点
当前提交
2687a40f0d
共有 15 个文件被更改,包括 1093 次插入1052 次删除
  1. 5 9
      .appveyor.yml
  2. 3 0
      .gitignore
  3. 23 33
      .travis.yml
  4. 11 12
      Dockerfile
  5. 0 666
      Gopkg.lock
  6. 0 91
      Gopkg.toml
  7. 12 11
      Makefile
  8. 11 4
      cmd/hercules/generate_plugin.go
  9. 47 0
      go.mod
  10. 165 0
      go.sum
  11. 785 214
      internal/pb/pb.pb.go
  12. 3 1
      internal/pb/utils.go
  13. 1 1
      internal/plumbing/languages.go
  14. 2 2
      internal/plumbing/tree_diff.go
  15. 25 8
      python/labours/labours.py

+ 5 - 9
.appveyor.yml

@@ -2,10 +2,9 @@ version: "{build}"
 platform: x64
 image: Visual Studio 2017
 
-clone_folder: c:\gopath\src\gopkg.in\src-d\hercules.v10
-
-environment:
-  GOPATH: c:\gopath
+clone_folder: c:\boilerplate
+cache:
+  - vendor
 
 install:
   - curl -SLko protoc.zip https://github.com/google/protobuf/releases/download/v3.6.0/protoc-3.6.0-win32.zip
@@ -14,15 +13,12 @@ install:
 
 build_script:
   - go version
-  - set PATH=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;C:\msys64\usr\bin;C:\msys64\mingw64\bin;%GOPATH%\bin;%PATH%
+  - set PATH=C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;C:\msys64\usr\bin;C:\msys64\mingw64\bin;%PATH%
   - set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
-  - cd %GOPATH%\src\gopkg.in\src-d\hercules.v10
-  - go get -v github.com/golang/dep/cmd/dep
   - make
-  - 7z a c:\gopath\src\gopkg.in\src-d\hercules.v10\hercules.win64.zip %GOPATH%\bin\hercules.exe
+  - 7z a hercules.win64.zip hercules.exe
 
 test_script:
-  - go get -v -t -d gopkg.in/src-d/hercules.v10/...
   - go test -v -timeout 20m -race -tags disable_babelfish gopkg.in/src-d/hercules.v10/...
 
 artifacts:

+ 3 - 0
.gitignore

@@ -4,6 +4,9 @@ contrib/_plugin_example/churn_analysis.pb.go
 pb/pb.pb.go
 pb/pb_pb2.py
 coverage.txt
+protoc-gen-gogo
+hercules
+python/dist
 
 **/*.egg-info
 **/__pycache__

+ 23 - 33
.travis.yml

@@ -5,11 +5,10 @@ git:
   depth: 9999999
 
 language: go
-go_import_path: gopkg.in/src-d/hercules.v10
 go:
-  - 1.10.x
   - 1.11.x
   - 1.12.x
+  - 1.13.x
 
 services:
   - docker
@@ -17,13 +16,7 @@ services:
 cache:
   directories:
     - $HOME/.cache/pip
-    - $HOME/gopath/src
-before_cache:
-  - cd $HOME/gopath
-  - mv $HOME/gopath/src/gopkg.in/src-d/hercules.v10/vendor $HOME/gopath/src/gopkg.in/src-d/.vendor
-  - rm -rf $HOME/gopath/src/gopkg.in/src-d/hercules.v10
-  - mkdir $HOME/gopath/src/gopkg.in/src-d/hercules.v10
-  - mv $HOME/gopath/src/gopkg.in/src-d/.vendor $HOME/gopath/src/gopkg.in/src-d/hercules.v10/vendor
+    - $HOME/vendor
 
 matrix:
   fast_finish: true
@@ -35,15 +28,14 @@ stages:
     if: tag =~ .*
 
 env:
-  - PROTOC_VERSION=3.6.0 TENSORFLOW_VERSION=1.11.0
+  - PROTOC_VERSION=3.6.0 TENSORFLOW_VERSION=1.11.0 GOPATH=
 
 before_install:
   - wget -O protoc.zip https://github.com/google/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip
   - unzip -d ~/.local protoc.zip && rm protoc.zip
   - go get -v golang.org/x/lint/golint
-  - go get -v github.com/golang/dep/cmd/dep
   - (wget -O - https://bootstrap.pypa.io/get-pip.py || wget -O - https://raw.githubusercontent.com/pypa/get-pip/master/get-pip.py) | sudo python3 - pip==18.1
-  - export PATH=~/usr/bin:$GOPATH/bin:$PATH
+  - export PATH=~/usr/bin:.:$PATH
   - make --version
   - pip3 --version
   - sudo pip3 install cython
@@ -56,24 +48,26 @@ before_install:
   - sudo ldconfig
 install:
   - git clean -xfd
+  - go env
   - travis_retry make TAGS=tensorflow
 script:
   - set -e
   - if [ $TRAVIS_GO_VERSION != "1.10.x" ]; then test -z "$(gofmt -s -l . | grep -v vendor/)"; fi
+  - export GO111MODULE=on
   - go vet -tags tensorflow ./...
   - golint -set_exit_status $(go list ./... | grep -v /vendor/)
   - cd python && flake8 && cd ..
   - go test -coverpkg=all -v -coverprofile=coverage.txt -covermode=count gopkg.in/src-d/hercules.v10/... && sed -i '/cmd\/hercules\|core.go/d' coverage.txt
   - # race checks increase the elapsed time by 10 minutes, we run them only in AppVeyor
-  - $GOPATH/bin/hercules version
-  - $GOPATH/bin/hercules --burndown --couples --devs --quiet --pb https://github.com/src-d/hercules > 1.pb
+  - hercules version
+  - hercules --burndown --couples --devs --quiet --pb https://github.com/src-d/hercules > 1.pb
   - cp 1.pb 2.pb
-  - $GOPATH/bin/hercules combine 1.pb 2.pb > 12.pb
-  - ($GOPATH/bin/hercules generate-plugin -n MyPlug -o myplug && cd myplug && make)
-  - (cd contrib/_plugin_example && make)
-  - $GOPATH/bin/hercules --burndown --burndown-files --burndown-people --couples --devs --quiet https://github.com/src-d/hercules | labours -m all -o out --backend Agg --disable-projector
-  - $GOPATH/bin/hercules --burndown --burndown-files --burndown-people --couples --devs --quiet --pb https://github.com/src-d/hercules | labours -f pb -m all -o out --backend Agg --disable-projector
-  - # $GOPATH/bin/hercules --sentiment --quiet --languages Python https://github.com/src-d/hercules > /dev/null
+  - hercules combine 1.pb 2.pb > 12.pb
+  - #(hercules generate-plugin -n MyPlug -o myplug && cd myplug && make)
+  - #(cd contrib/_plugin_example && make)
+  - hercules --burndown --burndown-files --burndown-people --couples --devs --quiet https://github.com/src-d/hercules | labours -m all -o out --backend Agg --disable-projector
+  - hercules --burndown --burndown-files --burndown-people --couples --devs --quiet --pb https://github.com/src-d/hercules | labours -f pb -m all -o out --backend Agg --disable-projector
+  - # hercules --sentiment --quiet --languages Python https://github.com/src-d/hercules > /dev/null
   - set +e
   - if [ $TRAVIS_GO_VERSION == "1.11.x" ]; then bash <(curl -s https://codecov.io/bash); fi
 
@@ -90,14 +84,12 @@ jobs:
       os: osx
       osx_image: xcode9.3
       go: 1.12.x
-      go_import_path: gopkg.in/src-d/hercules.v10
       before_install:
         - wget -O protoc.zip https://github.com/google/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-osx-x86_64.zip
         - unzip -d ~/.local protoc.zip && rm protoc.zip
-        - go get -v github.com/golang/dep/cmd/dep
-        - export PATH=$GOPATH/bin:$PATH
+        - export PATH=.:$PATH
       after_success:
-        - gzip -S .darwin_amd64.gz $GOPATH/bin/hercules
+        - gzip -S .darwin_amd64.gz hercules
       script: skip
       install:
         - travis_retry make
@@ -105,19 +97,17 @@ jobs:
         provider: releases
         api_key:
           secure: $GITHUB_TOKEN
-        file: "$GOPATH/bin/hercules.darwin_amd64.gz"
+        file: "hercules.darwin_amd64.gz"
         skip_cleanup: true
         on:
           tags: true
     - stage: deploy
       os: linux
-      go: 1.12.x
-      go_import_path: gopkg.in/src-d/hercules.v10
+      go: 1.13.x
       before_install:
         - wget -O protoc.zip https://github.com/google/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip
         - unzip -d ~/.local protoc.zip && rm protoc.zip
-        - go get -v github.com/golang/dep/cmd/dep
-        - export PATH=$GOPATH/bin:$PATH
+        - export PATH=.:$PATH
         - (wget -O - https://bootstrap.pypa.io/get-pip.py || wget -O - https://raw.githubusercontent.com/pypa/get-pip/master/get-pip.py) | sudo python3 - pip==18.1
         - sudo pip3 install twine pyopenssl
       script:
@@ -127,20 +117,20 @@ jobs:
         - travis_retry make
         - cd python
         - python3 setup.py bdist_wheel
-        - cp dist/*py3-none-any* $GOPATH/bin
+        - cp dist/*py3-none-any* .
         - cd ..
       after_success:
-        - gzip -S .linux_amd64.gz $GOPATH/bin/hercules
+        - gzip -S .linux_amd64.gz hercules
       deploy:
         - provider: releases
           api_key:
             secure: $GITHUB_TOKEN
-          file: "$GOPATH/bin/hercules.linux_amd64.gz"
+          file: "hercules.linux_amd64.gz"
           skip_cleanup: true
           on:
             tags: true
         - provider: script
-          script: twine upload $GOPATH/bin/*py3-none-any* -u $PYPI_LOGIN -p $PYPI_PASS
+          script: twine upload *py3-none-any* -u $PYPI_LOGIN -p $PYPI_PASS
           skip_cleanup: true
           on:
             tags: true

+ 11 - 12
Dockerfile

@@ -1,25 +1,24 @@
 FROM ubuntu:18.04
 
-ENV GOPATH /root
 ENV PROTOBUF_VERSION 3.5.1
+ENV GO111MODULE on
 
-COPY . /root/src/gopkg.in/src-d/hercules.v10
+COPY . /root/src
 RUN apt-get update && \
     apt-get install -y --no-install-suggests --no-install-recommends software-properties-common && \
     add-apt-repository -y ppa:gophers/archive && \
     apt-get update && \
-    apt-get install -y --no-install-suggests --no-install-recommends locales golang-1.10-go python3 python3-dev python3-distutils libyaml-dev libyaml-0-2 libxml2-dev libxml2 curl git make unzip g++ && \
+    apt-get upgrade -y && \
+    apt-get install -y --no-install-suggests --no-install-recommends locales golang-1.11-go python3 python3-dev python3-distutils libyaml-dev libyaml-0-2 libxml2-dev libxml2 curl git make unzip g++ && \
     curl -SLo protoc.zip https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-x86_64.zip && \
     unzip -d /usr/local protoc.zip && rm protoc.zip && \
     locale-gen en_US.UTF-8 && \
-    export PATH=/usr/lib/go-1.10/bin:/root/bin:$PATH && \
-    go get -v github.com/golang/dep/cmd/dep && \
-    cd /root/src/gopkg.in/src-d/hercules.v10 && \
-    export CGO_CXXFLAGS=-std=c++14 && \
+    export PATH=/usr/lib/go-1.11/bin:/root/bin:$PATH && \
+    cd /root/src && \
     curl -L "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-$(go env GOOS)-x86_64-1.7.0.tar.gz" | tar -C /usr/local -xz && \
     make && \
-    rm /usr/local/bin/protoc && rm /usr/local/readme.txt && rm -rf /usr/local/include/google && \
-    cp /root/bin/hercules /usr/local/bin && \
+    rm /usr/local/bin/protoc /usr/local/readme.txt && rm -rf /usr/local/include/google && \
+    mv hercules /usr/local/bin && \
     echo '#!/bin/bash\n\
 \n\
 echo\n\
@@ -28,11 +27,11 @@ echo\n\' > /browser && \
     chmod +x /browser && \
     curl https://bootstrap.pypa.io/get-pip.py | python3 - pip==18.1 && \
     pip3 install --no-cache-dir --no-build-isolation cython && \
-    sed -i 's/parser.add_argument("--backend",/parser.add_argument("--backend", default="Agg",/' /root/src/gopkg.in/src-d/hercules.v10/python/labours/labours.py && \
-    pip3 install --no-cache-dir /root/src/gopkg.in/src-d/hercules.v10/python && \
+    sed -i 's/parser.add_argument("--backend",/parser.add_argument("--backend", default="Agg",/' /root/src/python/labours/labours.py && \
+    pip3 install --no-cache-dir /root/src/python && \
     pip3 install --no-cache-dir "tensorflow<2.0" && \
     rm -rf /root/* && \
-    apt-get remove -y software-properties-common golang-1.10-go python3-dev libyaml-dev libxml2-dev curl git make unzip g++ && \
+    apt-get remove -y software-properties-common golang-1.11-go python3-dev libyaml-dev libxml2-dev curl git make unzip g++ && \
     apt-get remove -qy *-doc *-man && \
     rm -rf /usr/share/doc /usr/share/man && \
     apt-get autoremove -y && \

+ 0 - 666
Gopkg.lock

@@ -1,666 +0,0 @@
-# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
-
-
-[[projects]]
-  digest = "1:9f3b30d9f8e0d7040f729b82dcbc8f0dead820a133b3147ce355fc451f32d761"
-  name = "github.com/BurntSushi/toml"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005"
-  version = "v0.3.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:7248f832d2ec4b41627eb8bd55645bc42048a392ddeb647fd0abb2b69f1ded1a"
-  name = "github.com/Jeffail/tunny"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "59cfa8fcb19f5acba8db07a0dd3cb2fa7edbc228"
-
-[[projects]]
-  branch = "master"
-  digest = "1:666e6921bb482fe300dc23d2ac545e4bc8ad08a493ffad37ea8d7edbf8fc05c5"
-  name = "github.com/Masterminds/semver"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "c84ddcca87bf5a941b138dde832a7e20b0159ad8"
-
-[[projects]]
-  branch = "master"
-  digest = "1:c5277d85d0dde9168f086cb3fc19f6f759c8524f0c13fb8dea9573bff4860abe"
-  name = "github.com/Masterminds/sprig"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "77bb58b7f5e10889a1195c21b9e7a96ee166f199"
-
-[[projects]]
-  branch = "master"
-  digest = "1:607794e3030e79527e11cba224fb6db52d53c602d57879d8771c19c0e256a59d"
-  name = "github.com/antchfx/xpath"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "3de91f3991a1af6e495d49c9218318b5544b20e3"
-
-[[projects]]
-  branch = "master"
-  digest = "1:8f5416c7f59da8600725ae1ff00a99af1da8b04c211ae6f3c8f8bcab0164f650"
-  name = "github.com/aokoli/goutils"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "3391d3790d23d03408670993e957e8f408993c34"
-
-[[projects]]
-  digest = "1:ffe9824d294da03b391f44e1ae8281281b4afc1bdaa9588c9097785e3af10cec"
-  name = "github.com/davecgh/go-spew"
-  packages = ["spew"]
-  pruneopts = "UT"
-  revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73"
-  version = "v1.1.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:10ed28b6c04f028f3b2421fcd3074c0224bb0c4b69ca99e783fbff0fac13ac5e"
-  name = "github.com/emirpasic/gods"
-  packages = [
-    "containers",
-    "lists",
-    "lists/arraylist",
-    "trees",
-    "trees/binaryheap",
-    "utils",
-  ]
-  pruneopts = "UT"
-  revision = "bba54c718c4e39e4db35f73e0c660df44a4de4cd"
-
-[[projects]]
-  branch = "master"
-  digest = "1:bbc4aacabe6880bdbce849c64cb061b7eddf39f132af4ea2853ddd32f85fbec3"
-  name = "github.com/fatih/camelcase"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "44e46d280b43ec1531bb25252440e34f1b800b65"
-
-[[projects]]
-  digest = "1:3f7c586d2fd571c4f2e3d313c0638b33b999055de507d5f11fafe27e5adc30db"
-  name = "github.com/gogo/protobuf"
-  packages = [
-    "gogoproto",
-    "proto",
-    "protoc-gen-gogo/descriptor",
-    "sortkeys",
-    "types",
-  ]
-  pruneopts = "UT"
-  revision = "636bf0302bc95575d69441b25a2603156ffdddf1"
-  version = "v1.1.1"
-
-[[projects]]
-  digest = "1:4c0989ca0bcd10799064318923b9bc2db6b4d6338dd75f3f2d86c3511aaaf5cf"
-  name = "github.com/golang/protobuf"
-  packages = [
-    "proto",
-    "ptypes",
-    "ptypes/any",
-    "ptypes/duration",
-    "ptypes/timestamp",
-  ]
-  pruneopts = "UT"
-  revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
-  version = "v1.2.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:4b3280120660e5f6649d6396be841bcdfb6834dbf9ca25d84a639b14a0a6d13a"
-  name = "github.com/google/uuid"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "e704694aed0ea004bb7eb1fc2e911d048a54606a"
-
-[[projects]]
-  branch = "master"
-  digest = "1:1a1206efd03a54d336dce7bb8719e74f2f8932f661cb9f57d5813a1d99c083d8"
-  name = "github.com/grpc-ecosystem/grpc-opentracing"
-  packages = ["go/otgrpc"]
-  pruneopts = "UT"
-  revision = "8e809c8a86450a29b90dcc9efbf062d0fe6d9746"
-
-[[projects]]
-  branch = "master"
-  digest = "1:82ae4a01ab513802a68d4094e0eca6c5aaa9445633560e2c0491263e37361620"
-  name = "github.com/huandu/xstrings"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "8bbcf2f9ccb55755e748b7644164cd4bdce94c1d"
-
-[[projects]]
-  branch = "master"
-  digest = "1:8eb1de8112c9924d59bf1d3e5c26f5eaa2bfc2a5fcbb92dc1c2e4546d695f277"
-  name = "github.com/imdario/mergo"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "9f23e2d6bd2a77f959b2bf6acdbefd708a83a4a4"
-
-[[projects]]
-  digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be"
-  name = "github.com/inconshreveable/mousetrap"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
-  version = "v1.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:62fe3a7ea2050ecbd753a71889026f83d73329337ada66325cbafd5dea5f713d"
-  name = "github.com/jbenet/go-context"
-  packages = ["io"]
-  pruneopts = "UT"
-  revision = "d14ea06fba99483203c19d92cfcd13ebe73135f4"
-
-[[projects]]
-  branch = "master"
-  digest = "1:a84fae99960f33c73468c3de94b5053f1362d62806a92dc925bc6ba9b687f646"
-  name = "github.com/kevinburke/ssh_config"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "802051befeb51da415c46972b5caf36e7c33c53d"
-
-[[projects]]
-  branch = "master"
-  digest = "1:bcdd3c95159bf18932c5a3bc7da945c19dd477f54d0d24f4ea04b31076468681"
-  name = "github.com/mattn/go-runewidth"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "97311d9f7767e3d6f422ea06661bc2c7a19e8a5d"
-
-[[projects]]
-  branch = "master"
-  digest = "1:1c1a166be1c2f3bbc0c9b7c87a0877ede9ff5f865b406bb0379ca790b3dddf03"
-  name = "github.com/mcuadros/go-lookup"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "5650f26be7675b629fff8356a50d906fa03e9c8b"
-
-[[projects]]
-  branch = "master"
-  digest = "1:c99caced18127b6ae7a0be25bdf64155a8b5337d18fce1e7df0a8e68beb18767"
-  name = "github.com/minio/highwayhash"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "85fc8a2dacad36a6beb2865793cd81363a496696"
-
-[[projects]]
-  branch = "master"
-  digest = "1:12ae6210bdbdad658a9a67fd95cd9c99f7fdbf12f6d36eaf0af704e69dacf4f5"
-  name = "github.com/mitchellh/go-homedir"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "b8bc1bf767474819792c23f32d8286a45736f1c6"
-
-[[projects]]
-  digest = "1:b8a91524c7e262bcf2fde6e6bdcebfcaa6450ad073af6df6301fd5f6c32a838b"
-  name = "github.com/moovweb/rubex"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "cb849acea6148000db8a55743f71476b0897ea41"
-  version = "6.3.107"
-
-[[projects]]
-  digest = "1:450b7623b185031f3a456801155c8320209f75d0d4c4e633c6b1e59d44d6e392"
-  name = "github.com/opentracing/opentracing-go"
-  packages = [
-    ".",
-    "ext",
-    "log",
-  ]
-  pruneopts = "UT"
-  revision = "1949ddbfd147afd4d964a9f00b24eb291e0e7c38"
-  version = "v1.0.2"
-
-[[projects]]
-  branch = "master"
-  digest = "1:cab1f682826733526a4b49a45cb64fab31930f2cc2684fa14c64b090b1c25b13"
-  name = "github.com/pelletier/go-buffruneio"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "e2f66f8164ca709d4c21e815860afd2024e9b894"
-
-[[projects]]
-  branch = "master"
-  digest = "1:6c13131f5eae63cc6c362fc27bee2ed16e32d0bd2bfd869ce2093b6e32917c7c"
-  name = "github.com/pkg/errors"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "f15c970de5b76fac0b59abb32d62c17cc7bed265"
-
-[[projects]]
-  digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe"
-  name = "github.com/pmezard/go-difflib"
-  packages = ["difflib"]
-  pruneopts = "UT"
-  revision = "792786c7400a136282c1664665ae0a8db921c6c2"
-  version = "v1.0.0"
-
-[[projects]]
-  digest = "1:d0d418e1c02e6fc00259ef09d0d4f5135fc6aedac356ff0a11f4e5ef0c447270"
-  name = "github.com/sergi/go-diff"
-  packages = ["diffmatchpatch"]
-  pruneopts = "UT"
-  revision = "da645544ed44df016359bd4c0e3dc60ee3a0da43"
-
-[[projects]]
-  digest = "1:645cabccbb4fa8aab25a956cbcbdf6a6845ca736b2c64e197ca7cbb9d210b939"
-  name = "github.com/spf13/cobra"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385"
-  version = "v0.0.3"
-
-[[projects]]
-  digest = "1:c1b1102241e7f645bc8e0c22ae352e8f0dc6484b6cb4d132fa9f24174e0119e2"
-  name = "github.com/spf13/pflag"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "298182f68c66c05229eb03ac171abe6e309ee79a"
-  version = "v1.0.3"
-
-[[projects]]
-  branch = "v1"
-  digest = "1:3681df693b35e7df9937dbd54b9f179aee5b54f4a28f72ad191e87038e6ffcab"
-  name = "github.com/src-d/gcfg"
-  packages = [
-    ".",
-    "scanner",
-    "token",
-    "types",
-  ]
-  pruneopts = "UT"
-  revision = "f187355171c936ac84a82793659ebb4936bc1c23"
-
-[[projects]]
-  digest = "1:c5cc4981dbab46f68150ea9772532a7c26f8109112c7302d7cc0a5011eef3276"
-  name = "github.com/stretchr/testify"
-  packages = [
-    "assert",
-    "require",
-  ]
-  pruneopts = "UT"
-  revision = "5b93e2dc01fd8fbf32aa74a198b0ebe78f6f6b6f"
-
-[[projects]]
-  branch = "master"
-  digest = "1:da7aadd5db15c43ddd9b13d2c770103c081f7c377d92b3a8b256087fc74311ea"
-  name = "github.com/tensorflow/tensorflow"
-  packages = ["tensorflow/go"]
-  pruneopts = "UT"
-  revision = "f73d7c90ed05bcf9f36f6a3be0c29efa5fef0f6e"
-
-[[projects]]
-  branch = "master"
-  digest = "1:2699f40ea73866f38eccb385738750a71a05cec654f029e78f620caccefd85e4"
-  name = "github.com/toqueteos/trie"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "56fed4a05683322f125e2d78ee269bb102280392"
-
-[[projects]]
-  digest = "1:afc0b8068986a01e2d8f449917829753a54f6bd4d1265c2b4ad9cba75560020f"
-  name = "github.com/xanzy/ssh-agent"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "640f0ab560aeb89d523bb6ac322b1244d5c3796c"
-  version = "v0.2.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:19469bd9ed9a0ab16d14e328f48f9b97113b9a54bdc8b16ad47ba2c378778818"
-  name = "golang.org/x/crypto"
-  packages = [
-    "cast5",
-    "curve25519",
-    "ed25519",
-    "ed25519/internal/edwards25519",
-    "openpgp",
-    "openpgp/armor",
-    "openpgp/elgamal",
-    "openpgp/errors",
-    "openpgp/packet",
-    "openpgp/s2k",
-    "pbkdf2",
-    "scrypt",
-    "ssh",
-    "ssh/agent",
-    "ssh/knownhosts",
-    "ssh/terminal",
-  ]
-  pruneopts = "UT"
-  revision = "96846453c37f0876340a66a47f3f75b1f3a6cd2d"
-
-[[projects]]
-  branch = "master"
-  digest = "1:05975da5a07cfcf19e75724b282453225b4c2d73ae5d238362406e408328d126"
-  name = "golang.org/x/net"
-  packages = [
-    "context",
-    "http2",
-    "http2/hpack",
-    "idna",
-    "internal/timeseries",
-    "lex/httplex",
-    "trace",
-  ]
-  pruneopts = "UT"
-  revision = "a8b9294777976932365dabb6640cf1468d95c70f"
-
-[[projects]]
-  branch = "master"
-  digest = "1:62ca3f49ce225f596c1b1581e2fcbbb7710d84aa59580d48c4ed025b43aa949b"
-  name = "golang.org/x/sys"
-  packages = [
-    "cpu",
-    "unix",
-    "windows",
-  ]
-  pruneopts = "UT"
-  revision = "5cd93ef61a7c8f0f858690154eb6de2e69415fa1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:3c6a43a33a473a50194e978adf812e62fe8ca0f430847231e1f4a71543572faa"
-  name = "golang.org/x/text"
-  packages = [
-    "collate",
-    "collate/build",
-    "internal/colltab",
-    "internal/gen",
-    "internal/tag",
-    "internal/triegen",
-    "internal/ucd",
-    "language",
-    "secure/bidirule",
-    "transform",
-    "unicode/bidi",
-    "unicode/cldr",
-    "unicode/norm",
-    "unicode/rangetable",
-  ]
-  pruneopts = "UT"
-  revision = "556d234e9c5239918de4d1fe247d1fe004e71764"
-
-[[projects]]
-  branch = "master"
-  digest = "1:cd018653a358d4b743a9d3bee89e825521f2ab2f2ec0770164bf7632d8d73ab7"
-  name = "google.golang.org/genproto"
-  packages = ["googleapis/rpc/status"]
-  pruneopts = "UT"
-  revision = "7f0da29060c682909f650ad8ed4e515bd74fa12a"
-
-[[projects]]
-  digest = "1:c3ad9841823db6da420a5625b367913b4ff54bbe60e8e3c98bd20e243e62e2d2"
-  name = "google.golang.org/grpc"
-  packages = [
-    ".",
-    "balancer",
-    "balancer/base",
-    "balancer/roundrobin",
-    "codes",
-    "connectivity",
-    "credentials",
-    "encoding",
-    "encoding/proto",
-    "grpclog",
-    "internal",
-    "internal/backoff",
-    "internal/channelz",
-    "internal/envconfig",
-    "internal/grpcrand",
-    "internal/transport",
-    "keepalive",
-    "metadata",
-    "naming",
-    "peer",
-    "resolver",
-    "resolver/dns",
-    "resolver/passthrough",
-    "stats",
-    "status",
-    "tap",
-  ]
-  pruneopts = "UT"
-  revision = "2e463a05d100327ca47ac218281906921038fd95"
-  version = "v1.16.0"
-
-[[projects]]
-  digest = "1:fafaec170283195ece36f81308d93913f10d5b650302d686ba28789cf70b6d01"
-  name = "gopkg.in/bblfsh/client-go.v3"
-  packages = [
-    ".",
-    "tools",
-  ]
-  pruneopts = "UT"
-  revision = "f1bb4239c6001f5f0b1f370b7d4a64866464c07b"
-  version = "v3.2.0"
-
-[[projects]]
-  digest = "1:861bb28098fdd02360af9d9a1c246cce4e255c94d6a75661e74dd60144d72105"
-  name = "gopkg.in/bblfsh/sdk.v1"
-  packages = [
-    "manifest",
-    "protocol",
-    "uast",
-  ]
-  pruneopts = "UT"
-  revision = "94e3b212553e761677da180f321d9a7a60ebec5f"
-  version = "v1.16.1"
-
-[[projects]]
-  digest = "1:5d6f2fec85fa4f0a6c8828c790c8b33be009032b8f50f899c11d4aaec0157485"
-  name = "gopkg.in/bblfsh/sdk.v2"
-  packages = [
-    "driver",
-    "driver/errors",
-    "driver/manifest",
-    "protocol",
-    "uast",
-    "uast/nodes",
-    "uast/nodes/nodesproto",
-    "uast/nodes/nodesproto/pio",
-    "uast/query",
-    "uast/query/xpath",
-    "uast/role",
-    "uast/transformer",
-  ]
-  pruneopts = "UT"
-  revision = "e39a01efecd8a8670471352b3276c17d5e0dd7a8"
-  version = "v2.14.1"
-
-[[projects]]
-  branch = "master"
-  digest = "1:454dadc0f4c0252055bc56677665f87736f1ec62c960b21e6c116e7f70f993a4"
-  name = "gopkg.in/cheggaaa/pb.v1"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "43d64de27312b32812ca7e994fa0bb03ccf08fdf"
-
-[[projects]]
-  branch = "master"
-  digest = "1:8276341abd121205600721bd831eb5209b83dd7a124d3a982e3ccc2da8c03012"
-  name = "gopkg.in/neurosnap/sentences.v1"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "a7f18ead1433a139742a8b42ce7a059cfb484d60"
-
-[[projects]]
-  digest = "1:056502949d8cff87f3c4b90ce1f1885b4c0a0566cf59ba20dea835f3be94a18d"
-  name = "gopkg.in/src-d/enry.v1"
-  packages = [
-    ".",
-    "data",
-    "internal/tokenizer",
-    "regex",
-  ]
-  pruneopts = "UT"
-  revision = "fe18dc0830edf4f567b398c8e2b5500af239623a"
-  version = "v1.6.8"
-
-[[projects]]
-  digest = "1:243e7c47ccea1c5afc5c9283fccb7f44ceb051db90bb7a68bcf0d45c7a204aec"
-  name = "gopkg.in/src-d/go-billy-siva.v4"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "80a2c7ecfab413643f4101751b0bea1b5215ed45"
-  version = "v4.3.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:38a7affd09d9ae9111aa4e4406216b27ead3c798d38e11572757d7f37b92e631"
-  name = "gopkg.in/src-d/go-billy.v4"
-  packages = [
-    ".",
-    "helper/chroot",
-    "helper/mount",
-    "helper/polyfill",
-    "memfs",
-    "osfs",
-    "util",
-  ]
-  pruneopts = "UT"
-  revision = "83cf655d40b15b427014d7875d10850f96edba14"
-
-[[projects]]
-  digest = "1:48c5414d07b77e35a4c19f35e1c78d6a0cbdba6386005d0f8b7b86862d0ceca3"
-  name = "gopkg.in/src-d/go-errors.v1"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "8bbbeeb767dfdd053b9b45d5a16a4f4ce2c6f694"
-  version = "v1.0.0"
-
-[[projects]]
-  digest = "1:44801e4be7066a82dc7a7f608d31f99c5c0f5a65a0215b37401a5657ce52940d"
-  name = "gopkg.in/src-d/go-git.v4"
-  packages = [
-    ".",
-    "config",
-    "internal/revision",
-    "internal/url",
-    "plumbing",
-    "plumbing/cache",
-    "plumbing/filemode",
-    "plumbing/format/config",
-    "plumbing/format/diff",
-    "plumbing/format/gitignore",
-    "plumbing/format/idxfile",
-    "plumbing/format/index",
-    "plumbing/format/objfile",
-    "plumbing/format/packfile",
-    "plumbing/format/pktline",
-    "plumbing/object",
-    "plumbing/protocol/packp",
-    "plumbing/protocol/packp/capability",
-    "plumbing/protocol/packp/sideband",
-    "plumbing/revlist",
-    "plumbing/storer",
-    "plumbing/transport",
-    "plumbing/transport/client",
-    "plumbing/transport/file",
-    "plumbing/transport/git",
-    "plumbing/transport/http",
-    "plumbing/transport/internal/common",
-    "plumbing/transport/server",
-    "plumbing/transport/ssh",
-    "storage",
-    "storage/filesystem",
-    "storage/filesystem/dotgit",
-    "storage/memory",
-    "utils/binary",
-    "utils/diff",
-    "utils/ioutil",
-    "utils/merkletrie",
-    "utils/merkletrie/filesystem",
-    "utils/merkletrie/index",
-    "utils/merkletrie/internal/frame",
-    "utils/merkletrie/noder",
-  ]
-  pruneopts = "UT"
-  revision = "db6c41c156481962abf9a55a324858674c25ab08"
-  version = "v4.10.0"
-
-[[projects]]
-  digest = "1:ba158cc44e2037bc427be0c4b7d7d70cc9e0320a2ef31dba7bc33a86492b0314"
-  name = "gopkg.in/src-d/go-siva.v1"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "0c04605024c3bee1d4389992be452d182ae98922"
-  version = "v1.4.0"
-
-[[projects]]
-  branch = "master"
-  digest = "1:98e121dbd49eb03c58bd8ef3b76322b2fdc3676cf11fa0084bb17ff01b2aa704"
-  name = "gopkg.in/toqueteos/substring.v1"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "c5f61671513240ddf5563635cc4a90e9f3ae4710"
-
-[[projects]]
-  branch = "master"
-  digest = "1:bb55e2e0b84d01d21855d3c0db46f2581b44fc82f4138d9554b0ac459e08f5f6"
-  name = "gopkg.in/vmarkovtsev/BiDiSentiment.v1"
-  packages = [
-    ".",
-    "assets",
-  ]
-  pruneopts = "UT"
-  revision = "75f168ddf1615a274af79640178536b2adc44123"
-
-[[projects]]
-  branch = "master"
-  digest = "1:9df3443440bf95dc72f21ffc33300eca3975edf4b899af969a577879afe551de"
-  name = "gopkg.in/warnings.v0"
-  packages = ["."]
-  pruneopts = "UT"
-  revision = "8a331561fe74dadba6edfc59f3be66c22c3b065d"
-
-[solve-meta]
-  analyzer-name = "dep"
-  analyzer-version = 1
-  input-imports = [
-    "github.com/Jeffail/tunny",
-    "github.com/Masterminds/sprig",
-    "github.com/fatih/camelcase",
-    "github.com/gogo/protobuf/proto",
-    "github.com/gogo/protobuf/sortkeys",
-    "github.com/minio/highwayhash",
-    "github.com/mitchellh/go-homedir",
-    "github.com/pkg/errors",
-    "github.com/sergi/go-diff/diffmatchpatch",
-    "github.com/spf13/cobra",
-    "github.com/spf13/pflag",
-    "github.com/stretchr/testify/assert",
-    "github.com/stretchr/testify/require",
-    "golang.org/x/crypto/ssh/terminal",
-    "gopkg.in/bblfsh/client-go.v3",
-    "gopkg.in/bblfsh/client-go.v3/tools",
-    "gopkg.in/bblfsh/sdk.v2/uast",
-    "gopkg.in/bblfsh/sdk.v2/uast/nodes",
-    "gopkg.in/bblfsh/sdk.v2/uast/nodes/nodesproto",
-    "gopkg.in/bblfsh/sdk.v2/uast/query",
-    "gopkg.in/cheggaaa/pb.v1",
-    "gopkg.in/src-d/enry.v1",
-    "gopkg.in/src-d/go-billy-siva.v4",
-    "gopkg.in/src-d/go-billy.v4/memfs",
-    "gopkg.in/src-d/go-billy.v4/osfs",
-    "gopkg.in/src-d/go-git.v4",
-    "gopkg.in/src-d/go-git.v4/config",
-    "gopkg.in/src-d/go-git.v4/plumbing",
-    "gopkg.in/src-d/go-git.v4/plumbing/cache",
-    "gopkg.in/src-d/go-git.v4/plumbing/object",
-    "gopkg.in/src-d/go-git.v4/plumbing/storer",
-    "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh",
-    "gopkg.in/src-d/go-git.v4/storage",
-    "gopkg.in/src-d/go-git.v4/storage/filesystem",
-    "gopkg.in/src-d/go-git.v4/storage/memory",
-    "gopkg.in/src-d/go-git.v4/utils/binary",
-    "gopkg.in/src-d/go-git.v4/utils/merkletrie",
-    "gopkg.in/vmarkovtsev/BiDiSentiment.v1",
-  ]
-  solver-name = "gps-cdcl"
-  solver-version = 1

+ 0 - 91
Gopkg.toml

@@ -1,91 +0,0 @@
-[[override]]
-  name = "github.com/xanzy/ssh-agent"
-  version = "0.2.0"
-
-[[override]]
-  name = "gopkg.in/src-d/go-siva.v1"
-  version = "1.4.0"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/Masterminds/sprig"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/fatih/camelcase"
-
-[[constraint]]
-  name = "github.com/gogo/protobuf"
-  version = "1.1.1"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/Jeffail/tunny"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/minio/highwayhash"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/mitchellh/go-homedir"
-
-[[constraint]]
-  branch = "master"
-  name = "github.com/pkg/errors"
-
-[[constraint]]
-  revision = "da645544ed44df016359bd4c0e3dc60ee3a0da43"
-  name = "github.com/sergi/go-diff"
-
-[[constraint]]
-  name = "github.com/spf13/cobra"
-  version = "0.0.3"
-
-[[constraint]]
-  name = "github.com/spf13/pflag"
-  version = "1.0.2"
-
-[[constraint]]
-  revision = "5b93e2dc01fd8fbf32aa74a198b0ebe78f6f6b6f"
-  name = "github.com/stretchr/testify"
-
-[[constraint]]
-  branch = "master"
-  name = "golang.org/x/crypto"
-
-[[constraint]]
-  name = "gopkg.in/bblfsh/client-go.v3"
-  version = "3.2.0"
-
-[[constraint]]
-  name = "gopkg.in/bblfsh/sdk.v2"
-  version = "2.14.1"
-
-[[constraint]]
-  branch = "master"
-  name = "gopkg.in/cheggaaa/pb.v1"
-
-[[constraint]]
-  version = "v1.6.8"
-  name = "gopkg.in/src-d/enry.v1"
-
-[[constraint]]
-  version = "v4.3.0"
-  name = "gopkg.in/src-d/go-billy-siva.v4"
-
-[[constraint]]
-  branch = "master"
-  name = "gopkg.in/src-d/go-billy.v4"
-
-[[constraint]]
-  name = "gopkg.in/src-d/go-git.v4"
-  version = "4.10.0"
-
-[[constraint]]
-  branch = "master"
-  name = "gopkg.in/vmarkovtsev/BiDiSentiment.v1"
-
-[prune]
-  go-tests = true
-  unused-packages = true

+ 12 - 11
Makefile

@@ -1,4 +1,5 @@
-GOPATH ?= $(shell go env GOPATH)
+GOBIN ?= .
+GO111MODULE=on
 ifneq ($(OS),Windows_NT)
 EXE =
 else
@@ -7,20 +8,20 @@ endif
 PKG = $(shell go env GOOS)_$(shell go env GOARCH)
 TAGS ?=
 
-all: ${GOPATH}/bin/hercules${EXE}
+all: ${GOBIN}/hercules${EXE}
 
 test: all
 	go test gopkg.in/src-d/hercules.v10
 
-${GOPATH}/bin/protoc-gen-gogo${EXE}:
-	go get -v github.com/gogo/protobuf/protoc-gen-gogo
+${GOBIN}/protoc-gen-gogo${EXE}:
+	go build github.com/gogo/protobuf/protoc-gen-gogo
 
 ifneq ($(OS),Windows_NT)
-internal/pb/pb.pb.go: internal/pb/pb.proto ${GOPATH}/bin/protoc-gen-gogo
-	PATH=${PATH}:${GOPATH}/bin protoc --gogo_out=internal/pb --proto_path=internal/pb internal/pb/pb.proto
+internal/pb/pb.pb.go: internal/pb/pb.proto ${GOBIN}/protoc-gen-gogo
+	PATH=${PATH}:${GOBIN} protoc --gogo_out=internal/pb --proto_path=internal/pb internal/pb/pb.proto
 else
-internal/pb/pb.pb.go: internal/pb/pb.proto ${GOPATH}/bin/protoc-gen-gogo.exe
-	export PATH="${PATH};${GOPATH}\bin" && \
+internal/pb/pb.pb.go: internal/pb/pb.proto ${GOBIN}/protoc-gen-gogo.exe
+	export PATH="${PATH};${GOBIN}" && \
 	protoc --gogo_out=internal/pb --proto_path=internal/pb internal/pb/pb.proto
 endif
 
@@ -31,7 +32,7 @@ cmd/hercules/plugin_template_source.go: cmd/hercules/plugin.template
 	cd cmd/hercules && go generate
 
 vendor:
-	dep ensure -v
+	go mod vendor
 
-${GOPATH}/bin/hercules${EXE}: vendor *.go */*.go */*/*.go */*/*/*.go internal/pb/pb.pb.go python/labours/pb_pb2.py cmd/hercules/plugin_template_source.go
-	go get -tags "$(TAGS)" -ldflags "-X gopkg.in/src-d/hercules.v10.BinaryGitHash=$(shell git rev-parse HEAD)" gopkg.in/src-d/hercules.v10/cmd/hercules
+${GOBIN}/hercules${EXE}: vendor *.go */*.go */*/*.go */*/*/*.go internal/pb/pb.pb.go python/labours/pb_pb2.py cmd/hercules/plugin_template_source.go
+	go build -tags "$(TAGS)" -ldflags "-X gopkg.in/src-d/hercules.v10.BinaryGitHash=$(shell git rev-parse HEAD)" gopkg.in/src-d/hercules.v10/cmd/hercules

+ 11 - 4
cmd/hercules/generate_plugin.go

@@ -7,6 +7,7 @@ import (
 	"os"
 	"os/exec"
 	"path"
+	"path/filepath"
 	"runtime"
 	"strings"
 	"text/template"
@@ -88,8 +89,12 @@ var generatePluginCmd = &cobra.Command{
 			protoBuf,
 		}
 		env := os.Environ()
-		env = append(env, fmt.Sprintf(
-			"PATH=%s:%s", os.Getenv("PATH"), path.Join(os.Getenv("GOPATH"), "bin")))
+		extraPath, _ := filepath.Abs(filepath.Dir(os.Args[0]))
+		gobin := os.Getenv("GOBIN")
+		if gobin != "" {
+			extraPath = gobin + ":" + extraPath
+		}
+		env = append(env, fmt.Sprintf("PATH=%s:%s", os.Getenv("PATH"), extraPath))
 		if err != nil {
 			panic("protoc was not found at " + env[len(env)-1])
 		}
@@ -101,13 +106,15 @@ var generatePluginCmd = &cobra.Command{
 		}
 		if !disableMakefile {
 			makefile := path.Join(outputDir, "Makefile")
-			gen = template.Must(template.New("plugin").Parse(`all: {{.shlib}}
+			gen = template.Must(template.New("plugin").Parse(`GO111MODULE = on
+
+all: {{.shlib}}
 
 {{.shlib}}: {{.output}} {{.protogo}}
 ` + "\t" + `go build -buildmode=plugin -linkshared {{.output}} {{.protogo}}
 
 {{.protogo}}: {{.proto}}
-` + "\t" + `PATH=$$PATH:$$GOPATH/bin protoc --gogo_out=. --proto_path=. {{.proto}}
+` + "\t" + `PATH=$$PATH:$$GOBIN protoc --gogo_out=. --proto_path=. {{.proto}}
 `))
 			buffer := new(bytes.Buffer)
 			mkrelative := func(name string) {

+ 47 - 0
go.mod

@@ -0,0 +1,47 @@
+module gopkg.in/src-d/hercules.v10
+
+go 1.12
+
+require (
+	github.com/BurntSushi/toml v0.3.1 // indirect
+	github.com/Jeffail/tunny v0.0.0-20180304204616-59cfa8fcb19f
+	github.com/Masterminds/semver v0.0.0-20180807142431-c84ddcca87bf // indirect
+	github.com/Masterminds/sprig v0.0.0-20180725212158-77bb58b7f5e1
+	github.com/antchfx/xpath v0.0.0-20180922041825-3de91f3991a1 // indirect
+	github.com/aokoli/goutils v1.0.1 // indirect
+	github.com/fatih/camelcase v1.0.0
+	github.com/fatih/color v1.7.0 // indirect
+	github.com/gogo/protobuf v1.3.0
+	github.com/google/uuid v0.0.0-20180828181555-e704694aed0e // indirect
+	github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
+	github.com/huandu/xstrings v0.0.0-20180906151751-8bbcf2f9ccb5 // indirect
+	github.com/imdario/mergo v0.3.6 // indirect
+	github.com/inconshreveable/mousetrap v1.0.0 // indirect
+	github.com/mattn/go-colorable v0.1.2 // indirect
+	github.com/mattn/go-runewidth v0.0.0-20170510074858-97311d9f7767 // indirect
+	github.com/mcuadros/go-lookup v0.0.0-20171110082742-5650f26be767 // indirect
+	github.com/minio/highwayhash v0.0.0-20180501080913-85fc8a2dacad
+	github.com/mitchellh/go-homedir v1.0.0
+	github.com/neurosnap/sentences v1.0.6 // indirect
+	github.com/opentracing/opentracing-go v1.0.2 // indirect
+	github.com/pkg/errors v0.8.0
+	github.com/sergi/go-diff v1.0.0
+	github.com/spf13/cobra v0.0.3
+	github.com/spf13/pflag v1.0.3
+	github.com/src-d/enry/v2 v2.1.0
+	github.com/stretchr/testify v1.3.0
+	github.com/tensorflow/tensorflow v0.0.0-20180308082300-f73d7c90ed05 // indirect
+	golang.org/x/crypto v0.0.0-20180904163835-0709b304e793
+	google.golang.org/grpc v1.16.0 // indirect
+	gopkg.in/bblfsh/client-go.v3 v3.2.0
+	gopkg.in/bblfsh/sdk.v1 v1.17.0 // indirect
+	gopkg.in/bblfsh/sdk.v2 v2.14.1
+	gopkg.in/cheggaaa/pb.v1 v1.0.20
+	gopkg.in/neurosnap/sentences.v1 v1.0.6 // indirect
+	gopkg.in/src-d/go-billy-siva.v4 v4.3.0
+	gopkg.in/src-d/go-billy.v4 v4.2.1
+	gopkg.in/src-d/go-errors.v1 v1.0.0 // indirect
+	gopkg.in/src-d/go-git.v4 v4.10.0
+	gopkg.in/src-d/go-siva.v1 v1.4.0 // indirect
+	gopkg.in/vmarkovtsev/BiDiSentiment.v1 v1.0.0-20180311115214-75f168ddf161
+)

+ 165 - 0
go.sum

@@ -0,0 +1,165 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Jeffail/tunny v0.0.0-20180304204616-59cfa8fcb19f h1:oj65D2psW7CqQj2g8W9/0fUjYGAhbMH9M0Spsn/Wb4c=
+github.com/Jeffail/tunny v0.0.0-20180304204616-59cfa8fcb19f/go.mod h1:BX3q3G70XX0UmIkDWfDHoDRquDS1xFJA5VTbMf+14wM=
+github.com/Masterminds/semver v0.0.0-20180807142431-c84ddcca87bf h1:BMUJnVJI5J506LOcyGHEvbCocMHAmKTRcG6CMAwGFYU=
+github.com/Masterminds/semver v0.0.0-20180807142431-c84ddcca87bf/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
+github.com/Masterminds/sprig v0.0.0-20180725212158-77bb58b7f5e1 h1:KxhCvkM35xYIZiEquS2iPL7kvugRT5FxUEugHqHr3+Y=
+github.com/Masterminds/sprig v0.0.0-20180725212158-77bb58b7f5e1/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
+github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
+github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
+github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
+github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
+github.com/antchfx/xpath v0.0.0-20180922041825-3de91f3991a1 h1:nt4RMjvM9pJ5HR7WkCeAnDz1pgHbLT2vxICalUTWcJU=
+github.com/antchfx/xpath v0.0.0-20180922041825-3de91f3991a1/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
+github.com/aokoli/goutils v1.0.1 h1:7fpzNGoJ3VA8qcrm++XEE1QUe0mIwNeLa02Nwq7RDkg=
+github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/emirpasic/gods v1.9.0 h1:rUF4PuzEjMChMiNsVjdI+SyLu7rEqpQ5reNFnhC7oFo=
+github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
+github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
+github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
+github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ=
+github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
+github.com/gliderlabs/ssh v0.1.1 h1:j3L6gSLQalDETeEg/Jg0mGY0/y/N6zI2xX1978P0Uqw=
+github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
+github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.3.0 h1:G8O7TerXerS4F6sx9OV7/nRfJdnXgHZu/S/7F2SN+UE=
+github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/uuid v0.0.0-20180828181555-e704694aed0e h1:6zFQ030QoMIxZB6OutG42h2X3eeDWLx0JHvnq8Rd2+A=
+github.com/google/uuid v0.0.0-20180828181555-e704694aed0e/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU=
+github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw=
+github.com/huandu/xstrings v0.0.0-20180906151751-8bbcf2f9ccb5 h1:JpFoh6mXPEoUpIgH3hg22MgQg+qwMU1eGdnWUII9csA=
+github.com/huandu/xstrings v0.0.0-20180906151751-8bbcf2f9ccb5/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
+github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
+github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
+github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e h1:RgQk53JHp/Cjunrr1WlsXSZpqXn+uREuHvUVcK82CV8=
+github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-runewidth v0.0.0-20170510074858-97311d9f7767 h1:Nk2R0tWpD2RdkQ+53zE6kWnSGuhQyDlnOs2MPiqVubE=
+github.com/mattn/go-runewidth v0.0.0-20170510074858-97311d9f7767/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
+github.com/mcuadros/go-lookup v0.0.0-20171110082742-5650f26be767 h1:BrhJNdEFWGuiJk/3/SwsG5Rex3zjFxYsDi2bpd7382Y=
+github.com/mcuadros/go-lookup v0.0.0-20171110082742-5650f26be767/go.mod h1:ct+byCpkFokm4J0tiuAvB8cf2ttm6GcCe89Yr25nGKg=
+github.com/minio/highwayhash v0.0.0-20180501080913-85fc8a2dacad h1:L+8skVz2lusCbtlalLXmJp+TK8XaGAsZ3utSC3k5Jc0=
+github.com/minio/highwayhash v0.0.0-20180501080913-85fc8a2dacad/go.mod h1:NL8wme5P5MoscwAkXfGroz3VgpCdhBw3KYOu5mEsvpU=
+github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/neurosnap/sentences v1.0.6 h1:iBVUivNtlwGkYsJblWV8GGVFmXzZzak907Ci8aA0VTE=
+github.com/neurosnap/sentences v1.0.6/go.mod h1:pg1IapvYpWCJJm/Etxeh0+gtMf1rI1STY9S7eUCPbDc=
+github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
+github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA=
+github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
+github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
+github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
+github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/src-d/enry/v2 v2.1.0 h1:z1L8t+B8bh3mmjPkJrgOTnVRpFGmTPJsplHX9wAn6BI=
+github.com/src-d/enry/v2 v2.1.0/go.mod h1:qQeCMRwzMF3ckeGr+h0tJLdxXnq+NVZsIDMELj0t028=
+github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4=
+github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
+github.com/src-d/go-oniguruma v1.1.0 h1:EG+Nm5n2JqWUaCjtM0NtutPxU7ZN5Tp50GWrrV8bTww=
+github.com/src-d/go-oniguruma v1.1.0/go.mod h1:chVbff8kcVtmrhxtZ3yBVLLquXbzCS6DrxQaAK/CeqM=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/tensorflow/tensorflow v0.0.0-20180308082300-f73d7c90ed05 h1:s3/JFc2zHAyc2QKv4yb7hbiFjx8g3F8DVr2HaP9kdBY=
+github.com/tensorflow/tensorflow v0.0.0-20180308082300-f73d7c90ed05/go.mod h1:itOSERT4trABok4UOoG+X4BoKds9F3rIsySdn+Lvu90=
+github.com/toqueteos/trie v1.0.0 h1:8i6pXxNUXNRAqP246iibb7w/pSFquNTQ+uNfriG7vlk=
+github.com/toqueteos/trie v1.0.0/go.mod h1:Ywk48QhEqhU1+DwhMkJ2x7eeGxDHiGkAdc9+0DYcbsM=
+github.com/xanzy/ssh-agent v0.2.0 h1:Adglfbi5p9Z0BmK2oKU9nTG+zKfniSfnaMYB+ULd+Ro=
+github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793 h1:u+LnwYTOOW7Ukr/fppxEb1Nwz0AtPflrblfvUudpo+I=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/grpc v1.16.0 h1:dz5IJGuC2BB7qXR5AyHNwAUBhZscK2xVez7mznh72sY=
+google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio=
+gopkg.in/bblfsh/client-go.v3 v3.2.0 h1:07e26b+ghVCIxc+Kbjs1qOMf/qFDzeDemy8+i1k4VJQ=
+gopkg.in/bblfsh/client-go.v3 v3.2.0/go.mod h1:L6DKtaGVCCp07JL8MO/8OuI6Bsyb2BuhW2hqUksfc8Y=
+gopkg.in/bblfsh/sdk.v1 v1.17.0 h1:Ez/4P0S0Zaq30iZKfiTlhOtqMx6dfQHMTYpqKFvnv4A=
+gopkg.in/bblfsh/sdk.v1 v1.17.0/go.mod h1:C50G07MDlG8LaS4El1h/G7fjz8Ho9VNmH68Dt3cVVnQ=
+gopkg.in/bblfsh/sdk.v2 v2.14.1 h1:QHwUujeUiLtzm+EsPD6+KbVEpSq9QU9IDMjLhkGJ9VE=
+gopkg.in/bblfsh/sdk.v2 v2.14.1/go.mod h1:H/uxybs1j7MNuEEoiht9VzYkuQ7aUUjTtEUBtKfeUkM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/cheggaaa/pb.v1 v1.0.20 h1:kgQVoCjFPiI1fNjdWthabnG1rOAb+/7Z6KeGk2aeZ/w=
+gopkg.in/cheggaaa/pb.v1 v1.0.20/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
+gopkg.in/neurosnap/sentences.v1 v1.0.6 h1:v7ElyP020iEZQONyLld3fHILHWOPs+ntzuQTNPkul8E=
+gopkg.in/neurosnap/sentences.v1 v1.0.6/go.mod h1:YlK+SN+fLQZj+kY3r8DkGDhDr91+S3JmTb5LSxFRQo0=
+gopkg.in/src-d/go-billy-siva.v4 v4.3.0 h1:bin2telR2qmBfHfTb61SboE4M1LjofSN0g6vn4Tmdck=
+gopkg.in/src-d/go-billy-siva.v4 v4.3.0/go.mod h1:4wKeCzOCSsdyFeM5+58M6ObU6FM+lZT12p7zm7A+9n0=
+gopkg.in/src-d/go-billy.v4 v4.2.1 h1:omN5CrMrMcQ+4I8bJ0wEhOBPanIRWzFC953IiXKdYzo=
+gopkg.in/src-d/go-billy.v4 v4.2.1/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk=
+gopkg.in/src-d/go-errors.v1 v1.0.0 h1:cooGdZnCjYbeS1zb1s6pVAAimTdKceRrpn7aKOnNIfc=
+gopkg.in/src-d/go-errors.v1 v1.0.0/go.mod h1:q1cBlomlw2FnDBDNGlnh6X0jPihy+QxZfMMNxPCbdYg=
+gopkg.in/src-d/go-git-fixtures.v3 v3.1.1 h1:XWW/s5W18RaJpmo1l0IYGqXKuJITWRFuA45iOf1dKJs=
+gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g=
+gopkg.in/src-d/go-git.v4 v4.10.0 h1:NWjTJTQnk8UpIGlssuefyDZ6JruEjo5s88vm88uASbw=
+gopkg.in/src-d/go-git.v4 v4.10.0/go.mod h1:Vtut8izDyrM8BUVQnzJ+YvmNcem2J89EmfZYCkLokZk=
+gopkg.in/src-d/go-siva.v1 v1.4.0 h1:OBNXWqhKfEBE3lKkmhGqnp0Y2I2bmgez8NGuc8WhAYw=
+gopkg.in/src-d/go-siva.v1 v1.4.0/go.mod h1:tk1jnIXawd/PTlRNWdr5V5lC0PttNJmu1fv7wt7IZlw=
+gopkg.in/toqueteos/substring.v1 v1.0.2 h1:urLqCeMm6x/eTuQa1oZerNw8N1KNOIp5hD5kGL7lFsE=
+gopkg.in/toqueteos/substring.v1 v1.0.2/go.mod h1:Eb2Z1UYehlVK8LYW2WBVR2rwbujsz3aX8XDrM1vbNew=
+gopkg.in/vmarkovtsev/BiDiSentiment.v1 v1.0.0-20180311115214-75f168ddf161 h1:cWx6/seC2BJsrwWbbEexCLjFb1MFU5n2bjcPt6owexw=
+gopkg.in/vmarkovtsev/BiDiSentiment.v1 v1.0.0-20180311115214-75f168ddf161/go.mod h1:CGBSPZicJmnv2dLqeOUkcvQhWVOfRENoRTsdspc0JZ0=
+gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

文件差异内容过多而无法显示
+ 785 - 214
internal/pb/pb.pb.go


+ 3 - 1
internal/pb/utils.go

@@ -1,6 +1,8 @@
 package pb
 
-import "sort"
+import (
+	"sort"
+)
 
 // ToBurndownSparseMatrix converts a rectangular integer matrix to the corresponding Protobuf object.
 // It is specific to hercules.BurndownAnalysis.

+ 1 - 1
internal/plumbing/languages.go

@@ -3,7 +3,7 @@ package plumbing
 import (
 	"path"
 
-	"gopkg.in/src-d/enry.v1"
+	"github.com/src-d/enry/v2"
 	"gopkg.in/src-d/go-git.v4/utils/merkletrie"
 
 	"gopkg.in/src-d/go-git.v4"

+ 2 - 2
internal/plumbing/tree_diff.go

@@ -7,11 +7,11 @@ import (
 	"regexp"
 	"strings"
 
-	"gopkg.in/src-d/enry.v1"
-
+	"github.com/src-d/enry/v2"
 	"gopkg.in/src-d/go-git.v4"
 	"gopkg.in/src-d/go-git.v4/plumbing"
 	"gopkg.in/src-d/go-git.v4/plumbing/object"
+
 	"gopkg.in/src-d/hercules.v10/internal/core"
 )
 

+ 25 - 8
python/labours/labours.py

@@ -83,6 +83,10 @@ def parse_args():
                         help="Do not run Tensorflow Projector on couples.")
     parser.add_argument("--max-people", default=20, type=int,
                         help="Maximum number of developers in overwrites matrix and people plots.")
+    parser.add_argument("--order-ownership-by-time", action="store_true",
+                        help="Sort developers in the ownership plot according to their first "
+                             "appearance in the history. The default is sorting by the number of "
+                             "commits.")
     args = parser.parse_args()
     return args
 
@@ -687,7 +691,7 @@ def load_burndown(header, name, matrix, resample, report_survival=True):
     return name, matrix, date_range_sampling, labels, granularity, sampling, resample
 
 
-def load_ownership(header, sequence, contents, max_people):
+def load_ownership(header, sequence, contents, max_people, order_by_time):
     pandas = import_pandas()
 
     start, last, sampling, _, tick = header
@@ -703,16 +707,28 @@ def load_ownership(header, sequence, contents, max_people):
         freq="%dD" % sampling)
 
     if people.shape[0] > max_people:
-        order = numpy.argsort(-people.sum(axis=1))
-        chosen_people = people[order[:max_people + 1]]
-        chosen_people[max_people] = people[order[max_people:]].sum(axis=0)
-        people = chosen_people
-        sequence = [sequence[i] for i in order[:max_people]] + ["others"]
+        chosen = numpy.argpartition(-numpy.sum(people, axis=1), max_people)
+        others = people[chosen[max_people:]].sum(axis=0)
+        people = people[chosen[:max_people + 1]]
+        people[max_people] = others
+        sequence = [sequence[i] for i in chosen[:max_people]] + ["others"]
         print("Warning: truncated people to the most owning %d" % max_people)
+
+    if order_by_time:
+        appearances = numpy.argmax(people > 0, axis=1)
+        if people.shape[0] > max_people:
+            appearances[-1] = people.shape[1]
+    else:
+        appearances = -people.sum(axis=1)
+        if people.shape[0] > max_people:
+            appearances[-1] = 0
+    order = numpy.argsort(appearances)
+    people = people[order]
+    sequence = [sequence[i] for i in order]
+
     for i, name in enumerate(sequence):
         if len(name) > 40:
             sequence[i] = name[:37] + "..."
-
     return sequence, people, date_range_sampling, last
 
 
@@ -1809,7 +1825,8 @@ def main():
             return
         try:
             plot_ownership(args, name, *load_ownership(
-                full_header, *reader.get_ownership_burndown(), max_people=args.max_people))
+                full_header, *reader.get_ownership_burndown(), max_people=args.max_people,
+                order_by_time=args.order_ownership_by_time))
         except KeyError:
             print("ownership: " + burndown_people_warning)