git-commit-notifier 0.2.0 → 0.3.0
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.textile +3 -3
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/config/git-notifier-config.yml.sample +5 -3
- data/git-commit-notifier.gemspec +8 -2
- data/lib/commit_hook.rb +14 -2
- data/lib/diff_to_html.rb +3 -0
- data/lib/emailer.rb +2 -1
- data/test/fixtures/git-notifier-ignore-merge.yml +17 -0
- data/test/fixtures/git-notifier-with-merge.yml +17 -0
- data/test/fixtures/git_log +7 -0
- data/test/fixtures/git_show_055850e7d925110322b8db4e17c3b840d76e144c +6 -0
- data/test/test_helper.rb +2 -1
- data/test/unit/test_commit_hook.rb +14 -4
- data/test/unit/test_diff_to_html.rb +1 -1
- metadata +18 -3
data/README.textile
CHANGED
@@ -9,14 +9,14 @@ as the author, project and branch name.
|
|
9
9
|
|
10
10
|
For example:
|
11
11
|
|
12
|
-
<pre>[rails][
|
12
|
+
<pre>[rails][branch] Fix Brasilia timezone. [#1180 state:resolved] </pre>
|
13
13
|
|
14
14
|
A reply-to header is added containing the author of the commit. This makes
|
15
15
|
follow up really simple. If multiple commits are pushed at once, emails are
|
16
16
|
numbered in chronological order:
|
17
17
|
|
18
|
-
<pre> [rails][
|
19
|
-
[rails][
|
18
|
+
<pre> [rails][branch][000] Added deprecated warning messages to Float#months and Float#years deprications.
|
19
|
+
[rails][branch][001] Enhance testing for fractional days and weeks. Update changelog.</pre>
|
20
20
|
|
21
21
|
Example email:
|
22
22
|
|
data/Rakefile
CHANGED
@@ -13,7 +13,7 @@ begin
|
|
13
13
|
gem.add_dependency('diff-lcs')
|
14
14
|
gem.add_dependency('mocha')
|
15
15
|
gem.add_dependency('hpricot')
|
16
|
-
|
16
|
+
gem.add_dependency('tamtam')
|
17
17
|
end
|
18
18
|
Jeweler::GemcutterTasks.new
|
19
19
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -1,12 +1,14 @@
|
|
1
1
|
delivery_method: sendmail # smtp or sendmail
|
2
|
+
ignore_merge: false # set to true if you want to ignore empty merge messages
|
2
3
|
|
3
4
|
smtp_server:
|
4
5
|
address: localhost
|
5
6
|
port: 25
|
6
7
|
domain: localhost
|
7
|
-
user_name:
|
8
|
-
password:
|
9
|
-
authentication:
|
8
|
+
user_name: user@localhost
|
9
|
+
password: password
|
10
|
+
authentication: plain
|
11
|
+
enable_tls: false
|
10
12
|
|
11
13
|
sendmail_options:
|
12
14
|
location: /usr/sbin/sendmail
|
data/git-commit-notifier.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{git-commit-notifier}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Bodo Tasche"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-25}
|
13
13
|
s.default_executable = %q{git-commit-notifier}
|
14
14
|
s.description = %q{This git commit notifier sends html mails with nice diffs for every changed file.}
|
15
15
|
s.email = %q{bodo@wannawork.de}
|
@@ -35,7 +35,10 @@ Gem::Specification.new do |s|
|
|
35
35
|
"lib/result_processor.rb",
|
36
36
|
"template/email.html.erb",
|
37
37
|
"template/styles.css",
|
38
|
+
"test/fixtures/git-notifier-ignore-merge.yml",
|
39
|
+
"test/fixtures/git-notifier-with-merge.yml",
|
38
40
|
"test/fixtures/git_log",
|
41
|
+
"test/fixtures/git_show_055850e7d925110322b8db4e17c3b840d76e144c",
|
39
42
|
"test/fixtures/git_show_51b986619d88f7ba98be7d271188785cbbb541a0",
|
40
43
|
"test/fixtures/git_show_a4629e707d80a5769f7a71ca6ed9471015e14dc9",
|
41
44
|
"test/fixtures/git_show_dce6ade4cdc2833b53bd600ef10f9bce83c7102d",
|
@@ -65,15 +68,18 @@ Gem::Specification.new do |s|
|
|
65
68
|
s.add_runtime_dependency(%q<diff-lcs>, [">= 0"])
|
66
69
|
s.add_runtime_dependency(%q<mocha>, [">= 0"])
|
67
70
|
s.add_runtime_dependency(%q<hpricot>, [">= 0"])
|
71
|
+
s.add_runtime_dependency(%q<tamtam>, [">= 0"])
|
68
72
|
else
|
69
73
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
70
74
|
s.add_dependency(%q<mocha>, [">= 0"])
|
71
75
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
76
|
+
s.add_dependency(%q<tamtam>, [">= 0"])
|
72
77
|
end
|
73
78
|
else
|
74
79
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
75
80
|
s.add_dependency(%q<mocha>, [">= 0"])
|
76
81
|
s.add_dependency(%q<hpricot>, [">= 0"])
|
82
|
+
s.add_dependency(%q<tamtam>, [">= 0"])
|
77
83
|
end
|
78
84
|
end
|
79
85
|
|
data/lib/commit_hook.rb
CHANGED
@@ -28,6 +28,9 @@ class CommitHook
|
|
28
28
|
return
|
29
29
|
end
|
30
30
|
|
31
|
+
puts "Sending mail..."
|
32
|
+
STDOUT.flush
|
33
|
+
|
31
34
|
prefix = Git.repo_name
|
32
35
|
branch_name = (ref_name =~ /master$/i) ? "" : "/#{ref_name.split("/").last}"
|
33
36
|
|
@@ -36,8 +39,17 @@ class CommitHook
|
|
36
39
|
|
37
40
|
diff2html = DiffToHtml.new(Dir.pwd)
|
38
41
|
diff2html.diff_between_revisions rev1, rev2, prefix, ref_name
|
39
|
-
|
40
|
-
|
42
|
+
|
43
|
+
result = diff2html.result
|
44
|
+
|
45
|
+
if (@config["ignore_merge"])
|
46
|
+
result = result.reject {|result|
|
47
|
+
!result[:commit_info][:merge].nil?
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
result.reverse.each_with_index do |result, i|
|
52
|
+
nr = number(result.size, i)
|
41
53
|
emailer = Emailer.new @config, project_path, recipient, result[:commit_info][:email], result[:commit_info][:author],
|
42
54
|
"[#{prefix}#{branch_name}]#{nr} #{result[:commit_info][:message]}", result[:text_content], result[:html_content], rev1, rev2, ref_name
|
43
55
|
emailer.send
|
data/lib/diff_to_html.rb
CHANGED
@@ -222,6 +222,8 @@ class DiffToHtml
|
|
222
222
|
result[:author], result[:email] = author_name_and_email(line[8..-1])
|
223
223
|
elsif line =~ /^Date/
|
224
224
|
result[:date] = line[8..-1]
|
225
|
+
elsif line =~ /^Merge/
|
226
|
+
result[:merge] = line[8..-1]
|
225
227
|
else
|
226
228
|
clean_line = line.strip
|
227
229
|
result[:message] << clean_line unless clean_line.empty?
|
@@ -275,6 +277,7 @@ class DiffToHtml
|
|
275
277
|
File.open(previous_file, "w"){|f| f << current_list.join("\n") } unless current_list.empty? || defined?(Test::Unit)
|
276
278
|
|
277
279
|
commits.each_with_index do |commit, i|
|
280
|
+
|
278
281
|
raw_diff = Git.show(commit)
|
279
282
|
raise "git show output is empty" if raw_diff.empty?
|
280
283
|
@last_raw = raw_diff
|
data/lib/emailer.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'erb'
|
3
|
+
require 'tamtam'
|
3
4
|
|
4
5
|
class Emailer
|
5
6
|
|
@@ -17,7 +18,7 @@ class Emailer
|
|
17
18
|
@new_rev = new_rev
|
18
19
|
|
19
20
|
template = File.join(File.dirname(__FILE__), '/../template/email.html.erb')
|
20
|
-
@html_message = ERB.new(File.read(template)).result(binding)
|
21
|
+
@html_message = TamTam.inline(:document => ERB.new(File.read(template)).result(binding))
|
21
22
|
end
|
22
23
|
|
23
24
|
def boundary
|
@@ -0,0 +1,17 @@
|
|
1
|
+
delivery_method: sendmail # smtp or sendmail
|
2
|
+
ignore_merge: true # set to true if you want to ignore empty merge messages
|
3
|
+
|
4
|
+
smtp_server:
|
5
|
+
address: localhost
|
6
|
+
port: 25
|
7
|
+
domain: localhost
|
8
|
+
user_name: user@localhost
|
9
|
+
password: password
|
10
|
+
authentication: plain
|
11
|
+
enable_tls: false
|
12
|
+
|
13
|
+
sendmail_options:
|
14
|
+
location: /usr/sbin/sendmail
|
15
|
+
arguments:
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
delivery_method: sendmail # smtp or sendmail
|
2
|
+
ignore_merge: false # set to true if you want to ignore empty merge messages
|
3
|
+
|
4
|
+
smtp_server:
|
5
|
+
address: localhost
|
6
|
+
port: 25
|
7
|
+
domain: localhost
|
8
|
+
user_name: user@localhost
|
9
|
+
password: password
|
10
|
+
authentication: plain
|
11
|
+
enable_tls: false
|
12
|
+
|
13
|
+
sendmail_options:
|
14
|
+
location: /usr/sbin/sendmail
|
15
|
+
arguments:
|
16
|
+
|
17
|
+
|
data/test/fixtures/git_log
CHANGED
@@ -32,3 +32,10 @@ Date: Mon Oct 6 17:35:21 2008 +0300
|
|
32
32
|
button input elements have no default behavior to cancel.
|
33
33
|
|
34
34
|
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
|
35
|
+
|
36
|
+
commit 055850e7d925110322b8db4e17c3b840d76e144c
|
37
|
+
Merge: 7e4f6b4 4f13525
|
38
|
+
Author: Bodo Tasche <bodo@wannawork.de>
|
39
|
+
Date: Thu Mar 25 21:02:04 2010 +0100
|
40
|
+
|
41
|
+
Merge branch 'master' of a/bla2/../bla
|
data/test/test_helper.rb
CHANGED
@@ -4,7 +4,8 @@ unless defined? REVISIONS
|
|
4
4
|
REVISIONS = ['e28ad77bba0574241e6eb64dfd0c1291b221effe', # 2 files updated
|
5
5
|
'a4629e707d80a5769f7a71ca6ed9471015e14dc9', # 1 file updated
|
6
6
|
'dce6ade4cdc2833b53bd600ef10f9bce83c7102d', # 6 files updated
|
7
|
-
'51b986619d88f7ba98be7d271188785cbbb541a0'
|
7
|
+
'51b986619d88f7ba98be7d271188785cbbb541a0', # 3 files updated
|
8
|
+
'055850e7d925110322b8db4e17c3b840d76e144c'] # Empty merge message
|
8
9
|
|
9
10
|
end
|
10
11
|
|
@@ -7,7 +7,15 @@ require File.dirname(__FILE__) + '/../../lib/git'
|
|
7
7
|
|
8
8
|
class CommitHookTest < Test::Unit::TestCase
|
9
9
|
|
10
|
-
def
|
10
|
+
def test_hook_ignore_merge
|
11
|
+
run_with_config('test/fixtures/git-notifier-ignore-merge.yml', 4) # 4 commit, one email for each of them, without merge
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_hook_with_merge
|
15
|
+
run_with_config('test/fixtures/git-notifier-with-merge.yml', 5) # 5 commit, one email for each of them, with merge mail
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_with_config(config, times)
|
11
19
|
path = File.dirname(__FILE__) + '/../fixtures/'
|
12
20
|
Git.expects(:log).with(REVISIONS.first, REVISIONS.last).returns(read_file(path + 'git_log'))
|
13
21
|
Git.expects(:mailing_list_address).returns('recipient@test.com')
|
@@ -15,8 +23,10 @@ class CommitHookTest < Test::Unit::TestCase
|
|
15
23
|
Git.expects(:show).with(rev).returns(read_file(path + "git_show_#{rev}"))
|
16
24
|
end
|
17
25
|
emailer = mock('Emailer')
|
18
|
-
Emailer.expects(:new).times(
|
19
|
-
emailer.expects(:send).times(
|
20
|
-
CommitHook.run
|
26
|
+
Emailer.expects(:new).times(times).returns(emailer) # 4 commit, one email for each of them
|
27
|
+
emailer.expects(:send).times(times)
|
28
|
+
CommitHook.run config, REVISIONS.first, REVISIONS.last, 'refs/heads/master'
|
21
29
|
end
|
30
|
+
|
31
|
+
|
22
32
|
end
|
@@ -19,7 +19,7 @@ class DiffToHtmlTest < Test::Unit::TestCase
|
|
19
19
|
|
20
20
|
diff = DiffToHtml.new
|
21
21
|
diff.diff_between_revisions REVISIONS.first, REVISIONS.last, 'testproject', 'master'
|
22
|
-
assert_equal
|
22
|
+
assert_equal 5, diff.result.size # one result for each of the commits
|
23
23
|
|
24
24
|
diff.result.each do |html|
|
25
25
|
assert !html.include?('@@') # diff correctly processed
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 3
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Bodo Tasche
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-25 00:00:00 +01:00
|
18
18
|
default_executable: git-commit-notifier
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -53,6 +53,18 @@ dependencies:
|
|
53
53
|
version: "0"
|
54
54
|
type: :runtime
|
55
55
|
version_requirements: *id003
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: tamtam
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
66
|
+
type: :runtime
|
67
|
+
version_requirements: *id004
|
56
68
|
description: This git commit notifier sends html mails with nice diffs for every changed file.
|
57
69
|
email: bodo@wannawork.de
|
58
70
|
executables:
|
@@ -79,7 +91,10 @@ files:
|
|
79
91
|
- lib/result_processor.rb
|
80
92
|
- template/email.html.erb
|
81
93
|
- template/styles.css
|
94
|
+
- test/fixtures/git-notifier-ignore-merge.yml
|
95
|
+
- test/fixtures/git-notifier-with-merge.yml
|
82
96
|
- test/fixtures/git_log
|
97
|
+
- test/fixtures/git_show_055850e7d925110322b8db4e17c3b840d76e144c
|
83
98
|
- test/fixtures/git_show_51b986619d88f7ba98be7d271188785cbbb541a0
|
84
99
|
- test/fixtures/git_show_a4629e707d80a5769f7a71ca6ed9471015e14dc9
|
85
100
|
- test/fixtures/git_show_dce6ade4cdc2833b53bd600ef10f9bce83c7102d
|