Skip to content

Instantly share code, notes, and snippets.

@paultag
Created September 11, 2015 16:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save paultag/0226965c62dbaf34118a to your computer and use it in GitHub Desktop.
Save paultag/0226965c62dbaf34118a to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"fmt"
"io"
"log"
"os"
"path"
"strings"
)
func FindRootPath(roots []string) string {
if len(roots) == 0 {
return ""
}
root := roots[0]
for _, entry := range roots {
if len(entry) < len(root) {
root = entry
}
}
return root
}
func main() {
for _, file := range os.Args[1:] {
mapping, err := ParseFile(file)
if err != nil {
log.Fatal(err)
}
for pkg, provides := range mapping {
paths := []string{}
for path, _ := range provides {
paths = append(paths, path)
}
fmt.Printf("%s: %s\n", pkg, FindRootPath(paths))
}
}
}
func eatLeader(reader *bufio.Reader) error {
for {
line, err := reader.ReadString('\n')
if err != nil {
return err
}
if strings.HasPrefix(line, "FILE ") {
return nil
}
}
}
type Mapping map[string]map[string]bool
func Partition(in, what string) (string, string) {
els := strings.SplitN(in, what, 2)
if len(els) == 2 {
return strings.TrimSpace(els[0]), strings.TrimSpace(els[1])
}
return strings.TrimSpace(els[0]), ""
}
var filePathLeader = "usr/share/gocode/src/"
func ComposeMapping(reader *bufio.Reader) (Mapping, error) {
ret := Mapping{}
for {
line, err := reader.ReadString('\n')
if err != nil {
if err == io.EOF {
break
}
return Mapping{}, err
}
filePath, pkgEntry := Partition(line, " ")
_, pkg := Partition(pkgEntry, "/")
if strings.HasPrefix(filePath, filePathLeader) {
// XXX: _fixtures
// if strings.Contains(filePath, "/testdata/") {
// continue
// }
importPath := path.Dir(filePath[len(filePathLeader):])
if _, ok := ret[pkg]; !ok {
ret[pkg] = map[string]bool{}
}
ret[pkg][importPath] = true
}
}
return ret, nil
}
func ParseFile(file string) (Mapping, error) {
fd, err := os.Open(file)
if err != nil {
return Mapping{}, err
}
reader := bufio.NewReader(fd)
eatLeader(reader)
return ComposeMapping(reader)
}
golang-gopkg-dancannon-gorethink.v1-dev: gopkg.in/dancannon
golang-gopkg-tomb.v1-dev: gopkg.in/tomb.v1
golang-gopkg-vmihailenco-msgpack.v2-dev: gopkg.in/vmihailenco/msgpack.v2
golang-thrift-dev: thrift
golang-log4go-dev: code.google.com/p/log4go
golang-coreos-log-dev: github.com/coreos/go-log/log
golang-github-getsentry-raven-go-dev: github.com/getsentry/raven-go
golang-golang-x-tools-dev: golang.org/x/tools
golang-github-shurcool-sanitized-anchor-name-dev: github.com/shurcooL/sanitized_anchor_name
golang-github-spf13-jwalterweatherman-dev: github.com/spf13/jwalterweatherman
influxdb-dev: github.com/influxdb/influxdb
golang-mreiferson-httpclient-dev: github.com/mreiferson/go-httpclient
golang-github-go-ldap-ldap-dev: github.com/go-ldap/ldap
golang-github-jacobsa-ratelimit-dev: github.com/jacobsa/ratelimit
golang-github-peterh-liner-dev: github.com/peterh/liner
golang-google-cloud-compute-metadata-dev: google.golang.org/cloud/internal
golang-github-abbot-go-http-auth-dev: github.com/abbot/go-http-auth
golang-github-boltdb-bolt-dev: github.com/boltdb/bolt
golang-github-hashicorp-raft-boltdb-dev: github.com/hashicorp/raft-boltdb
golang-github-julienschmidt-httprouter-dev: github.com/julienschmidt/httprouter
golang-github-naoina-go-stringutil-dev: github.com/naoina/go-stringutil
golang-github-odeke-em-command-dev: github.com/odeke-em/command
golang-github-prometheus-log-dev: github.com/prometheus/log
golang-goleveldb-dev: github.com/syndtr/goleveldb/leveldb
golang-codesearch-dev: code.google.com/p/codesearch/index
golang-github-bmizerany-pat-dev: github.com/bmizerany/pat
golang-gocheck-dev: launchpad.net/gocheck
golang-pq-dev: github.com/lib/pq
golang-godebiancontrol-dev: github.com/mstap
golang-robustirc-bridge-dev: github.com/robustirc/bridge/robustsession
golang-github-samuel-go-zookeeper-dev: github.com/samuel/go-zookeeper/zk
golang-gopkg-fatih-pool.v2-dev: gopkg.in/fatih/pool.v2
golang-goyaml-dev: launchpad.net/goyaml
golang-doozer-dev: github.com/4ad/doozer
golang-github-jacobsa-oglemock-dev: github.com/jacobsa/oglemock
golang-pault-go-topsort-dev: pault.ag/go/topsort
golang-github-golang-leveldb-dev: github.com/golang/leveldb
golang-procfs-dev: github.com/prometheus/procfs
golang-github-rakyll-statik-dev: github.com/rakyll/statik
golang-github-streadway-amqp-dev: github.com/streadway/amqp
golang-golang-x-oauth2-dev: golang.org/x/oauth2
golang-google-appengine-dev: google.golang.org/appengine
golang-x-text-dev: code.google.com/p
golang-siphash-dev: github.com/dchest/siphash
golang-logrus-dev: github.com/Sirupsen/logrus
golang-go.crypto-dev: code.google.com/p
golang-gogoprotobuf-dev: code.google.com/p
golang-gopkg-eapache-queue.v1-dev: github.com/eapache
golang-github-hashicorp-raft-dev: github.com/hashicorp/raft
golang-github-jacobsa-oglematchers-dev: github.com/jacobsa/oglematchers
golang-github-vishvananda-netlink-dev: github.com/vishvananda/netlink
golang-pault-go-config-dev: pault.ag/go/config
toxiproxy-dev: github.com/Shopify/toxiproxy
golang-github-d2g-dhcp4-dev: github.com/d2g/dhcp4
golang-yaml.v2-dev: gopkg.in/yaml.v2
golang-barcode-dev: github.com/boombuler/barcode
golang-testify-dev: github.com/stretchr/testify
golang-github-azure-go-pkcs12-dev: github.com/Azure/go-pkcs12
golang-github-go-sql-driver-mysql-dev: github.com/go-sql-driver/mysql
golang-github-jacobsa-timeutil-dev: github.com/jacobsa/timeutil
golang-github-odeke-em-cache-dev: github.com/odeke-em/cache
golang-github-samalba-dockerclient-dev: github.com/samalba/dockerclient
golang-golang-x-sys-dev: golang.org/x/sys
golang-collectd-dev: collectd.org/api
golang-goptlib-dev: git.torproject.org/pluggable-transports/goptlib.git
golang-github-inconshreveable-mousetrap-dev: github.com/inconshreveable/mousetrap
golang-github-jacobsa-syncutil-dev: github.com/jacobsa/syncutil
golang-bindata-dev: github.com/jteeuwen/go-bindata
golang-protobuf-extensions-dev: github.com/matttproud/golang_protobuf_extensions/ext
golang-gopkg-asn1-ber.v1-dev: gopkg.in/asn1-ber.v1
golang-go-xdg-dev: launchpad.net/go-xdg/v0
golang-xmpp-dev: github.com/agl/xmpp
golang-pb-dev: github.com/cheggaaa/pb
golang-dbus-dev: github.com/godbus/dbus
golang-github-rakyll-globalconf-dev: github.com/rakyll/globalconf
golang-github-glacjay-goini-dev: github.com/glacjay/goini
golang-github-go-xorm-core-dev: github.com/go-xorm/core
golang-github-google-btree-dev: github.com/google/btree
golang-golang-x-exp-dev: golang.org/x/exp/mmap
golang-golang-x-net-dev: code.google.com/p
obfs4proxy: git.torproject.org/pluggable-transports/obfs4.git/common/log
golang-docker-dev: github.com/docker/docker/pkg
golang-github-ugorji-go-msgpack-dev: github.com/ugorji/go-msgpack
golang-github-gorilla-handlers-dev: github.com/gorilla/handlers
golang-github-jtolds-gls-dev: github.com/jtolds/gls
golang-guestfs-dev: libguestfs.org/guestfs
golang-bazil-fuse-dev: bazil.org/fuse
dh-make-golang: github.com/Debian/dh-make-golang
golang-websocket-dev: github.com/gorilla/websocket
golang-github-odeke-em-cli-spinner-dev: github.com/odeke-em/cli-spinner
golang-github-davecgh-go-spew-dev: github.com/davecgh/go-spew/spew
golang-github-garyburd-redigo-dev: github.com/garyburd/redigo/redis
golang-github-docker-libtrust-dev: github.com/docker/libtrust
golang-termbox-dev: github.com/nsf/termbox-go
golang-github-spf13-pflag-dev: github.com/spf13/pflag
golang-github-azure-go-autorest-dev: github.com/Azure
golang-etcd-dev: github.com/coreos/go-etcd/etcd
golang-github-coreos-go-iptables-dev: github.com/coreos/go-iptables/iptables
golang-clockwork-dev: github.com/jonboulle/clockwork
golang-github-kimor79-gollectd-dev: github.com/kimor79/gollectd
golang-openldap-dev: github.com/mqu/openldap
golang-github-odeke-em-ripper-dev: github.com/odeke-em/ripper
golang-ginkgo-dev: github.com/onsi/ginkgo
golang-github-bradfitz-gomemcache-dev: github.com/bradfitz/gomemcache/memcache
golang-github-bradfitz-http2-dev: github.com/bradfitz/http2
golang-gopkg-mgo.v2-dev: labix.org/v2
golang-github-agtorre-gocolorize-dev: github.com/agtorre/gocolorize
golang-github-bmizerany-assert-dev: github.com/bmizerany/assert
golang-github-mattn-go-sqlite3-dev: github.com/mattn/go-sqlite3
golang-sorcix-irc-dev: github.com/sorcix/irc
golang-objx-dev: github.com/stretchr/objx
golang-gopacket-dev: code.google.com/p/gopacket
golang-ed25519-dev: github.com/agl/ed25519
golang-blackfriday-dev: github.com/russross/blackfriday
golang-github-vishvananda-netns-dev: github.com/vishvananda/netns
golang-github-jacobsa-util-dev: github.com/jacobsa/util/lrucache
golang-github-ugorji-go-codec-dev: github.com/ugorji/go
golang-toml-dev: github.com/BurntSushi/toml
golang-github-jacobsa-ogletest-dev: github.com/jacobsa/ogletest
golang-fsnotify-dev: gopkg.in
golang-github-tobi-airbrake-go-dev: github.com/tobi/airbrake-go
golang-github-vaughan0-go-ini-dev: github.com/vaughan0/go-ini
golang-rrd-dev: github.com/ziutek/rrd
golang-github-pborman-uuid-dev: github.com/pborman/uuid
golang-github-cloudfoundry-gosigar-dev: github.com/cloudfoundry/gosigar
golang-github-rainycape-unidecode-dev: github.com/rainycape/unidecode
golang-gocapability-dev: github.com/syndtr/gocapability/capability
golang-github-armon-go-metrics-dev: github.com/armon/go-metrics
golang-github-jacobsa-fuse-dev: github.com/jacobsa/fuse
golang-dns-dev: github.com/miekg/dns
golang-github-naoina-toml-dev: github.com/naoina/toml
golang-go-patricia-dev: gopkg.in/tchap
golang-go-semver-dev: github.com/coreos/go-semver
golang-github-jacobsa-reqtrace-dev: github.com/jacobsa/reqtrace
golang-github-gorilla-mux-dev,devel/golang-mux-dev: github.com/gorilla/mux
golang-github-kardianos-osext-dev: github.com/kardianos/osext
golang-gopkg-tomb.v2-dev: gopkg.in/tomb.v2
golang-go-md2man-dev: github.com/cpuguy83/go-md2man
golang-gopkg-eapache-go-resiliency.v1-dev: github.com/eapache
golang-github-gorhill-cronexpr-dev: github.com/gorhill/cronexpr
golang-codegangsta-cli-dev: github.com/codegangsta/cli
golang-glog-dev: github.com/golang/glog
golang-pty-dev: github.com/kr/pty
golang-text-dev: github.com/kr/text
golang-go-dbus-dev: launchpad.net/go-dbus/v1
golang-pault-go-debian-dev: pault.ag/go/debian/control
golang-github-cenkalti-backoff-dev: github.com/cenkalti/backoff
golang-context-dev: github.com/gorilla/context
golang-git2go-dev: github.com/libgit2/git2go
golang-prometheus-client-dev: github.com/prometheus/client_golang/text
golang-google-api-dev: google.golang.org/api/dns/v1
golang-check.v1-dev: gopkg.in/check.v1
golang-github-golang-snappy-dev: code.google.com/p
golang-github-jacobsa-gcloud-dev: github.com/jacobsa/gcloud/gcs
golang-vhost-dev: github.com/inconshreveable/go-vhost
golang-github-jacobsa-bazilfuse-dev: github.com/jacobsa/bazilfuse
golang-go-flags-dev: github.com/jessevdk/go-flags
golang-pretty-dev: github.com/kr/pretty
golang-gomega-dev: github.com/onsi/gomega
golang-github-opencontainers-specs-dev: github.com/opencontainers/specs
golang-gosqlite-dev: code.google.com/p/gosqlite/sqlite
golang-etcd-server-dev: github.com/coreos/etcd
golang-go-zfs-dev: github.com/mistifyio/go-zfs
golang-metrics-dev: github.com/rcrowley/go-metrics
golang-github-coreos-go-systemd-dev: github.com/coreos/go-systemd/dbus
golang-github-mattn-go-isatty-dev: github.com/mattn/go-isatty
golang-github-hashicorp-go-msgpack-dev: github.com/hashicorp/go-msgpack/codec
slt: github.com/inconshrevable/slt
golang-libgeoip-dev: github.com/nranchev/go-libGeoIP
golang-github-robfig-pathtree-dev: github.com/robfig/pathtree
golang-nzaat-dev: ancient-solutions.com/hash/nzaat
golang-goprotobuf-dev: code.google.com/p
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment