mry 0.53.0.0 → 0.54.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2eaf029a8c3e25b5f2735db4b479a3938238c37ea11268ef6455fb246c490a4c
4
- data.tar.gz: 06b2dc193c00736aa14a8ef7be5d97447e61ccfe43345bd602ea034873521cd0
3
+ metadata.gz: b98260ee2465b409a676c987c01451b2770c09a2770e19ceb37a3b5697ada4d0
4
+ data.tar.gz: 6a4aeb56cd615e3b46f093dc6ab8006a6e18570ba429991a34903ef0bcad6eda
5
5
  SHA512:
6
- metadata.gz: 2c206cf61303233db93407ab7f75fbdb87acde94dc5388628dad70d61ae4b940cef28968659e18e615912b1b481d7cc356b01d3d0c1744c1bc92f6f5ad50c0cc
7
- data.tar.gz: f53feb055daffede768686d88b918ecf71207634c0e1c428ff0897339de67b94ca370cbcb18c9734f2460517230114bfa75ad9dc0b454e5d8d7dcf7472c5719f
6
+ metadata.gz: 189f6063053bcd4ecc3de1eb9045b09b40af0ab1ce0fb6c6258a441cedaf258e08c5a611b18df2fe1466e3f52f784d55169fead61dd57c207fa00f9e285417c2
7
+ data.tar.gz: 345f674c312596fe2d5de953893169a8568a2b41aef3bdd548b42b9065605aa6881d84015bf4521dfebfd57c3b3747572732609ccda3bb3feae5049d67c31c1f
@@ -1,23 +1,24 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Usage: bin/check_rubocop_update v0.52.1 v0.53.0
3
+ # Usage: bin/check_rubocop_update v0.52.1 v0.53.0 ~/path/to/rubocop/
4
4
 
5
5
  require 'open3'
6
6
  require 'yaml'
7
7
  require 'tmpdir'
8
+ require 'etc'
8
9
 
9
10
  def debug_print(mes)
10
11
  $stdout.puts mes
11
12
  end
12
13
 
13
- def sh!(*cmd)
14
+ def sh!(*cmd, **opt)
14
15
  debug_print 'sh!: ' + cmd.join(' ')
15
- system(*cmd, exception: true)
16
+ system(*cmd, opt.merge(exception: true))
16
17
  end
17
18
 
18
- def capture3!(*cmd)
19
+ def capture3!(*cmd, **opt)
19
20
  debug_print 'capture3!: ' + cmd.join(' ')
20
- Open3.capture3(*cmd).tap do |out, err, status|
21
+ Open3.capture3(*cmd, **opt).tap do |out, err, status|
21
22
  raise "#{out} #{err}" unless status.success?
22
23
  end
23
24
  end
@@ -29,15 +30,12 @@ def each_commit(before, after, &block)
29
30
  stdout.each_line.map(&:chomp)
30
31
  end
31
32
  commits.each do |commit|
32
- sh! 'rm', '-f', 'Gemfile.lock' if File.exist?('Gemfile.lock')
33
- sh! 'bundle', 'install' if has_gemfile_change?(commit)
34
- sh! 'git', 'checkout', commit
35
- block.call
33
+ block.call commit
36
34
  end
37
35
  end
38
36
 
39
- def has_gemfile_change?(commit)
40
- capture3!('git', 'show', '--name-only', '--format=tformat:', commit).yield_self do |stdout, _stderr, _status|
37
+ def has_gemfile_change?(commit, repo)
38
+ capture3!('git', 'show', '--name-only', '--format=tformat:', commit, chdir: repo).yield_self do |stdout, _stderr, _status|
41
39
  stdout.each_line.any? do |fname|
42
40
  fname.chomp!
43
41
  fname == 'Gemfile' || fname == 'rubocop.gemspec'
@@ -53,40 +51,81 @@ def chtmpdir(&block)
53
51
  end
54
52
  end
55
53
 
