forked from vitorgalvao/tiny-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcask-analytics
More file actions
executable file
·59 lines (43 loc) · 1.93 KB
/
Copy pathcask-analytics
File metadata and controls
executable file
·59 lines (43 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env ruby
require 'date'
require 'json'
require 'open-uri'
require 'open3'
require 'optionparser'
# Options
ARGV.push('--help') if ARGV.empty?
options = {}
OptionParser.new do |opt|
opt.banner = <<~EOS
Show analytics information for casks in the main taps.
Usage:
#{File.basename($PROGRAM_NAME)} [options] <cask_name>
Options:
EOS
opt.on('-a', '--no-age', 'Do not show when cask was added (faster output).') { options[:suppress_age] = true }
end.parse!
ARGV.each do |cask_name|
cask_path = Dir.glob(Open3.capture2('brew', '--prefix').first.strip + '/Homebrew/Library/Taps/homebrew/homebrew-cask*/Casks/' + cask_name + '.rb').first
abort 'Did not find any cask locally named ' + cask_name if cask_path.nil?
cask_tap_dir = File.dirname(File.dirname(cask_path))
added_message =
if options[:suppress_age]
''
else
system('git', '-C', cask_tap_dir, 'fetch', '--unshallow') if Open3.capture2('git', '-C', cask_tap_dir, 'rev-parse', '--is-shallow-repository').first.strip == 'true'
cask_added_date = Open3.capture2('git', '-C', cask_tap_dir, 'log', '--diff-filter=A', '--max-count=1', '--format=%aI', cask_path).first.strip
' (added ' + (Date.today - Date.parse(cask_added_date)).to_i.to_s + ' days ago)'
end
puts cask_name + added_message
analytics_dir = '/tmp/cask-analytics'
Dir.mkdir(analytics_dir) unless Dir.exist?(analytics_dir)
%w[30 90 365].each do |days|
json_file = File.join(analytics_dir, days + 'd.json')
File.write(json_file, URI.parse('https://formulae.brew.sh/api/analytics/cask-install/' + days + 'd.json').read) unless File.exist?(json_file)
analytics = JSON.parse(File.read(json_file))['items']
cask_info = analytics.select { |hash| hash['cask'] == cask_name }.first
print days + ' days: '
puts cask_info.nil? ? 'n/a' : cask_info['count'] + ' (#' + cask_info['number'].to_s + ')'
end
puts # Empty line to separate multiple casks
end