mry 0.53.0.0 → 0.54.0.0

Sign up to get free protection for your applications and to get access to all the features.
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