checkstyle_filter-git 0.1.1 → 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.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +22 -2
- data/checkstyle_filter-git.gemspec +2 -1
- data/lib/checkstyle_filter/git.rb +2 -3
- data/lib/checkstyle_filter/git/cli.rb +1 -43
- data/lib/checkstyle_filter/git/filter.rb +57 -0
- data/lib/checkstyle_filter/git/version.rb +1 -1
- metadata +18 -5
- data/example/github-pull-requests-files-response.json +0 -26
- data/lib/checkstyle_filter/git/diff_parser.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eefefc30a709cd108ff7af5fc8665bdb3e233697
|
4
|
+
data.tar.gz: 86fd8708b347ac2331d691ec9974fcbbaf589984
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b44da9604d392b41a91dd785e934ff6cc930a463309ec6ce86d4a30cd0bc51ce4709ddfd355f523ad46b7d9373d51c0f5da03656b1d4ea79df3485776cbf4f0
|
7
|
+
data.tar.gz: a73d4e34ff10f4e955cce90609c9dc1af28853ae135c5e262483c0d41eebc2688d4c90e9279542e316e15b13144155dc821dea36d656ba0f2c25cdb9e2fd4be7
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -98,7 +98,7 @@ git diff -z --name-only origin/master.. \
|
|
98
98
|
--require rubocop/formatter/checkstyle_formatter \
|
99
99
|
--format RuboCop::Formatter::CheckstyleFormatter \
|
100
100
|
| checkstyle_filter-git diff origin/master.. \
|
101
|
-
| saddler
|
101
|
+
| saddler report \
|
102
102
|
--require github/pull-request-comment-formatter \
|
103
103
|
--format Github::PullRequestCommentFormatter
|
104
104
|
```
|
@@ -119,6 +119,26 @@ Or install it yourself as:
|
|
119
119
|
|
120
120
|
$ gem install checkstyle_filter-git
|
121
121
|
|
122
|
+
## Help
|
123
|
+
|
124
|
+
```
|
125
|
+
$ checkstyle_filter-git
|
126
|
+
Commands:
|
127
|
+
checkstyle_filter-git diff # Filter using `git diff`
|
128
|
+
checkstyle_filter-git help [COMMAND] # Describe available commands or one specific command
|
129
|
+
checkstyle_filter-git version # Show the CheckstyleFilter/Git version
|
130
|
+
|
131
|
+
$ checkstyle_filter-git help diff
|
132
|
+
Usage:
|
133
|
+
checkstyle_filter-git diff
|
134
|
+
|
135
|
+
Options:
|
136
|
+
[--data=DATA]
|
137
|
+
[--file=FILE]
|
138
|
+
|
139
|
+
Filter using `git diff`
|
140
|
+
```
|
141
|
+
|
122
142
|
## Development
|
123
143
|
|
124
144
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec checkstyle_filter-git` to use the code located in this directory, ignoring other installed copies of this gem.
|
@@ -127,7 +147,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
127
147
|
|
128
148
|
## Contributing
|
129
149
|
|
130
|
-
1. Fork it ( https://github.com/
|
150
|
+
1. Fork it ( https://github.com/packsaddle/ruby-checkstyle_filter-git/fork )
|
131
151
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
132
152
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
133
153
|
4. Push to the branch (`git push origin my-new-feature`)
|
@@ -27,5 +27,6 @@ Gem::Specification.new do |spec|
|
|
27
27
|
|
28
28
|
spec.add_development_dependency 'bundler', '~> 1.8'
|
29
29
|
spec.add_development_dependency 'rake', '~> 10.0'
|
30
|
-
spec.add_development_dependency '
|
30
|
+
spec.add_development_dependency 'test-unit'
|
31
|
+
spec.add_development_dependency 'nori'
|
31
32
|
end
|
@@ -1,9 +1,8 @@
|
|
1
|
-
require 'checkstyle_filter/git/version'
|
2
1
|
require 'git/diff/parser'
|
3
|
-
require 'checkstyle_filter/git/
|
2
|
+
require 'checkstyle_filter/git/version'
|
3
|
+
require 'checkstyle_filter/git/filter'
|
4
4
|
|
5
5
|
module CheckstyleFilter
|
6
6
|
module Git
|
7
|
-
# Your code goes here...
|
8
7
|
end
|
9
8
|
end
|
@@ -26,23 +26,7 @@ module CheckstyleFilter
|
|
26
26
|
|
27
27
|
command = ['git', 'diff', '--no-color', commit_ish].compact
|
28
28
|
git_diff, _, _ = Open3.capture3(*command)
|
29
|
-
|
30
|
-
|
31
|
-
# TODO: split to class
|
32
|
-
require 'rexml/document'
|
33
|
-
document = REXML::Document.new data
|
34
|
-
document.elements.each('/checkstyle/file') do |file_element|
|
35
|
-
file_name = file_element.attribute('name').value
|
36
|
-
next unless file_element_file_in_git_diff?(file_name, parsed)
|
37
|
-
file_element.elements.each('error') do |error_element|
|
38
|
-
line = error_element.attribute('line') && error_element.attribute('line').value.to_i
|
39
|
-
if file_element_error_line_no_in_modified?(file_name, parsed, line)
|
40
|
-
error_element.remove
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
puts document.to_s
|
29
|
+
puts ::CheckstyleFilter::Git::Filter.filter(data, git_diff)
|
46
30
|
end
|
47
31
|
|
48
32
|
desc 'version', 'Show the CheckstyleFilter/Git version'
|
@@ -51,32 +35,6 @@ module CheckstyleFilter
|
|
51
35
|
def version
|
52
36
|
puts "CheckstyleFilter/Git version #{::CheckstyleFilter::Git::VERSION}"
|
53
37
|
end
|
54
|
-
|
55
|
-
no_commands do
|
56
|
-
def file_element_file_in_git_diff?(file_name, parsed_git_diff)
|
57
|
-
require 'pathname'
|
58
|
-
diff_files = parsed_git_diff.map { |one| one[:file_name] }
|
59
|
-
diff_files
|
60
|
-
.map { |file| Pathname.new(file).expand_path }
|
61
|
-
.include?(Pathname.new(file_name).expand_path)
|
62
|
-
end
|
63
|
-
|
64
|
-
def file_element_error_line_no_in_modified?(file_name, parsed_git_diff, line_no)
|
65
|
-
require 'pathname'
|
66
|
-
diff_pairs = parsed_git_diff
|
67
|
-
.select do |diff|
|
68
|
-
Pathname.new(diff[:file_name]).expand_path == Pathname.new(file_name).expand_path
|
69
|
-
end
|
70
|
-
return false if diff_pairs.empty?
|
71
|
-
modified_lines = Set.new
|
72
|
-
diff_pairs.map do |diff_pair|
|
73
|
-
diff_pair[:patch].changed_lines.map do |line|
|
74
|
-
modified_lines << line.number
|
75
|
-
end
|
76
|
-
end
|
77
|
-
modified_lines.include?(line_no)
|
78
|
-
end
|
79
|
-
end
|
80
38
|
end
|
81
39
|
end
|
82
40
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rexml/document'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module CheckstyleFilter
|
5
|
+
module Git
|
6
|
+
class Filter
|
7
|
+
def self.filter(data, git_diff)
|
8
|
+
patches = ::Git::Diff::Parser.parse(git_diff)
|
9
|
+
|
10
|
+
document = REXML::Document.new data
|
11
|
+
document.elements.each('/checkstyle/file') do |file_element|
|
12
|
+
file_name = file_element.attribute('name') && file_element.attribute('name').value
|
13
|
+
if file_in_patches?(file_name, patches)
|
14
|
+
file_element.elements.each('error') do |error_element|
|
15
|
+
line = error_element.attribute('line') && error_element.attribute('line').value.to_i
|
16
|
+
unless file_element_error_line_no_in_patches?(file_name, patches, line)
|
17
|
+
error_element.remove
|
18
|
+
end
|
19
|
+
end
|
20
|
+
else
|
21
|
+
file_element.elements.each('error') do |error_element|
|
22
|
+
error_element.remove
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
document.to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.file_in_patches?(file_name, patches)
|
31
|
+
patches
|
32
|
+
.map(&:file)
|
33
|
+
.map { |file| Pathname.new(file).expand_path }
|
34
|
+
.include?(Pathname.new(file_name).expand_path)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.file_element_error_line_no_in_patches?(file_name, patches, line_no)
|
38
|
+
diff_patches = patches
|
39
|
+
.select { |patch| same_file?(patch.file, file_name) }
|
40
|
+
return false if diff_patches.empty?
|
41
|
+
|
42
|
+
modified_lines = Set.new
|
43
|
+
diff_patches.map do |patch|
|
44
|
+
patch.changed_lines.map do |line|
|
45
|
+
modified_lines << line.number
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
modified_lines.include?(line_no)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.same_file?(one, other)
|
53
|
+
Pathname.new(one).expand_path == Pathname.new(other).expand_path
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: checkstyle_filter-git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sanemat
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -67,7 +67,21 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: test-unit
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: nori
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -100,13 +114,12 @@ files:
|
|
100
114
|
- bin/setup
|
101
115
|
- checkstyle_filter-git.gemspec
|
102
116
|
- example/example1.xml
|
103
|
-
- example/github-pull-requests-files-response.json
|
104
117
|
- example/invalid.rb
|
105
118
|
- example/simple.rb
|
106
119
|
- exe/checkstyle_filter-git
|
107
120
|
- lib/checkstyle_filter/git.rb
|
108
121
|
- lib/checkstyle_filter/git/cli.rb
|
109
|
-
- lib/checkstyle_filter/git/
|
122
|
+
- lib/checkstyle_filter/git/filter.rb
|
110
123
|
- lib/checkstyle_filter/git/version.rb
|
111
124
|
homepage: https://github.com/packsaddle/ruby-checkstyle_filter-git
|
112
125
|
licenses:
|
@@ -1,26 +0,0 @@
|
|
1
|
-
[
|
2
|
-
{
|
3
|
-
"sha": "80adf33bacc9f387b6ac2e099945326b3e699fda",
|
4
|
-
"filename": "lib/tachikoma/settings.rb",
|
5
|
-
"status": "modified",
|
6
|
-
"additions": 23,
|
7
|
-
"deletions": 2,
|
8
|
-
"changes": 25,
|
9
|
-
"blob_url": "https://github.com/sanemat/tachikoma/blob/216e050fac8cb7133b8b19a1c0292f48e5994645/lib/tachikoma/settings.rb",
|
10
|
-
"raw_url": "https://github.com/sanemat/tachikoma/raw/216e050fac8cb7133b8b19a1c0292f48e5994645/lib/tachikoma/settings.rb",
|
11
|
-
"contents_url": "https://api.github.com/repos/sanemat/tachikoma/contents/lib/tachikoma/settings.rb?ref=216e050fac8cb7133b8b19a1c0292f48e5994645",
|
12
|
-
"patch": "@@ -1,6 +1,27 @@\n require 'pathname'\n+\n module Tachikoma\n- def self.root\n- Pathname.new(File.dirname(File.dirname(File.dirname(__FILE__))))\n+ def self.root_path\n+ @root_path ||= Pathname.new(File.dirname(File.dirname(File.dirname(__FILE__))))\n+ end\n+\n+ def self.root_path=(root_path)\n+ @root_path = Pathname.new File.expand_path(root_path)\n+ end\n+\n+ def self.data_path\n+ @data_path ||= root_path.parent.join('data')\n+ end\n+\n+ def self.data_path=(data_path)\n+ @data_path = Pathname.new File.expand_path(data_path)\n+ end\n+\n+ def self.repos_path\n+ @repos_path ||= root_path.parent.join('repos')\n+ end\n+\n+ def self.repos_path=(repos_path)\n+ @repos_path = Pathname.new File.expand_path(repos_path)\n end\n end"
|
13
|
-
},
|
14
|
-
{
|
15
|
-
"sha": "d71ff33adad9125f0939681435e2ad3531ca26cb",
|
16
|
-
"filename": "lib/tasks/app.rake",
|
17
|
-
"status": "modified",
|
18
|
-
"additions": 9,
|
19
|
-
"deletions": 11,
|
20
|
-
"changes": 20,
|
21
|
-
"blob_url": "https://github.com/sanemat/tachikoma/blob/216e050fac8cb7133b8b19a1c0292f48e5994645/lib/tasks/app.rake",
|
22
|
-
"raw_url": "https://github.com/sanemat/tachikoma/raw/216e050fac8cb7133b8b19a1c0292f48e5994645/lib/tasks/app.rake",
|
23
|
-
"contents_url": "https://api.github.com/repos/sanemat/tachikoma/contents/lib/tasks/app.rake?ref=216e050fac8cb7133b8b19a1c0292f48e5994645",
|
24
|
-
"patch": "@@ -2,12 +2,10 @@ require 'httparty'\n require 'multi_json'\n require 'safe_yaml'\n require 'uri'\n+require 'tachikoma'\n \n namespace :tachikoma do\n @default_timestamp_format = '%Y%m%d%H%M%S'\n- @root_path = File.expand_path(File.join(__FILE__, '..', '..', '..'))\n- @data_path = File.join(@root_path, 'data')\n- @repos_path = File.join(@root_path, 'repos')\n \n # build_for = fenix-knight, github_token_key = TOKEN_FENIX_KNIGHT\n def github_token_key(build_for)\n@@ -50,9 +48,9 @@ namespace :tachikoma do\n if ENV['LOCAL_DATA_PATH'] && ENV['LOCAL_DATA_REMOTE_URL']\n raise \"local data path is empty\" if ENV['LOCAL_DATA_PATH'] == ''\n raise \"remote git repository of local data is empty\" if ENV['LOCAL_DATA_REMOTE_URL'] == ''\n- @data_path = File.absolute_path(ENV['LOCAL_DATA_PATH'])\n- rm_rf(@data_path) if Dir.exists?(@data_path)\n- sh \"git clone #{ENV['LOCAL_DATA_REMOTE_URL']} #{@data_path}\"\n+ Tachikoma.data_path = File.absolute_path(ENV['LOCAL_DATA_PATH'])\n+ rm_rf(Tachikoma.data_path) if Dir.exists?(Tachikoma.data_path)\n+ sh \"git clone #{ENV['LOCAL_DATA_REMOTE_URL']} #{Tachikoma.data_path}\"\n raise \"failed to clone remote repo: perhaps wrong git clone URL? #{ENV['LOCAL_DATA_REMOTE_URL']}\" unless $?.success?\n else\n warn \"`fetch_data` task requires LOCAL_DATA_PATH and LOCAL_DATA_REMOTE_URL environment variables\"\n@@ -65,7 +63,7 @@ namespace :tachikoma do\n @git_name = 'bot-motoko'\n @git_email = 'bot-motoko@al.sane.jp'\n @configure =\n- YAML.load_file(File.join(@data_path, \"#{@build_for}.yaml\"))\n+ YAML.load_file(File.join(Tachikoma.data_path, \"#{@build_for}.yaml\"))\n @fetch_url = @configure['url']\n @base_remote_branch = 'origin/master'\n @authorized_url = authorized_url_with_type(@fetch_url, @configure['type'], @github_token, @git_name)\n@@ -90,18 +88,18 @@ namespace :tachikoma do\n end\n \n task :clean do\n- rm_rf(Dir.glob('repos/*'))\n+ rm_rf(Dir.glob(Tachikoma.repos_path.to_s))\n end\n \n desc 'fetch'\n task fetch: :clean do\n- mkdir_p('repos')\n- sh \"git clone #{@fetch_url} repos/#{@build_for}\"\n+ mkdir_p(Tachikoma.repos_path.to_s)\n+ sh \"git clone #{@fetch_url} #{Tachikoma.repos_path.to_s}/#{@build_for}\"\n end\n \n desc 'bundle'\n task :bundle do\n- Dir.chdir(\"repos/#{@build_for}\") do\n+ Dir.chdir(\"#{Tachikoma.repos_path.to_s}/#{@build_for}\") do\n Bundler.with_clean_env do\n sh %Q!sed -i -e 's/^ruby/#ruby/' Gemfile!\n sh \"git config user.name #{@git_name}\""
|
25
|
-
}
|
26
|
-
]
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module CheckstyleFilter
|
2
|
-
module Git
|
3
|
-
class DiffParser
|
4
|
-
def self.parse(contents)
|
5
|
-
body = false
|
6
|
-
file_name = ''
|
7
|
-
patch = []
|
8
|
-
lines = contents.lines
|
9
|
-
line_count = lines.count
|
10
|
-
parsed = []
|
11
|
-
lines.each_with_index do |line, count|
|
12
|
-
case line.chomp
|
13
|
-
when /^diff/
|
14
|
-
unless patch.empty?
|
15
|
-
parsed << { file_name: file_name,
|
16
|
-
patch: ::Git::Diff::Parser::Patch.new(patch.join("\n")) }
|
17
|
-
patch.clear
|
18
|
-
file_name = ''
|
19
|
-
end
|
20
|
-
body = false
|
21
|
-
when /^\-\-\-/
|
22
|
-
when %r{^\+\+\+ b/(?<file_name>.*)}
|
23
|
-
file_name = Regexp.last_match[:file_name]
|
24
|
-
body = true
|
25
|
-
when /^(?<body>[\ @\+\-\\].*)/
|
26
|
-
patch << Regexp.last_match[:body] if body
|
27
|
-
if !patch.empty? && body && line_count == count + 1
|
28
|
-
parsed << { file_name: file_name,
|
29
|
-
patch: ::Git::Diff::Parser::Patch.new(patch.join("\n")) }
|
30
|
-
patch.clear
|
31
|
-
file_name = ''
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
parsed
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|