changes_since 0.0.1 → 0.0.2

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: b39bc4c5dc04b94e8773d704713ab40d216100f9
4
- data.tar.gz: bc2eebddd12321f76f7af0ef7d34e8f332939ab9
3
+ metadata.gz: 58dbfae216849c9d71e1b9412efdfea498cbf590
4
+ data.tar.gz: fd0c521d8e5b971ff6378bf179db54edd0f48927
5
5
  SHA512:
6
- metadata.gz: f890c5f385bceec241ed631a3d51e378f25d154514256294f1b3c04ff4baabd55f2c4c34e22c574a45a6a186384655a0ae7262978fb9b0362f99b44b1e5f0219
7
- data.tar.gz: a716fc67cf602982f3942e5a880f2098129199818a264504ce7e355063ef02d2419ee8bb1d8dc875e88fffbb3aa453f76e20697eb81aebfb7dd132f44f1b6ad6
6
+ metadata.gz: c1554eada1ae9543f946de6cf25cb62435da6ebfb81c362ab393c458f23c75e3112d2df82ffd1298b82462dceb3438f98bc3056f002180c66fa343f990460ed5
7
+ data.tar.gz: 5f442359a1517abd7a1bdae26f86a65da77d16962f498532f99587ec7762a07c2ce6156a0795424b2425bfc25e94c962e605628b0cfb0632d98af2502235b4eb
@@ -0,0 +1,67 @@
1
+ class ChangesSince::ChangelogPrinter
2
+ attr_reader :teams, :options
3
+
4
+ def initialize(commits, teams, options)
5
+ @commits = commits
6
+ @teams = teams
7
+ @options = options
8
+ end
9
+
10
+ def print!
11
+ if teams
12
+ print_team_commits!
13
+ else
14
+ print_all_commits!
15
+ end
16
+ end
17
+
18
+ def print_team_commits!
19
+ teams.each do |team, members|
20
+ author_re = /#{members.join("|")}/i
21
+ team_commits = @commits.select do |commit|
22
+ [commit.author.name, commit.author.email].any? do |str|
23
+ str =~ author_re
24
+ end
25
+ end
26
+ next if team_commits.empty?
27
+ @commits -= team_commits
28
+ puts "\n*#{team}*\n"
29
+ print_commits!(team_commits)
30
+ end
31
+
32
+ return if @commits.empty?
33
+ puts "\n*Other*\n\n"
34
+ @commits.each { |commit| print_message(commit, nil, options) }
35
+ end
36
+
37
+ def print_commits!(output_commits)
38
+ output_commits.sort! { |a, b| a.author.name <=> b.author.name }
39
+ {
40
+ public: 'Public',
41
+ bug: 'Bugs',
42
+ internal: 'Internal'
43
+ }.each do |type, title|
44
+ tagged_commits = output_commits.select { |commit| commit.message.include?("##{type}") }
45
+ next if tagged_commits.empty?
46
+
47
+ puts "\n#{title}:\n\n"
48
+ tagged_commits.each { |commit| print_message(commit, type, options) }
49
+ output_commits -= tagged_commits
50
+ end
51
+
52
+ puts "\nUnclassified:\n\n"
53
+ output_commits.each { |commit| print_message(commit, nil, options) }
54
+ end
55
+
56
+ def print_message(commit, type, options)
57
+ message_lines = commit.message.split("\n\n")
58
+ if message_lines.first =~ /Merge pull request/
59
+ title = message_lines.last
60
+ else
61
+ title = message_lines.first
62
+ end
63
+ title.gsub!("##{type}", "") if type
64
+ branch_author = commit.author.name
65
+ puts "* #{title} (#{branch_author}) #{options[:sha] ? commit.sha[0..9] : ''}"
66
+ end
67
+ end
@@ -0,0 +1,56 @@
1
+ class ChangesSince::CommitParser
2
+ attr_reader :log, :options
3
+
4
+ def initialize(tag, options)
5
+ git = Git.open(Dir.pwd)
6
+ @log = git.log(100000).between(tag)
7
+ @options = options
8
+ end
9
+
10
+ def parse_all_commits
11
+ interesting = Set.new
12
+ all_commits = log.to_a
13
+
14
+ link_re = /^\s*\[(.*?)\]/m
15
+ linked_commits, remaining_commits = all_commits.partition do |commit|
16
+ commit.message =~ link_re
17
+ end
18
+
19
+ linked_commits.uniq! do |commit|
20
+ commit.message[link_re,1]
21
+ end
22
+
23
+ interesting = interesting + linked_commits
24
+
25
+ interesting_re = /
26
+ (?:\#(bug|public|internal)) | # anything explicitly tagged
27
+ (?:closes\s\#\d+) | # a squash-merge commit closing the linked PR
28
+ (?:Merge\spull\srequest) # a straight PR merge
29
+ /xmi
30
+
31
+ remaining_commits.each do |commit|
32
+ if commit.message =~ interesting_re
33
+ interesting << commit
34
+ end
35
+ end
36
+ commits = interesting.to_a
37
+ end
38
+
39
+ def parse
40
+ commits = if options[:all]
41
+ parse_all_commits
42
+ else
43
+ log.select { |commit| commit.message =~ /Merge pull request/ }
44
+ end
45
+
46
+ if options[:author_filter]
47
+ author_re = /#{options[:author_filter].join("|")}/i
48
+ commits = commits.select do |commit|
49
+ [commit.author.name, commit.author.email].any? do |str|
50
+ str =~ author_re
51
+ end
52
+ end
53
+ end
54
+ commits
55
+ end
56
+ end
data/lib/changes_since.rb CHANGED
@@ -15,3 +15,6 @@ class ChangesSince
15
15
  printer.print!
16
16
  end
17
17
  end
18
+
19
+ require 'changes_since/commit_parser'
20
+ require 'changes_since/changelog_printer'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: changes_since
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ashwin Hegde
@@ -18,6 +18,8 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
+ - lib/changes_since/changelog_printer.rb
22
+ - lib/changes_since/commit_parser.rb
21
23
  - lib/changes_since.rb
22
24
  homepage: http://rubygems.org/gems/changes_since
23
25
  licenses: