pronto 0.1.0 → 0.1.1

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
  SHA1:
3
- metadata.gz: cd8b0fda3d023e477bd597284d3e03929203c630
4
- data.tar.gz: c288acc2abfe04edfaf9019ab9a88e6e31ff1546
3
+ metadata.gz: 800c72660ff1c44c50bcb121d16addbdd3155035
4
+ data.tar.gz: 1e69d5e353aa63b326b21845f31d00d3d2a6e6dc
5
5
  SHA512:
6
- metadata.gz: fb4693ed64d9c46496d2df7414613609120b56dc3673b97729dd4dcb6fc2866624f1b49c800575562634fff7e7dc824a0bf22db2f77c7766d2a205828a4695ce
7
- data.tar.gz: ea08d936438b0af186d709736166b88043a0487acf100ca6f0af2d51a5b4b676f3e2ba537c1ed2e83eb3afb7f01d679546198c11e95dee8d29f4852dff201a51
6
+ metadata.gz: 6da3eb9370bd8b8f6a65a07fcfdd5ef8d6a2d2ff655ee8d5ae541cbc5a8036412c46b92130c2a8bcc60517332b3a6998db56a9c9a3e1d8a751c59c5ce26461c0
7
+ data.tar.gz: b0c0b6cb81e088dc11bd4d97fe06440345c32b924f66d02a208af5ef6f46ade2cbb52dbbce19e275feb0ba2bad9d069cf06d44eb715cd02e4c9291097dd7300d
data/README.md CHANGED
@@ -4,14 +4,48 @@
4
4
  [![Build Status](https://secure.travis-ci.org/mmozuras/pronto.png)](http://travis-ci.org/mmozuras/pronto)
5
5
  [![Dependency Status](https://gemnasium.com/mmozuras/pronto.png)](https://gemnasium.com/mmozuras/pronto)
6
6
 
7
-
8
7
  ## Usage
9
8
 
10
- pronto runs static analysis on your branches quickly by analysing only the
11
- introduced changes.
9
+ Pronto runs analysis quickly by checking only the introduced changes.
10
+
11
+ ### Pull Requests
12
+
13
+ You can run Pronto as part of your builds and then get results as commit
14
+ comments using `GithubFormatter`.
15
+
16
+ Actually, Pronto runs Pronto whenever you make a pull request on Pronto. It
17
+ uses Travis CI and the included `TravisPullRequest` rake task for that.
18
+
19
+ To do the same, start by adding Pronto runners you want to use to your Gemfile:
20
+ ```ruby
21
+ gem 'pronto-rubocop'
22
+ ```
23
+ or gemspec file:
24
+ ```ruby
25
+ s.add_development_dependency 'pronto-rubocop'
26
+ ```
27
+ Then run it using the included rake task or manually.
28
+
29
+ ### Local Changes
30
+
31
+ You can run Pronto locally. First, install Pronto and runners you want to use:
32
+ ```bash
33
+ gem install pronto
34
+ gem install pronto-rubocop
35
+ ```
36
+ Then navigate to repository you want run Pronto on, and:
37
+ ```bash
38
+ git checkout feature/branch
39
+ pronto exec # Pronto runs against master by default
40
+ ```
41
+
42
+ Run `pronto` in your terminal without any arguments to see what more Pronto is
43
+ capable off.
12
44
 
13
- ## Installation
45
+ ## Runners
14
46
 
15
- Install like any other Ruby gem:
47
+ Pronto can run various tools and libraries, as long as there's a runner for it.
48
+ Currently available runners:
16
49
 
17
- gem install pronto
50
+ * [pronto-rubocop](https://github.com/mmozuras/pronto-rubocop)
51
+ * [pronto-flay](https://github.com/mmozuras/pronto-flay)
@@ -23,28 +23,17 @@ module Pronto
23
23
  type: :string,
24
24
  default: nil,
25
25
  aliases: '-f',
26
- banner: "Formatter, defaults to text. Available: #{::Pronto::Formatter.names.join(', ')}"
27
-
28
- method_option :access_token,
29
- type: :string,
30
- default: nil,
31
- aliases: '-t',
32
- banner: 'Github access token, used for github formatter'
26
+ banner: "Formatter, defaults to text.
27
+ Available: #{::Pronto::Formatter.names.join(', ')}"
33
28
 
34
29
  def exec
35
- gem_names = options[:runner].any? ? options[:runner]
36
- : ::Pronto.gem_names
30
+ gem_names = options[:runner].any? ? options[:runner] : ::Pronto.gem_names
37
31
  gem_names.each do |gem_name|
38
32
  require "pronto/#{gem_name}"
39
33
  end
40
34
 
41
35
  formatter = ::Pronto::Formatter.get(options[:formatter])
42
- if formatter.is_a? ::Pronto::Formatter::GithubFormatter
43
- access_token = options[:access_token]
44
- formatter.client = Octokit::Client.new(access_token: access_token)
45
- end
46
-
47
- puts ::Pronto.run(options[:commit], '.', formatter)
36
+ ::Pronto.run(options[:commit], '.', formatter)
48
37
  rescue Rugged::RepositoryError
49
38
  puts '"pronto" should be run from a git repository'
50
39
  end
@@ -3,31 +3,50 @@ require 'octokit'
3
3
  module Pronto
4
4
  module Formatter
5
5
  class GithubFormatter
6
- attr_writer :client
7
-
8
6
  def format(messages)
9
7
  messages.each do |message|
10
- @client.create_commit_comment(github_slug(message),
11
- sha(message),
12
- message.msg,
13
- message.path,
14
- message.line.new_lineno)
15
- end
8
+ repo = github_slug(message)
9
+ sha = commit_sha(message)
10
+ position = message.line.position
11
+ path = message.path
12
+ body = message.msg
16
13
 
17
- "#{messages.count} pronto messages posted to GitHub"
14
+ create_commit_comment(repo, sha, position, path, body)
15
+ end
18
16
  end
19
17
 
20
18
  private
21
19
 
20
+ def create_commit_comment(repo, sha, position, path, body)
21
+ commit_comments = client.commit_comments(repo, sha)
22
+ existing_comment = commit_comments.find do |comment|
23
+ comment.position = position &&
24
+ comment.path == path &&
25
+ comment.body == body
26
+ end
27
+
28
+ if existing_comment.nil?
29
+ client.create_commit_comment(repo, sha, body, path, nil, position)
30
+ end
31
+ end
32
+
33
+ def access_token
34
+ ENV['GITHUB_ACCESS_TOKEN']
35
+ end
36
+
37
+ def client
38
+ @client ||= Octokit::Client.new(access_token: access_token)
39
+ end
40
+
22
41
  def github_slug(message)
23
42
  message.repo.remotes.map(&:github_slug).compact.first
24
43
  end
25
44
 
26
- def sha(message)
45
+ def commit_sha(message)
27
46
  blamelines = blame(message).lines
28
47
  lineno = message.line.new_lineno
29
48
 
30
- blameline = blamelines.detect { |line| line.lineno == lineno }
49
+ blameline = blamelines.find { |line| line.lineno == lineno }
31
50
 
32
51
  blameline.commit.id if blameline
33
52
  end
@@ -0,0 +1,61 @@
1
+ require 'pronto'
2
+ require 'octokit'
3
+ require 'rake'
4
+ require 'rake/tasklib'
5
+
6
+ module Pronto
7
+ module RakeTask
8
+ # Provides a custom rake task to use with Travis.
9
+ #
10
+ # require 'rubocop/rake/travis_pull_request'
11
+ # Pronto::Rake::TravisPullRequest.new
12
+ class TravisPullRequest < Rake::TaskLib
13
+ attr_accessor :name
14
+ attr_accessor :verbose
15
+
16
+ def initialize(*args, &task_block)
17
+ setup_ivars(args)
18
+
19
+ unless ::Rake.application.last_comment
20
+ desc 'Run Pronto on Travis Pull Request'
21
+ end
22
+
23
+ task(name, *args) do |_, task_args|
24
+ RakeFileUtils.send(:verbose, verbose) do
25
+ if task_block
26
+ task_block.call(*[self, task_args].slice(0, task_block.arity))
27
+ end
28
+ run_task(verbose)
29
+ end
30
+ end
31
+ end
32
+
33
+ def run_task(verbose)
34
+ return if pull_request_number.nil? || pull_request_number == 'false'
35
+
36
+ client = Octokit::Client.new
37
+
38
+ pull_request = client.pull_request(repo_slug, pull_request_number)
39
+ formatter = ::Pronto::Formatter::GithubFormatter.new
40
+
41
+ ::Pronto.gem_names.each { |gem_name| require "pronto/#{gem_name}" }
42
+ ::Pronto.run(pull_request.base.sha, '.', formatter)
43
+ end
44
+
45
+ private
46
+
47
+ def pull_request_number
48
+ ENV['TRAVIS_PULL_REQUEST']
49
+ end
50
+
51
+ def repo_slug
52
+ ENV['TRAVIS_REPO_SLUG']
53
+ end
54
+
55
+ def setup_ivars(args)
56
+ @name = args.shift || :pronto_travis_pull_request
57
+ @verbose = true
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,3 +1,3 @@
1
1
  module Pronto
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -4,6 +4,20 @@ module Rugged
4
4
  def patch
5
5
  hunk.owner
6
6
  end
7
+
8
+ def position
9
+ hunk_index = patch.hunks.find_index { |h| h.header == hunk.header }
10
+ line_index = patch.lines.find_index(self)
11
+
12
+ line_index + hunk_index + 1
13
+ end
14
+
15
+ def ==(other)
16
+ content == other.content &&
17
+ line_origin == other.line_origin &&
18
+ old_lineno == other.old_lineno &&
19
+ new_lineno == other.new_lineno
20
+ end
7
21
  end
8
22
  end
9
23
  end
@@ -13,8 +13,6 @@ module Rugged
13
13
  delta.new_file_full_path
14
14
  end
15
15
 
16
- private
17
-
18
16
  def lines
19
17
  map(&:lines).flatten.compact
20
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pronto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mindaugas Mozūras
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-22 00:00:00.000000000 Z
11
+ date: 2013-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rugged
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 2.1.1
47
+ version: 2.2.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 2.1.1
54
+ version: 2.2.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: grit
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,21 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 2.14.0
97
- description: pronto
97
+ - !ruby/object:Gem::Dependency
98
+ name: pronto-rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 0.1.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 0.1.0
111
+ description:
98
112
  email: mindaugas.mozuras@gmail.com
99
113
  executables:
100
114
  - pronto
@@ -108,6 +122,7 @@ files:
108
122
  - lib/pronto/formatter/text_formatter.rb
109
123
  - lib/pronto/message.rb
110
124
  - lib/pronto/plugin.rb
125
+ - lib/pronto/rake_task/travis_pull_request.rb
111
126
  - lib/pronto/runner.rb
112
127
  - lib/pronto/version.rb
113
128
  - lib/pronto.rb
@@ -144,6 +159,6 @@ rubyforge_project:
144
159
  rubygems_version: 2.0.7
145
160
  signing_key:
146
161
  specification_version: 4
147
- summary: pronto
162
+ summary: Pronto runs analysis quickly by checking only the introduced changes
148
163
  test_files: []
149
164
  has_rdoc: