gergich 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/gergich.rb +3 -3
- data/lib/gergich/capture.rb +26 -12
- data/lib/gergich/cli/gergich.rb +2 -1
- data/spec/gergich/capture_spec.rb +46 -15
- data/spec/gergich_spec.rb +8 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a83e06009221c6f023ad9abb756eb7056d73c41
|
4
|
+
data.tar.gz: ddaf87be3594c80b6f4fad98f989d02cf5980e3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d4858b253d58eb97c5f8c8c41eb89edddd100061fbcf80609a7c9f61c7cda2cd7a61537352c15a036e7ad4ac33714a134f4e8d2c8700e74976d9bfd2fab72a3f
|
7
|
+
data.tar.gz: bfb624112eaf912a283836a46be4768eb7898b6042494b5e9f230c9f4f18e482f5c1e5aa744622f3c364df702e273a5c0c3a36e8734e8a2b4a6fa29dce7facd9
|
data/lib/gergich.rb
CHANGED
@@ -51,7 +51,7 @@ module Gergich
|
|
51
51
|
if Gergich.use_git?
|
52
52
|
Gergich.git("diff-tree --no-commit-id --name-only -r #{ref}").split
|
53
53
|
else
|
54
|
-
raw = API.get("/changes/#{change_id}/revisions/#{revision_id}/patch",
|
54
|
+
raw = API.get("/changes/#{change_id}/revisions/#{revision_id}/patch", raw: true)
|
55
55
|
Base64.decode64(raw)
|
56
56
|
.scan(%r{^diff --git a/.*? b/(.*?)$})
|
57
57
|
.flatten
|
@@ -204,11 +204,11 @@ module Gergich
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def post(url, body, options = {})
|
207
|
-
perform(:post, url, options.merge(
|
207
|
+
perform(:post, url, options.merge(body: body))
|
208
208
|
end
|
209
209
|
|
210
210
|
def put(url, body, options = {})
|
211
|
-
perform(:put, url, options.merge(
|
211
|
+
perform(:put, url, options.merge(body: body))
|
212
212
|
end
|
213
213
|
|
214
214
|
private
|
data/lib/gergich/capture.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require_relative "../gergich"
|
1
2
|
require "English"
|
2
3
|
|
3
4
|
module Gergich
|
@@ -20,31 +21,44 @@ module Gergich
|
|
20
21
|
end
|
21
22
|
|
22
23
|
class << self
|
23
|
-
def run(format, command)
|
24
|
+
def run(format, command, add_comments: true, suppress_output: false)
|
24
25
|
captor = load_captor(format)
|
25
26
|
|
26
|
-
exit_code, output = run_command(command)
|
27
|
+
exit_code, output = run_command(command, suppress_output: suppress_output)
|
27
28
|
comments = captor.new.run(output.gsub(/\e\[\d+m/m, ""))
|
29
|
+
comments.each do |comment|
|
30
|
+
comment[:path] = relativize(comment[:path])
|
31
|
+
end
|
28
32
|
|
29
33
|
draft = Gergich::Draft.new
|
30
34
|
skip_paths = (ENV["SKIP_PATHS"] || "").split(",")
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
if add_comments
|
36
|
+
comments.each do |comment|
|
37
|
+
next if skip_paths.any? { |path| comment[:path].start_with?(path) }
|
38
|
+
draft.add_comment comment[:path], comment[:position],
|
39
|
+
comment[:message], comment[:severity]
|
40
|
+
end
|
35
41
|
end
|
36
42
|
|
37
|
-
exit_code
|
43
|
+
[exit_code, comments]
|
44
|
+
end
|
45
|
+
|
46
|
+
def base_path
|
47
|
+
@base_path ||= File.expand_path(GERGICH_GIT_PATH) + "/"
|
48
|
+
end
|
49
|
+
|
50
|
+
def relativize(path)
|
51
|
+
path.sub(base_path, "")
|
38
52
|
end
|
39
53
|
|
40
|
-
def run_command(command)
|
54
|
+
def run_command(command, suppress_output: false)
|
41
55
|
exit_code = 0
|
42
56
|
|
43
57
|
if command == "-"
|
44
|
-
output = wiretap($stdin)
|
58
|
+
output = wiretap($stdin, suppress_output)
|
45
59
|
else
|
46
60
|
IO.popen("#{command} 2>&1", "r+") do |io|
|
47
|
-
output = wiretap(io)
|
61
|
+
output = wiretap(io, suppress_output)
|
48
62
|
end
|
49
63
|
exit_code = $CHILD_STATUS.exitstatus
|
50
64
|
end
|
@@ -52,10 +66,10 @@ module Gergich
|
|
52
66
|
[exit_code, output]
|
53
67
|
end
|
54
68
|
|
55
|
-
def wiretap(io)
|
69
|
+
def wiretap(io, suppress_output)
|
56
70
|
output = ""
|
57
71
|
io.each do |line|
|
58
|
-
$stdout.puts line
|
72
|
+
$stdout.puts line unless suppress_output
|
59
73
|
output << line
|
60
74
|
end
|
61
75
|
output
|
data/lib/gergich/cli/gergich.rb
CHANGED
@@ -191,7 +191,8 @@ commands["capture"] = {
|
|
191
191
|
summary: "Run a command and translate its output into `gergich comment` calls",
|
192
192
|
action: ->(format, command) {
|
193
193
|
require_relative "../../gergich/capture"
|
194
|
-
|
194
|
+
status, = Gergich::Capture.run(format, command)
|
195
|
+
exit status
|
195
196
|
},
|
196
197
|
help: ->() {
|
197
198
|
<<-TEXT
|
@@ -3,25 +3,24 @@ require_relative "../../lib/gergich/capture"
|
|
3
3
|
RSpec.describe Gergich::Capture do
|
4
4
|
let!(:draft) { double }
|
5
5
|
|
6
|
+
let :output do
|
7
|
+
<<-OUTPUT
|
8
|
+
#{path}
|
9
|
+
4:21 error Missing semicolon semi
|
10
|
+
OUTPUT
|
11
|
+
end
|
12
|
+
|
6
13
|
before do
|
7
14
|
allow(Gergich::Draft).to receive(:new).and_return(draft)
|
15
|
+
$stdin = StringIO.new(output)
|
8
16
|
end
|
9
17
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
jsapp/models/user.js
|
14
|
-
4:21 error Missing semicolon semi
|
15
|
-
OUTPUT
|
16
|
-
end
|
17
|
-
|
18
|
-
before do
|
19
|
-
$stdin = StringIO.new(output)
|
20
|
-
end
|
18
|
+
after do
|
19
|
+
$stdin = STDIN
|
20
|
+
end
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
end
|
22
|
+
context "stdin" do
|
23
|
+
let(:path) { "jsapp/models/user.js" }
|
25
24
|
|
26
25
|
it "should catch errors" do
|
27
26
|
expect(draft).to receive(:add_comment).with(
|
@@ -30,7 +29,7 @@ OUTPUT
|
|
30
29
|
"[eslint] Missing semicolon",
|
31
30
|
"error"
|
32
31
|
)
|
33
|
-
described_class.run("eslint", "-")
|
32
|
+
described_class.run("eslint", "-", suppress_output: true)
|
34
33
|
end
|
35
34
|
|
36
35
|
it "shouldn't eat stdin" do
|
@@ -39,4 +38,36 @@ OUTPUT
|
|
39
38
|
described_class.run("eslint", "-")
|
40
39
|
end
|
41
40
|
end
|
41
|
+
|
42
|
+
context "absolute paths" do
|
43
|
+
before do
|
44
|
+
allow(described_class).to receive(:base_path).and_return("/the/directory/")
|
45
|
+
end
|
46
|
+
|
47
|
+
context "under us" do
|
48
|
+
let(:path) { "/the/directory/jsapp/models/user.js" }
|
49
|
+
it "should be relativized" do
|
50
|
+
expect(draft).to receive(:add_comment).with(
|
51
|
+
"jsapp/models/user.js",
|
52
|
+
4,
|
53
|
+
"[eslint] Missing semicolon",
|
54
|
+
"error"
|
55
|
+
)
|
56
|
+
described_class.run("eslint", "-", suppress_output: true)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "elsewhere" do
|
61
|
+
let(:path) { "/other/directory/jsapp/models/user.js" }
|
62
|
+
it "should not be relativized" do
|
63
|
+
expect(draft).to receive(:add_comment).with(
|
64
|
+
"/other/directory/jsapp/models/user.js",
|
65
|
+
4,
|
66
|
+
"[eslint] Missing semicolon",
|
67
|
+
"error"
|
68
|
+
)
|
69
|
+
described_class.run("eslint", "-", suppress_output: true)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
42
73
|
end
|
data/spec/gergich_spec.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
RSpec.describe Gergich::API do
|
2
|
-
let(:result) { double(:result,
|
2
|
+
let(:result) { double(:result, body: "Not Found: 1234") }
|
3
3
|
|
4
4
|
before :each do
|
5
5
|
allow(HTTParty).to receive(:send).and_return(result)
|
@@ -13,14 +13,15 @@ end
|
|
13
13
|
|
14
14
|
RSpec.describe Gergich::Draft do
|
15
15
|
let!(:draft) do
|
16
|
-
commit = double(
|
16
|
+
commit = double(
|
17
|
+
:commit,
|
17
18
|
files: [
|
18
19
|
"foo.rb",
|
19
20
|
"bar/baz.lol"
|
20
21
|
],
|
21
22
|
revision_id: "test",
|
22
23
|
change_id: "test"
|
23
|
-
|
24
|
+
)
|
24
25
|
described_class.new commit
|
25
26
|
end
|
26
27
|
|
@@ -36,12 +37,12 @@ RSpec.describe Gergich::Draft do
|
|
36
37
|
|
37
38
|
it "includes file comments" do
|
38
39
|
draft.add_comment "foo.rb", 1, "fix foo", "info"
|
39
|
-
expect(subject).to eq(
|
40
|
+
expect(subject).to eq("foo.rb" => [{ line: 1, message: "[INFO] fix foo" }])
|
40
41
|
end
|
41
42
|
|
42
43
|
it "includes COMMIT_MSG comments" do
|
43
44
|
draft.add_comment "/COMMIT_MSG", 1, "fix commit", "info"
|
44
|
-
expect(subject).to eq(
|
45
|
+
expect(subject).to eq("/COMMIT_MSG" => [{ line: 1, message: "[INFO] fix commit" }])
|
45
46
|
end
|
46
47
|
|
47
48
|
it "doesn't include orphaned file comments" do
|
@@ -89,10 +90,10 @@ RSpec.describe Gergich::Draft do
|
|
89
90
|
draft.add_label "Code-Review", -2
|
90
91
|
draft.add_label "Code-Review", 1
|
91
92
|
|
92
|
-
expect(subject).to eq(
|
93
|
+
expect(subject).to eq(
|
93
94
|
"QA-Review" => -1,
|
94
95
|
"Code-Review" => -2
|
95
|
-
|
96
|
+
)
|
96
97
|
end
|
97
98
|
|
98
99
|
it "disallows \"Verified\"" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gergich
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Jensen
|
@@ -155,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.5
|
158
|
+
rubygems_version: 2.2.5
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Command-line tool for adding Gerrit comments
|