gergich 0.1.9 → 0.1.10
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/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
         |