56
- def main(before, after)
54
+ def with_repositories(remote, &block)
55
+ if File.directory?(remote)
56
+ Dir.chdir(remote) do
57
+ sh! 'git', 'fetch', 'origin'
58
+ end
59
+ end
60
+
61
+ chtmpdir do
62
+ repos = Array.new(Etc.nprocessors*2) do |idx|
63
+ sh! 'git', 'clone', remote, idx.to_s
64
+ File.join(Dir.pwd, idx.to_s)
65
+ end
66
+ block.call(repos)
67
+ end
68
+ end
69
+
70
+ def cops_each_commit(before, after, remote)
71
+ with_repositories(remote) do |repos|
72
+ q = Thread::Queue.new
73
+ [].tap do |result|
74
+ Dir.chdir(repos.first) do
75
+ each_commit(before + '~', after).each.with_index do |commit, idx|
76
+ q << [commit, idx]
77
+ end
78
+ end
79
+ q.close
80
+ repos.map do |repo|
81
+ Thread.new do
82
+ while v = q.pop
83
+ commit, idx = *v
84
+ sh! 'rm', '-f', 'Gemfile.lock', chdir: repo if File.exist?(File.join repo, 'Gemfile.lock')
85
+ if has_gemfile_change?(commit, repo)
86
+ begin
87
+ sh! 'bundle', 'install', '--local', chdir: repo
88
+ rescue RuntimeError
89
+ sh! 'bundle', 'install', chdir: repo
90
+ end
91
+ end
92
+ sh! 'git', 'checkout', commit, chdir: repo
93
+ capture3!('bin/rubocop', '--show-cops', chdir: repo).tap do |stdout, _, _|
94
+ result << [idx, YAML.load(stdout)]
95
+ end
96
+ end
97
+ end
98
+ end.each(&:join)
99
+ end.sort_by(&:first).map{|_, v| v}
100
+ end
101
+ end
102
+
103
+ def main(before, after, remote)
57
104
  {}.tap do |result|
58
105
  result[:added] = []
59
106
  result[:renamed] = []
60
107
  result[:deleted] = []
61
108
 
62
- chtmpdir do
63
- sh! 'git', 'clone', 'git@github.com:bbatsov/rubocop.git'
64
- Dir.chdir('./rubocop') do
65
- cops = each_commit(before + '~', after).map do
66
- capture3!('bin/rubocop', '--show-cops').yield_self do |stdout, _, _|
67
- YAML.load(stdout)
68
- end
69
- end
70
- cops.each_cons(2) do |new, old|
71
- added = new.keys - old.keys
72
- removed = old.keys - new.keys
73
- if added.size > removed.size && removed.size == 0
74
- result[:added].concat added
75
- elsif added.size < removed.size && added.size == 0
76
- result[:deleted].concat removed
77
- elsif added.size != 0 && removed.size != 0
78
- result[:renamed] << {before: removed, after: added}
79
- end
80
- end
109
+ cops = cops_each_commit(before, after, remote)
110
+ cops.each_cons(2) do |new, old|
111
+ added = new.keys - old.keys
112
+ removed = old.keys - new.keys
113
+ if added.size > removed.size && removed.size == 0
114
+ result[:added].concat added
115
+ elsif added.size < removed.size && added.size == 0
116
+ result[:deleted].concat removed
117
+ elsif added.size != 0 && removed.size != 0
118
+ result[:renamed] << {before: removed, after: added}
81
119
  end
82
120
  end
83
121
  end
84
122
  end
85
123
 
86
- before = ARGV[0]
87
- after = ARGV[1]
124
+ before = ARGV[0] || raise
125
+ after = ARGV[1] || raise
126
+ remote = ARGV[2] || raise
88
127
 
89
- out = main(before, after)
128
+ out = main(before, after, remote)
90
129
  res = YAML.dump(out)
91
130
  puts res
92
131
  fname = '/tmp/mry_check_rubocop_update_log.yaml'
@@ -1,6 +1,9 @@
1
1
  module Mry
2
2
  module AddedCops
3
3
  Cops = {
4
+ Gem::Version.new('0.54.0') => %w[
5
+ Style/UnpackFirst
6
+ ],
4
7
  Gem::Version.new('0.53.0') => %w[
5
8
  Rails/ActiveRecordAliases
6
9
  Style/EmptyLineAfterGuardClause
data/lib/mry/rewriters.rb CHANGED
@@ -3,6 +3,9 @@ module Mry
3
3
  class Rewriter_Master < YAMLRewriter::Rewriter
4
4
  end
5
5
 
6
+ class Rewriter_0_54_0 < YAMLRewriter::Rewriter
7
+ end
8
+
6
9
  class Rewriter_0_53_0 < YAMLRewriter::Rewriter
7
10
  define_rule ['Naming/UncommunicativeMethodArgName' => 'Naming/UncommunicativeMethodParamName']
8
11
  define_rule ['Lint/ConditionPosition' => 'Layout/ConditionPosition']
@@ -159,6 +162,7 @@ module Mry
159
162
  end
160
163
 
161
164
  Rewriters = {
165
+ Gem::Version.new('0.54.0') => Rewriter_0_54_0,
162
166
  Gem::Version.new('0.53.0') => Rewriter_0_53_0,
163
167
  Gem::Version.new('0.52.0') => Rewriter_0_52_0,
164
168
  Gem::Version.new('0.51.0') => Rewriter_0_51_0,
data/lib/mry/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Mry
2
- VERSION = "0.53.0.0"
2
+ VERSION = "0.54.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.53.0.0
4
+ version: 0.54.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-03-06 00:00:00.000000000 Z
11
+ date: 2018-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop