brew-go 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (7) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +2 -0
  4. data/Rakefile +1 -0
  5. data/bin/brew-go +150 -0
  6. data/brew-go.gemspec +25 -0
  7. metadata +78 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b726295d7a16eb32a802a75e1b9971b60c97f83
4
+ data.tar.gz: 450165449aac8fa92ccf14f18b7490d3a3b6de7b
5
+ SHA512:
6
+ metadata.gz: 2f0df540f28b49fbb1300f4bf1ca2a284f77873a113b2047c1eb64121fb6cbaa0fdd2aaa343640f19c0f7a5421ee91feb7778691ff7f0a9dcbdfd10926e58749
7
+ data.tar.gz: ee6a32738f440e14b0e461d6b4bb8fd03a7e132744021eabd5b7503ad16a0bdb26bc34ab8d3990fe1bce803647965763647db7fe7e0f018aedc58275bb26ec10
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/brew-go ADDED
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require 'fileutils'
5
+
6
+ unless defined? HOMEBREW_CELLAR
7
+ HOMEBREW_CELLAR = `brew --cellar`.chomp
8
+ end
9
+
10
+ @commons = {
11
+ "benchstat" => "golang.org/x/perf/cmd/benchstat",
12
+ "dlv" => "github.com/derekparker/delve/cmd/dlv",
13
+ "guru" => "golang.org/x/tools/cmd/guru",
14
+ }
15
+
16
+ def helpme
17
+ puts <<~HEREDOC
18
+ Manage Go packages via Homebrew.
19
+
20
+ Usage:
21
+ $ brew go get <url to package> ...
22
+ $ brew go rm <name> ...
23
+ $ brew go list [name]
24
+ $ brew go update [name] ...
25
+ $ brew go common
26
+
27
+ Examples:
28
+ $ brew go get golang.org/x/tools/cmd/guru
29
+ $ brew go get guru
30
+ $ brew go list
31
+ $ brew go list brew-go-guru
32
+ $ brew go list guru
33
+ $ brew go update
34
+ $ brew go update guru
35
+ HEREDOC
36
+ exit 1
37
+ end
38
+
39
+ def cmd_common
40
+ puts <<~HEREDOC
41
+ Here are a few commonly used tools. The names can be used as shortcuts:
42
+ $ brew go get guru
43
+
44
+ HEREDOC
45
+ print_formatted_list(@commons)
46
+ end
47
+
48
+ def cmd_get(packages)
49
+ threads = []
50
+ packages = resolve_common_packages packages
51
+
52
+ packages.each do |url|
53
+ threads << Thread.new do
54
+ name = File.basename url
55
+ cellarpath = "#{HOMEBREW_CELLAR}/brew-go-#{name}"
56
+ gopath = "#{cellarpath}/#{url.gsub('/', '#')}"
57
+
58
+ ENV["GOPATH"] = gopath
59
+ ENV.delete "GOBIN"
60
+
61
+ system "go get #{url}"
62
+ unless $?.success?
63
+ puts "[\x1b[31;1m✗\x1b[0m] #{url}"
64
+ FileUtils.remove_dir "#{cellarpath}", true
65
+ Thread.exit
66
+ end
67
+
68
+ puts "[\x1b[32;1m✓\x1b[0m] \x1b[1mbrew-go-#{name}\x1b[0m (#{url})"
69
+
70
+ FileUtils.remove_dir "#{gopath}/pkg", true
71
+ FileUtils.remove_dir "#{gopath}/src", true
72
+
73
+ system "brew unlink brew-go-#{name}", out: File::NULL
74
+ system "brew link brew-go-#{name}", out: File::NULL
75
+ end
76
+ end
77
+ threads.each { |thr| thr.join }
78
+ end
79
+
80
+ def cmd_list(name)
81
+ if name.nil?
82
+ installed = {}
83
+ Dir["#{HOMEBREW_CELLAR}/brew-go-*/*"].each do |path|
84
+ name = File.basename(Pathname(path).parent.to_s).sub("brew-go-", "")
85
+ url = get_url_from_cellar_path(path)
86
+ installed[name] = url
87
+ end
88
+ print_formatted_list(installed)
89
+ return
90
+ end
91
+
92
+ path = "#{HOMEBREW_CELLAR}/#{name}"
93
+ if Dir.exist? path
94
+ puts Dir["#{path}/**/*"].select { |f| File.file? f }
95
+ else
96
+ puts "No such keg: #{path}"
97
+ exit 1
98
+ end
99
+ end
100
+
101
+ def cmd_rm(names)
102
+ names.each do |name|
103
+ name = "brew-go-#{name}" unless name.start_with?("brew-go-")
104
+ system "brew uninstall #{name}"
105
+ end
106
+ end
107
+
108
+ def cmd_update(names)
109
+ names = names.map { |name| name.start_with?("brew-go-") ? name : "brew-go-#{name}" }
110
+ urls = if names.empty?
111
+ Dir["#{HOMEBREW_CELLAR}/brew-go-*/*"].map do |path|
112
+ get_url_from_cellar_path path
113
+ end
114
+ else
115
+ names.map do |name|
116
+ get_url_from_cellar_path Dir["#{HOMEBREW_CELLAR}/#{name}/*"].first
117
+ end
118
+ end
119
+ cmd_get urls
120
+ end
121
+
122
+ def get_url_from_cellar_path(path)
123
+ File.basename(path).gsub '#', '/'
124
+ end
125
+
126
+ def resolve_common_packages(packages)
127
+ packages.map { |p| @commons[p] || p }
128
+ end
129
+
130
+ def print_formatted_list(packages)
131
+ maxlen = packages.keys.map(&:length).max
132
+ packages.each do |name, url|
133
+ puts "\x1b[1m#{name.ljust(maxlen)}\x1b[0m (#{url})"
134
+ end
135
+ end
136
+
137
+ case ARGV.shift
138
+ when 'common', 'commo', 'comm', 'com', 'co', 'c'
139
+ cmd_common
140
+ when 'get', 'ge', 'g'
141
+ ARGV.empty? ? cmd_common : cmd_get(ARGV)
142
+ when 'list', 'lis', 'li', 'l'
143
+ cmd_list ARGV.first
144
+ when 'rm', 'r'
145
+ cmd_rm ARGV
146
+ when 'update', 'updat', 'upda', 'upd', 'up', 'u'
147
+ cmd_update ARGV
148
+ else
149
+ helpme
150
+ end
data/brew-go.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "brew-go"
7
+ spec.version = "1.0.0"
8
+ spec.authors = ["Marco Hinz"]
9
+ spec.email = ["mh.codebro@gmail.com"]
10
+
11
+ spec.summary = "Manage Go tools via Homebrew."
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://github.com/mhinz/brew-go"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+
20
+ spec.bindir = "bin"
21
+ spec.executables = ["brew-go"]
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.15"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brew-go
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Marco Hinz
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Manage Go tools via Homebrew.
42
+ email:
43
+ - mh.codebro@gmail.com
44
+ executables:
45
+ - brew-go
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - Gemfile
51
+ - Rakefile
52
+ - bin/brew-go
53
+ - brew-go.gemspec
54
+ homepage: https://github.com/mhinz/brew-go
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.6.13
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Manage Go tools via Homebrew.
78
+ test_files: []