changes_since 0.0.10 → 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.
- data/README.md +1 -9
- data/changes_since.gemspec +1 -0
- data/lib/changes_since.rb +7 -12
- data/lib/changes_since/api_client.rb +69 -0
- data/lib/changes_since/changelog_printer.rb +10 -10
- data/lib/changes_since/commit_parser.rb +2 -0
- data/lib/changes_since/version.rb +1 -1
- data/test/changes_since/changelog_printer_test.rb +1 -8
- metadata +133 -95
- checksums.yaml +0 -7
data/README.md
CHANGED
@@ -11,8 +11,6 @@ From https://github.com/resque/resque
|
|
11
11
|
|
12
12
|
`ChangesSince.fetch('v1.25.2')`
|
13
13
|
```
|
14
|
-
Unclassified:
|
15
|
-
|
16
14
|
* won't be needing rack-test as well (Dan Buch)
|
17
15
|
* Extracted a new WorkerQueueList class out of Rescue::Worker (Einar Jonsson)
|
18
16
|
* implementation of Backend connection with Hash (Ryan Biesemeyer)
|
@@ -26,7 +24,7 @@ Unclassified:
|
|
26
24
|
...
|
27
25
|
```
|
28
26
|
If you want to use enhanced functionality, you can tag pull requests with #bug, #internal, or #public
|
29
|
-
The 'Unclassified' would then change to Bug, Internal or Public respectively.
|
27
|
+
The 'Unclassified' would then change to Bug, Internal or Public respectively, adding the option :tags => true.
|
30
28
|
|
31
29
|
There are some additional options you can use
|
32
30
|
|
@@ -34,8 +32,6 @@ Author filter:
|
|
34
32
|
|
35
33
|
`ChangesSince.fetch('v1.25.2', { :author_filter => ["Dan Buch", "Steve Klabnik"] })`
|
36
34
|
```
|
37
|
-
Unclassified:
|
38
|
-
|
39
35
|
* won't be needing rack-test as well (Dan Buch)
|
40
36
|
* Fixed typos (Steve Klabnik)
|
41
37
|
* Make sure the filicide is justified (Steve Klabnik)
|
@@ -62,15 +58,11 @@ Example:
|
|
62
58
|
```
|
63
59
|
*Team 1*
|
64
60
|
|
65
|
-
Unclassified:
|
66
|
-
|
67
61
|
* won't be needing rack-test as well (Dan Buch)
|
68
62
|
* Extracted a new WorkerQueueList class out of Rescue::Worker (Einar Jonsson)
|
69
63
|
|
70
64
|
*Team 2*
|
71
65
|
|
72
|
-
Unclassified:
|
73
|
-
|
74
66
|
* update readme.md with hooks link (Ryan Biesemeyer)
|
75
67
|
* speed up test suite (Ryan Biesemeyer)
|
76
68
|
* add info about queue priority to readme (Ryan Biesemeyer)
|
data/changes_since.gemspec
CHANGED
data/lib/changes_since.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
require 'git'
|
2
1
|
require 'optparse'
|
3
|
-
require '
|
2
|
+
require 'io/console'
|
4
3
|
|
5
4
|
module ChangesSince
|
6
|
-
def self.fetch(
|
5
|
+
def self.fetch(teams=nil)
|
7
6
|
options = parse_options
|
7
|
+
puts "Enter tag:"
|
8
|
+
tag = gets.chomp
|
8
9
|
parser = CommitParser.new(tag, options)
|
9
10
|
commits = parser.parse
|
10
|
-
printer = ChangelogPrinter.new(commits, teams, options
|
11
|
+
printer = ChangelogPrinter.new(commits, teams, options)
|
11
12
|
printer.print!
|
12
13
|
end
|
13
14
|
|
@@ -20,10 +21,6 @@ module ChangesSince
|
|
20
21
|
options[:all] = a
|
21
22
|
end
|
22
23
|
|
23
|
-
opts.on("-s", "--sha", "Include commit sha in the output") do |s|
|
24
|
-
options[:sha] = s
|
25
|
-
end
|
26
|
-
|
27
24
|
opts.on("-f", "--filter [authors]", "Limit to authors matching the passed string(s). Comma-separated list works.") do |authors|
|
28
25
|
options[:author_filter] = authors.split(",")
|
29
26
|
end
|
@@ -32,13 +29,10 @@ module ChangesSince
|
|
32
29
|
options[:tags] = t
|
33
30
|
end
|
34
31
|
|
35
|
-
opts.on("-r", "--risk", "Group commits by high, medium or low risk") do |r|
|
36
|
-
options[:risk] = r
|
37
|
-
end
|
38
|
-
|
39
32
|
opts.on("-m", "--markdown", "Use tables in Atlassian as markdown") do |m|
|
40
33
|
options[:markdown] = m
|
41
34
|
end
|
35
|
+
|
42
36
|
end.parse!
|
43
37
|
options
|
44
38
|
end
|
@@ -46,3 +40,4 @@ end
|
|
46
40
|
|
47
41
|
require 'changes_since/commit_parser'
|
48
42
|
require 'changes_since/changelog_printer'
|
43
|
+
require 'changes_since/api_client'
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'git'
|
2
|
+
require 'octokit'
|
3
|
+
|
4
|
+
module ChangesSince
|
5
|
+
class ApiClient
|
6
|
+
|
7
|
+
attr_reader :access_token, :client, :repo
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
puts "Please enter your Github credentials:"
|
11
|
+
print "Username:"
|
12
|
+
username = gets.chomp
|
13
|
+
print "Password:"
|
14
|
+
password = STDIN.noecho(&:gets).chomp
|
15
|
+
puts
|
16
|
+
|
17
|
+
@client = Octokit::Client.new(
|
18
|
+
:login => username,
|
19
|
+
:password => password
|
20
|
+
)
|
21
|
+
|
22
|
+
begin
|
23
|
+
fetch_authorization
|
24
|
+
rescue Octokit::OneTimePasswordRequired => e
|
25
|
+
puts "Enter two factor auth token:"
|
26
|
+
otp_token = gets.chomp
|
27
|
+
fetch_authorization(otp_token)
|
28
|
+
end
|
29
|
+
|
30
|
+
@client = Octokit::Client.new(:access_token => access_token)
|
31
|
+
git = Git.open(Dir.pwd)
|
32
|
+
@repo = git.remote.url.split(/[:.]/)[-2]
|
33
|
+
end
|
34
|
+
|
35
|
+
def fetch_authorization(otp_token=nil)
|
36
|
+
options = { :scopes => ["repo"], :note => "Changes Since" }
|
37
|
+
|
38
|
+
headers = {}
|
39
|
+
if otp_token
|
40
|
+
headers = { "X-GitHub-OTP" => otp_token }
|
41
|
+
options.merge!(:headers => headers)
|
42
|
+
end
|
43
|
+
|
44
|
+
begin
|
45
|
+
@access_token = client.create_authorization(options)
|
46
|
+
rescue Octokit::UnprocessableEntity => e
|
47
|
+
authorizations = client.authorizations(:headers => headers)
|
48
|
+
@access_token = authorizations.find { |a| a.note == "Changes Since" }.token
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def pull_request_risks(number)
|
53
|
+
pr = client.pull_request(repo, number)
|
54
|
+
body = pr.body
|
55
|
+
if pr.body.include?("Risks")
|
56
|
+
body = body[pr.body.index("Risks") + 5, body.size]
|
57
|
+
elsif pr.body.include?("Risk")
|
58
|
+
body = body[pr.body.index("Risk") + 4, body.size]
|
59
|
+
else
|
60
|
+
return " "
|
61
|
+
end
|
62
|
+
body = body.strip
|
63
|
+
if index = body.index(/\r\n\r\n/)
|
64
|
+
body = body[0, index]
|
65
|
+
end
|
66
|
+
body
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module ChangesSince
|
2
2
|
class ChangelogPrinter
|
3
|
-
attr_reader :teams, :options, :repo
|
3
|
+
attr_reader :teams, :options, :repo, :api_client
|
4
4
|
|
5
5
|
TAGS = {
|
6
6
|
:public => 'Public',
|
@@ -8,11 +8,15 @@ module ChangesSince
|
|
8
8
|
:internal => 'Internal'
|
9
9
|
}
|
10
10
|
|
11
|
-
def initialize(commits, teams, options
|
11
|
+
def initialize(commits, teams, options)
|
12
12
|
@commits = commits
|
13
13
|
@teams = teams
|
14
14
|
@options = options
|
15
|
-
|
15
|
+
git = Git.open(Dir.pwd)
|
16
|
+
@repo = "https://github.com/" << git.remote.url.split(/[:.]/)[-2]
|
17
|
+
if options[:markdown]
|
18
|
+
@api_client = ApiClient.new
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
def print!
|
@@ -29,7 +33,7 @@ module ChangesSince
|
|
29
33
|
author_re = /#{members.join("|")}/i
|
30
34
|
team_commits = @commits.select do |commit|
|
31
35
|
[commit.author.name, commit.author.email].any? do |str|
|
32
|
-
str =~ author_re
|
36
|
+
str.force_encoding(Encoding::UTF_8) =~ author_re
|
33
37
|
end
|
34
38
|
end
|
35
39
|
next if team_commits.empty?
|
@@ -45,9 +49,7 @@ module ChangesSince
|
|
45
49
|
|
46
50
|
def print_team_name(name)
|
47
51
|
if options[:markdown]
|
48
|
-
row = "||*#{name}*||Author||PR||"
|
49
|
-
row << "Commit||" if options[:sha]
|
50
|
-
row << "Risk||" if options[:risk]
|
52
|
+
row = "||*#{name}*||Author||PR||Risk||"
|
51
53
|
puts row
|
52
54
|
else
|
53
55
|
puts "\n*#{name}*\n"
|
@@ -80,7 +82,6 @@ module ChangesSince
|
|
80
82
|
pr = message_lines.first.split(" from ").first.split("#").last
|
81
83
|
else
|
82
84
|
title = message_lines.first
|
83
|
-
sha = options[:sha] ? commit.sha[0..9] : ''
|
84
85
|
end
|
85
86
|
title.gsub!("##{tag}", "") if tag
|
86
87
|
branch_author = commit.author.name
|
@@ -88,8 +89,7 @@ module ChangesSince
|
|
88
89
|
text = "|#{title}|"
|
89
90
|
text << "#{branch_author}|"
|
90
91
|
text << "[##{pr}|#{@repo}/pull/#{pr}]|" if @repo && pr
|
91
|
-
text << "
|
92
|
-
text << " |" if options[:risk]
|
92
|
+
text << "#{api_client.pull_request_risks(pr)}|"
|
93
93
|
else
|
94
94
|
text = "* #{title} (#{branch_author})"
|
95
95
|
end
|
@@ -160,16 +160,9 @@ class ChangelogPrinterTest < Test::Unit::TestCase
|
|
160
160
|
printer.print_message(commit)
|
161
161
|
end
|
162
162
|
|
163
|
-
should "print out the title, branch author PR and sha" do
|
164
|
-
printer = ChangesSince::ChangelogPrinter.new(stub, stub, { :markdown => true, :sha => true }, "repo")
|
165
|
-
commit = stub(:author => stub(:name => "NAME"), :message => "MESSAGE", :sha => "123")
|
166
|
-
printer.expects(:puts).with('|MESSAGE|NAME|[123|repo/commit/123]|')
|
167
|
-
printer.print_message(commit)
|
168
|
-
end
|
169
|
-
|
170
163
|
should "allow a column for risk" do
|
171
164
|
printer = ChangesSince::ChangelogPrinter.new(stub, stub, { :markdown => true, :risk => true }, "repo")
|
172
|
-
commit = stub(:author => stub(:name => "NAME"), :message => "MESSAGE"
|
165
|
+
commit = stub(:author => stub(:name => "NAME"), :message => "MESSAGE")
|
173
166
|
printer.expects(:puts).with('|MESSAGE|NAME|[|repo/commit/]| |')
|
174
167
|
printer.print_message(commit)
|
175
168
|
end
|
metadata
CHANGED
@@ -1,107 +1,134 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: changes_since
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
5
11
|
platform: ruby
|
6
|
-
authors:
|
12
|
+
authors:
|
7
13
|
- Ashwin Hegde
|
8
14
|
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
17
|
+
|
18
|
+
date: 2014-07-17 00:00:00 +00:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
14
22
|
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.5'
|
20
|
-
type: :development
|
21
23
|
prerelease: false
|
22
|
-
|
23
|
-
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
24
27
|
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
- - '='
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 10.1.1
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 5
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 5
|
33
|
+
version: "1.5"
|
34
34
|
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
35
38
|
prerelease: false
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - "="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 73
|
45
|
+
segments:
|
46
|
+
- 10
|
47
|
+
- 1
|
48
|
+
- 1
|
40
49
|
version: 10.1.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: test-unit
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
50
|
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: test-unit
|
49
54
|
prerelease: false
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
- - '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
62
64
|
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: mocha
|
63
68
|
prerelease: false
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
76
78
|
type: :development
|
79
|
+
version_requirements: *id004
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: shoulda
|
77
82
|
prerelease: false
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
83
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
hash: 3
|
89
|
+
segments:
|
90
|
+
- 0
|
91
|
+
version: "0"
|
92
|
+
type: :development
|
93
|
+
version_requirements: *id005
|
94
|
+
- !ruby/object:Gem::Dependency
|
84
95
|
name: git
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
96
|
+
prerelease: false
|
97
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
hash: 3
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
version: "0"
|
90
106
|
type: :runtime
|
107
|
+
version_requirements: *id006
|
108
|
+
- !ruby/object:Gem::Dependency
|
109
|
+
name: octokit
|
91
110
|
prerelease: false
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
111
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
hash: 3
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
version: "0"
|
120
|
+
type: :runtime
|
121
|
+
version_requirements: *id007
|
122
|
+
description: Shows you all the merged pull requests since a certain git tag in a nice format
|
123
|
+
email:
|
100
124
|
- ahegde@zendesk.com
|
101
125
|
executables: []
|
126
|
+
|
102
127
|
extensions: []
|
128
|
+
|
103
129
|
extra_rdoc_files: []
|
104
|
-
|
130
|
+
|
131
|
+
files:
|
105
132
|
- .gitignore
|
106
133
|
- .travis.yml
|
107
134
|
- Gemfile
|
@@ -110,37 +137,48 @@ files:
|
|
110
137
|
- Rakefile
|
111
138
|
- changes_since.gemspec
|
112
139
|
- lib/changes_since.rb
|
140
|
+
- lib/changes_since/api_client.rb
|
113
141
|
- lib/changes_since/changelog_printer.rb
|
114
142
|
- lib/changes_since/commit_parser.rb
|
115
143
|
- lib/changes_since/version.rb
|
116
144
|
- test/changes_since/changelog_printer_test.rb
|
117
145
|
- test/changes_since_test.rb
|
118
146
|
- test/helper.rb
|
147
|
+
has_rdoc: true
|
119
148
|
homepage: http://rubygems.org/gems/changes_since
|
120
|
-
licenses:
|
149
|
+
licenses:
|
121
150
|
- MIT
|
122
|
-
metadata: {}
|
123
151
|
post_install_message:
|
124
152
|
rdoc_options: []
|
125
|
-
|
153
|
+
|
154
|
+
require_paths:
|
126
155
|
- lib
|
127
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
hash: 3
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
137
174
|
requirements: []
|
175
|
+
|
138
176
|
rubyforge_project:
|
139
|
-
rubygems_version:
|
177
|
+
rubygems_version: 1.6.2
|
140
178
|
signing_key:
|
141
|
-
specification_version:
|
179
|
+
specification_version: 3
|
142
180
|
summary: Git Changes since a tag
|
143
|
-
test_files:
|
181
|
+
test_files:
|
144
182
|
- test/changes_since/changelog_printer_test.rb
|
145
183
|
- test/changes_since_test.rb
|
146
184
|
- test/helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 7f54efccb749c5d03ec76172fcbb188f3b343dd1
|
4
|
-
data.tar.gz: 9175935cca08e5e61cfc6ce0bc885a2b257b3626
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 6726da3ef54fba175e143243a70e7b7092d9dd4768203b0d3a1497e69ee1f9f698169fcbab6118f143bcb78884ffd0174988c0d0d860df990cc1c44ee3189ff9
|
7
|
-
data.tar.gz: 23bfce2003de71382f2f400df579a923e1c3cfcc7ac1d646db0c58eeea0f65dd2f59c78b7e673edfae962826c47b08a6767361b1c5f3e1f12f488c73acfcd1aa
|