git-commit-notifier 0.9.0 → 0.9.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/VERSION +1 -1
- data/bin/git-commit-notifier +5 -18
- data/git-commit-notifier.gemspec +4 -2
- data/lib/git_commit_notifier/commit_hook.rb +4 -5
- data/lib/git_commit_notifier/diff_to_html.rb +0 -1
- data/lib/git_commit_notifier/emailer.rb +22 -25
- data/lib/git_commit_notifier/executor.rb +25 -0
- data/lib/git_commit_notifier/result_processor.rb +0 -1
- data/local-run.rb +17 -0
- data/spec/lib/git_commit_notifier/commit_hook_spec.rb +22 -24
- data/spec/lib/git_commit_notifier/diff_to_html_spec.rb +19 -31
- data/spec/lib/git_commit_notifier/emailer_spec.rb +20 -22
- data/spec/lib/git_commit_notifier/git_spec.rb +21 -23
- data/spec/lib/git_commit_notifier/logger_spec.rb +13 -14
- data/spec/lib/git_commit_notifier/result_processor_spec.rb +5 -7
- metadata +5 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.1
|
data/bin/git-commit-notifier
CHANGED
@@ -6,24 +6,11 @@ if RUBY_VERSION < '1.9'
|
|
6
6
|
require 'jcode'
|
7
7
|
end
|
8
8
|
|
9
|
+
require 'rubygems'
|
10
|
+
|
9
11
|
# parameters: revision1, revision 2, branch
|
10
|
-
THIS_FILE = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
|
11
|
-
$:.unshift File.join(File.dirname(THIS_FILE), "../lib")
|
12
12
|
|
13
|
-
require 'git_commit_notifier'
|
14
|
-
|
13
|
+
require 'git_commit_notifier/executor'
|
14
|
+
|
15
|
+
GitCommitNotifier::Executor.run!(ARGV)
|
15
16
|
|
16
|
-
case ARGV.length
|
17
|
-
when 0
|
18
|
-
CommitHook.show_error("You have to add a path to the config file for git-commit-notifier")
|
19
|
-
puts "Usage: git-commit-notifier config-script [oldrev newrev [ref]]"
|
20
|
-
when 1
|
21
|
-
oldrev, newrev, ref = STDIN.gets.strip.split
|
22
|
-
CommitHook.run ARGV[0], oldrev, newrev, ref
|
23
|
-
when 2
|
24
|
-
CommitHook.run ARGV[0], ARGV[1], ARGV[1], ""
|
25
|
-
when 3
|
26
|
-
CommitHook.run ARGV[0], ARGV[1], ARGV[2], ""
|
27
|
-
else
|
28
|
-
CommitHook.run ARGV[0], ARGV[1], ARGV[2], ARGV[3]
|
29
|
-
end
|
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.9.
|
8
|
+
s.version = "0.9.1"
|
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{2011-04-
|
12
|
+
s.date = %q{2011-04-05}
|
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@bitboxer.de}
|
@@ -35,9 +35,11 @@ Gem::Specification.new do |s|
|
|
35
35
|
"lib/git_commit_notifier/diff_to_html.rb",
|
36
36
|
"lib/git_commit_notifier/emailer.rb",
|
37
37
|
"lib/git_commit_notifier/escape_helper.rb",
|
38
|
+
"lib/git_commit_notifier/executor.rb",
|
38
39
|
"lib/git_commit_notifier/git.rb",
|
39
40
|
"lib/git_commit_notifier/logger.rb",
|
40
41
|
"lib/git_commit_notifier/result_processor.rb",
|
42
|
+
"local-run.rb",
|
41
43
|
"spec/fixtures/existing_file_one_line.txt",
|
42
44
|
"spec/fixtures/git-notifier-group-email-by-push.yml",
|
43
45
|
"spec/fixtures/git-notifier-ignore-merge.yml",
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'yaml'
|
3
2
|
require 'cgi'
|
4
3
|
require 'net/smtp'
|
@@ -34,7 +33,7 @@ module GitCommitNotifier
|
|
34
33
|
recipient = config["mailinglist"] || Git.mailing_list_address
|
35
34
|
|
36
35
|
if recipient.nil? || recipient.length == 0
|
37
|
-
|
36
|
+
CommitHook.show_error(
|
38
37
|
"Please add a recipient for the emails. Eg : \n" +
|
39
38
|
" git config hooks.mailinglist developer@example.com"
|
40
39
|
)
|
@@ -65,7 +64,7 @@ module GitCommitNotifier
|
|
65
64
|
|
66
65
|
info("Sending mail...")
|
67
66
|
|
68
|
-
diff2html =
|
67
|
+
diff2html = DiffToHtml.new(Dir.pwd, config)
|
69
68
|
diff2html.diff_between_revisions(rev1, rev2, prefix, ref_name)
|
70
69
|
|
71
70
|
diffresult = diff2html.result
|
@@ -85,7 +84,7 @@ module GitCommitNotifier
|
|
85
84
|
result = diffresult.first
|
86
85
|
return if result.nil? || !result[:commit_info]
|
87
86
|
|
88
|
-
emailer =
|
87
|
+
emailer = Emailer.new(config,
|
89
88
|
:project_path => project_path,
|
90
89
|
:recipient => recipient,
|
91
90
|
:from_address => config["from"] || result[:commit_info][:email],
|
@@ -103,7 +102,7 @@ module GitCommitNotifier
|
|
103
102
|
next unless result[:commit_info]
|
104
103
|
nr = number(diffresult.size, i)
|
105
104
|
|
106
|
-
emailer =
|
105
|
+
emailer = Emailer.new(config,
|
107
106
|
:project_path => project_path,
|
108
107
|
:recipient => recipient,
|
109
108
|
:from_address => config["from"] || result[:commit_info][:email],
|
@@ -35,7 +35,7 @@ class GitCommitNotifier::Emailer
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def mail_html_message
|
38
|
-
html = Emailer.template.result(binding)
|
38
|
+
html = GitCommitNotifier::Emailer.template.result(binding)
|
39
39
|
premailer = Premailer.new(html, :with_html_string => true, :adapter => :nokogiri)
|
40
40
|
premailer.to_inline_css
|
41
41
|
end
|
@@ -87,7 +87,6 @@ class GitCommitNotifier::Emailer
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def perform_delivery_nntp(content, nntp_settings)
|
90
|
-
require 'rubygems'
|
91
90
|
require 'nntp'
|
92
91
|
Net::NNTP.start(nntp_settings['address'], nntp_settings['port']) do |nntp|
|
93
92
|
nntp.post content
|
@@ -99,40 +98,38 @@ class GitCommitNotifier::Emailer
|
|
99
98
|
quoted_from_alias = quote_if_necessary("#{@from_alias}",'utf-8')
|
100
99
|
from = @from_alias.empty? ? @from_address : "#{quoted_from_alias} <#{@from_address}>"
|
101
100
|
|
102
|
-
content = [
|
103
|
-
"
|
104
|
-
"
|
105
|
-
"
|
106
|
-
"X-
|
107
|
-
"X-Git-
|
108
|
-
"X-Git-
|
109
|
-
"
|
101
|
+
content = [
|
102
|
+
"From: #{from}",
|
103
|
+
"#{to_tag}: #{quote_if_necessary(@recipient, 'utf-8')}",
|
104
|
+
"Subject: #{quote_if_necessary(@subject, 'utf-8')}",
|
105
|
+
"X-Mailer: git-commit-notifier",
|
106
|
+
"X-Git-Refname: #{@ref_name}",
|
107
|
+
"X-Git-Oldrev: #{@old_rev}",
|
108
|
+
"X-Git-Newrev: #{@new_rev}",
|
109
|
+
"Mime-Version: 1.0",
|
110
110
|
"Content-Type: multipart/alternative; boundary=#{boundary}\n\n\n",
|
111
|
-
"--#{boundary}
|
112
|
-
"Content-Type: text/plain; charset=utf-8
|
113
|
-
"Content-Transfer-Encoding: 8bit
|
111
|
+
"--#{boundary}",
|
112
|
+
"Content-Type: text/plain; charset=utf-8",
|
113
|
+
"Content-Transfer-Encoding: 8bit",
|
114
114
|
"Content-Disposition: inline\n\n\n",
|
115
115
|
@text_message,
|
116
|
-
"\n--#{boundary}
|
117
|
-
"Content-Type: text/html; charset=utf-8
|
118
|
-
"Content-Transfer-Encoding: 8bit
|
116
|
+
"\n--#{boundary}",
|
117
|
+
"Content-Type: text/html; charset=utf-8",
|
118
|
+
"Content-Transfer-Encoding: 8bit",
|
119
119
|
"Content-Disposition: inline\n\n\n",
|
120
120
|
mail_html_message,
|
121
|
-
"
|
121
|
+
"--#{boundary}--"]
|
122
122
|
|
123
123
|
if @recipient.empty?
|
124
124
|
puts content.join("\n")
|
125
125
|
return
|
126
126
|
end
|
127
127
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
else
|
134
|
-
perform_delivery_sendmail(content, @config['sendmail_options'])
|
135
|
-
end
|
128
|
+
case config['delivery_method'].to_sym
|
129
|
+
when :smtp then perform_delivery_smtp(content, config['smtp_server'])
|
130
|
+
when :nntp then perform_delivery_nntp(content, config['nntp_settings'])
|
131
|
+
else # sendmail
|
132
|
+
perform_delivery_sendmail(content, @config['sendmail_options'])
|
136
133
|
end
|
137
134
|
end
|
138
135
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# parameters: revision1, revision 2, branch
|
2
|
+
|
3
|
+
require 'git_commit_notifier'
|
4
|
+
|
5
|
+
module GitCommitNotifier
|
6
|
+
class Executor
|
7
|
+
def self.run!(args)
|
8
|
+
case args.length
|
9
|
+
when 0
|
10
|
+
CommitHook.show_error("You have to add a path to the config file for git-commit-notifier")
|
11
|
+
puts "Usage: git-commit-notifier config-script [oldrev newrev [ref]]"
|
12
|
+
when 1
|
13
|
+
oldrev, newrev, ref = $stdin.gets.strip.split
|
14
|
+
CommitHook.run args.first, oldrev, newrev, ref
|
15
|
+
when 2
|
16
|
+
CommitHook.run args.first, args.last, args.last, ""
|
17
|
+
when 3
|
18
|
+
CommitHook.run args.first, args[1], args.last, ""
|
19
|
+
else
|
20
|
+
CommitHook.run args.first, args[1], args[2], args[3]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
data/local-run.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
if RUBY_VERSION < '1.9'
|
4
|
+
# This is for Unicode support in Ruby 1.8
|
5
|
+
$KCODE = 'u';
|
6
|
+
require 'jcode'
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'rubygems'
|
10
|
+
$LOAD_PATH.unshift(File.expand_path('./lib', File.dirname(__FILE__)))
|
11
|
+
|
12
|
+
# parameters: revision1, revision 2, branch
|
13
|
+
|
14
|
+
require 'git_commit_notifier/executor'
|
15
|
+
|
16
|
+
GitCommitNotifier::Executor.run!(ARGV)
|
17
|
+
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require File.expand_path('../../../spec_helper', __FILE__)
|
2
2
|
require 'git_commit_notifier'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
describe CommitHook do
|
4
|
+
describe GitCommitNotifier::CommitHook do
|
7
5
|
|
8
6
|
it "should ignore merge" do
|
9
7
|
# 4 commits, one email for each of them, without merge
|
@@ -41,23 +39,23 @@ describe CommitHook do
|
|
41
39
|
expect_repository_access
|
42
40
|
|
43
41
|
emailer = mock!.send.times(times).subject
|
44
|
-
mock(Emailer).new(anything, anything) { emailer }.times(times)
|
45
|
-
mock(CommitHook).info(/Sending mail/)
|
42
|
+
mock(GitCommitNotifier::Emailer).new(anything, anything) { emailer }.times(times)
|
43
|
+
mock(GitCommitNotifier::CommitHook).info(/Sending mail/)
|
46
44
|
|
47
|
-
any_instance_of(DiffToHtml, :check_handled_commits => lambda { |commits| commits })
|
48
|
-
CommitHook.run config, REVISIONS.first, REVISIONS.last, branch
|
45
|
+
any_instance_of(GitCommitNotifier::DiffToHtml, :check_handled_commits => lambda { |commits| commits })
|
46
|
+
GitCommitNotifier::CommitHook.run config, REVISIONS.first, REVISIONS.last, branch
|
49
47
|
end
|
50
48
|
|
51
49
|
|
52
50
|
def run_and_reject(config,times,branch)
|
53
|
-
mock(Git).mailing_list_address { 'recipient@test.com' }
|
51
|
+
mock(GitCommitNotifier::Git).mailing_list_address { 'recipient@test.com' }
|
54
52
|
|
55
53
|
emailer = mock!.send.times(times).subject
|
56
|
-
mock(Emailer).new(anything, anything).times(times)
|
54
|
+
mock(GitCommitNotifier::Emailer).new(anything, anything).times(times)
|
57
55
|
|
58
|
-
mock(CommitHook).info(/Supressing mail for branch/)
|
56
|
+
mock(GitCommitNotifier::CommitHook).info(/Supressing mail for branch/)
|
59
57
|
|
60
|
-
CommitHook.run config, REVISIONS.first, REVISIONS.last, branch
|
58
|
+
GitCommitNotifier::CommitHook.run config, REVISIONS.first, REVISIONS.last, branch
|
61
59
|
end
|
62
60
|
|
63
61
|
|
@@ -65,23 +63,23 @@ describe CommitHook do
|
|
65
63
|
# 1 commit with a from: adress
|
66
64
|
expect_repository_access
|
67
65
|
emailer = mock!.send.subject
|
68
|
-
mock(Emailer).new(anything, hash_including(:from_address => "max@example.com")) { emailer }
|
66
|
+
mock(GitCommitNotifier::Emailer).new(anything, hash_including(:from_address => "max@example.com")) { emailer }
|
69
67
|
|
70
|
-
CommitHook.run 'spec/fixtures/git-notifier-group-email-by-push.yml', REVISIONS.first, REVISIONS.last, 'refs/heads/master'
|
68
|
+
GitCommitNotifier::CommitHook.run 'spec/fixtures/git-notifier-group-email-by-push.yml', REVISIONS.first, REVISIONS.last, 'refs/heads/master'
|
71
69
|
end
|
72
70
|
|
73
71
|
def expect_repository_access
|
74
|
-
mock(Git).log(REVISIONS.first, REVISIONS.last) { IO.read(FIXTURES_PATH + 'git_log') }
|
75
|
-
mock(Git).mailing_list_address { 'recipient@test.com' }
|
72
|
+
mock(GitCommitNotifier::Git).log(REVISIONS.first, REVISIONS.last) { IO.read(FIXTURES_PATH + 'git_log') }
|
73
|
+
mock(GitCommitNotifier::Git).mailing_list_address { 'recipient@test.com' }
|
76
74
|
REVISIONS.each do |rev|
|
77
|
-
mock(Git).show(rev) { IO.read(FIXTURES_PATH + "git_show_#{rev}") }
|
75
|
+
mock(GitCommitNotifier::Git).show(rev) { IO.read(FIXTURES_PATH + "git_show_#{rev}") }
|
78
76
|
end
|
79
77
|
end
|
80
78
|
|
81
79
|
describe :logger do
|
82
|
-
it "should be
|
83
|
-
stub(CommitHook).config { {} }
|
84
|
-
CommitHook.logger.should be_kind_of(Logger)
|
80
|
+
it "should be instance of logger" do
|
81
|
+
stub(GitCommitNotifier::CommitHook).config { {} }
|
82
|
+
GitCommitNotifier::CommitHook.logger.should be_kind_of(GitCommitNotifier::Logger)
|
85
83
|
end
|
86
84
|
end
|
87
85
|
|
@@ -90,7 +88,7 @@ describe CommitHook do
|
|
90
88
|
mock($stderr).puts("\n").times(2)
|
91
89
|
mock($stderr).puts(/GIT\sNOTIFIER\sPROBLEM/).times(2)
|
92
90
|
mock($stderr).puts('yes')
|
93
|
-
CommitHook.show_error('yes')
|
91
|
+
GitCommitNotifier::CommitHook.show_error('yes')
|
94
92
|
end
|
95
93
|
end
|
96
94
|
|
@@ -98,16 +96,16 @@ describe CommitHook do
|
|
98
96
|
it "should write to and flush stdout" do
|
99
97
|
mock($stdout).puts('msg')
|
100
98
|
mock($stdout).flush
|
101
|
-
CommitHook.info('msg')
|
99
|
+
GitCommitNotifier::CommitHook.info('msg')
|
102
100
|
end
|
103
101
|
end
|
104
102
|
|
105
103
|
describe :run do
|
106
104
|
it "should report error when no recipients specified" do
|
107
105
|
mock(File).exists?(:noconfig) { false }
|
108
|
-
mock(Git).mailing_list_address { nil }
|
109
|
-
mock(CommitHook).show_error(/recipient/)
|
110
|
-
CommitHook.run(:noconfig, :rev1, :rev2, 'master')
|
106
|
+
mock(GitCommitNotifier::Git).mailing_list_address { nil }
|
107
|
+
mock(GitCommitNotifier::CommitHook).show_error(/recipient/)
|
108
|
+
GitCommitNotifier::CommitHook.run(:noconfig, :rev1, :rev2, 'master')
|
111
109
|
end
|
112
110
|
end
|
113
111
|
|
@@ -2,13 +2,11 @@ require File.expand_path('../../../spec_helper', __FILE__)
|
|
2
2
|
require 'nokogiri'
|
3
3
|
require 'git_commit_notifier'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe DiffToHtml do
|
5
|
+
describe GitCommitNotifier::DiffToHtml do
|
8
6
|
|
9
7
|
describe :lines_are_sequential? do
|
10
8
|
before(:all) do
|
11
|
-
@diff_to_html = DiffToHtml.new
|
9
|
+
@diff_to_html = GitCommitNotifier::DiffToHtml.new
|
12
10
|
end
|
13
11
|
|
14
12
|
it "should be true if left line numbers are sequential" do
|
@@ -74,25 +72,25 @@ describe DiffToHtml do
|
|
74
72
|
|
75
73
|
describe :unique_commits_per_branch? do
|
76
74
|
it "should be false unless specified in config" do
|
77
|
-
diff = DiffToHtml.new(nil, {})
|
75
|
+
diff = GitCommitNotifier::DiffToHtml.new(nil, {})
|
78
76
|
diff.should_not be_unique_commits_per_branch
|
79
77
|
end
|
80
78
|
|
81
79
|
it "should be false if specified as false in config" do
|
82
|
-
diff = DiffToHtml.new(nil, { 'unique_commits_per_branch' => false })
|
80
|
+
diff = GitCommitNotifier::DiffToHtml.new(nil, { 'unique_commits_per_branch' => false })
|
83
81
|
diff.should_not be_unique_commits_per_branch
|
84
82
|
end
|
85
83
|
|
86
84
|
it "should be true if specified as true in config" do
|
87
|
-
diff = DiffToHtml.new(nil, { 'unique_commits_per_branch' => true })
|
85
|
+
diff = GitCommitNotifier::DiffToHtml.new(nil, { 'unique_commits_per_branch' => true })
|
88
86
|
diff.should be_unique_commits_per_branch
|
89
87
|
end
|
90
88
|
end
|
91
89
|
|
92
90
|
describe :get_previous_commits do
|
93
91
|
it "should read and parse previous file if it exists" do
|
94
|
-
fn = DiffToHtml::HANDLED_COMMITS_FILE
|
95
|
-
diff = DiffToHtml.new
|
92
|
+
fn = GitCommitNotifier::DiffToHtml::HANDLED_COMMITS_FILE
|
93
|
+
diff = GitCommitNotifier::DiffToHtml.new
|
96
94
|
mock(File).exists?(fn) { true }
|
97
95
|
mock(IO).read(fn) { "a\nb" }
|
98
96
|
diff.get_previous_commits(fn).should == %w[a b]
|
@@ -100,12 +98,12 @@ describe DiffToHtml do
|
|
100
98
|
end
|
101
99
|
|
102
100
|
it "multiple commits" do
|
103
|
-
mock(Git).log(REVISIONS.first, REVISIONS.last) { IO.read(FIXTURES_PATH + 'git_log') }
|
101
|
+
mock(GitCommitNotifier::Git).log(REVISIONS.first, REVISIONS.last) { IO.read(FIXTURES_PATH + 'git_log') }
|
104
102
|
REVISIONS.each do |rev|
|
105
|
-
mock(Git).show(rev) { IO.read(FIXTURES_PATH + 'git_show_' + rev) }
|
103
|
+
mock(GitCommitNotifier::Git).show(rev) { IO.read(FIXTURES_PATH + 'git_show_' + rev) }
|
106
104
|
end
|
107
105
|
|
108
|
-
diff = DiffToHtml.new
|
106
|
+
diff = GitCommitNotifier::DiffToHtml.new
|
109
107
|
mock(diff).check_handled_commits(anything) { |commits| commits }
|
110
108
|
diff.diff_between_revisions REVISIONS.first, REVISIONS.last, 'testproject', 'master'
|
111
109
|
|
@@ -152,11 +150,11 @@ describe DiffToHtml do
|
|
152
150
|
|
153
151
|
it "should get good diff when new branch created" do
|
154
152
|
first_rev, last_rev = %w[ 0000000000000000000000000000000000000000 9b15cebcc5434e27c00a4a2acea43509f9faea21 ]
|
155
|
-
mock(Git).branch_commits('rvm') { %w[ ff037a73fc1094455e7bbf506171a3f3cf873ae6 ] }
|
153
|
+
mock(GitCommitNotifier::Git).branch_commits('rvm') { %w[ ff037a73fc1094455e7bbf506171a3f3cf873ae6 ] }
|
156
154
|
%w[ ff037a73fc1094455e7bbf506171a3f3cf873ae6 ].each do |rev|
|
157
|
-
mock(Git).show(rev) { IO.read(FIXTURES_PATH + 'git_show_' + rev) }
|
155
|
+
mock(GitCommitNotifier::Git).show(rev) { IO.read(FIXTURES_PATH + 'git_show_' + rev) }
|
158
156
|
end
|
159
|
-
diff = DiffToHtml.new
|
157
|
+
diff = GitCommitNotifier::DiffToHtml.new
|
160
158
|
mock(diff).check_handled_commits(anything) { |commits| commits }
|
161
159
|
diff.diff_between_revisions(first_rev, last_rev, 'tm-admin', 'rvm')
|
162
160
|
diff.result.should have(1).commit
|
@@ -167,7 +165,7 @@ describe DiffToHtml do
|
|
167
165
|
|
168
166
|
describe :message_map do
|
169
167
|
before(:each) do
|
170
|
-
@diff = DiffToHtml.new
|
168
|
+
@diff = GitCommitNotifier::DiffToHtml.new
|
171
169
|
end
|
172
170
|
|
173
171
|
it "should do message mapping" do
|
@@ -186,18 +184,9 @@ describe DiffToHtml do
|
|
186
184
|
describe :do_message_integration do
|
187
185
|
before(:each) do
|
188
186
|
@config = Hash.new
|
189
|
-
@diff = DiffToHtml.new(nil, @config)
|
190
|
-
end
|
191
|
-
|
192
|
-
return message unless @config['message_integration'].respond_to?(:each_pair)
|
193
|
-
@config['message_integration'].each_pair do |pm, url|
|
194
|
-
pm_def = DiffToHtml::INTEGRATION_MAP[pm.to_sym] or next
|
195
|
-
replace_with = pm_def[:replace_with]
|
196
|
-
replace_with = replace_with.kind_of?(Proc) ? lambda { |m| pm_def[:replace_with].call(m, url) } : replace_with.gsub('#{url}', url)
|
197
|
-
message_replace!(message, pm_def[:search_for], replace_with)
|
198
|
-
end
|
199
|
-
message
|
200
|
-
=end
|
187
|
+
@diff = GitCommitNotifier::DiffToHtml.new(nil, @config)
|
188
|
+
end
|
189
|
+
|
201
190
|
it "should do nothing unless message_integration config section exists" do
|
202
191
|
mock.proxy(nil).respond_to?(:each_pair)
|
203
192
|
dont_allow(@diff).message_replace!
|
@@ -215,7 +204,7 @@ describe DiffToHtml do
|
|
215
204
|
describe :old_commit? do
|
216
205
|
before(:each) do
|
217
206
|
@config = Hash.new
|
218
|
-
@diff_to_html = DiffToHtml.new(nil, @config)
|
207
|
+
@diff_to_html = GitCommitNotifier::DiffToHtml.new(nil, @config)
|
219
208
|
end
|
220
209
|
|
221
210
|
it "should be false unless skip_commits_older_than set" do
|
@@ -239,8 +228,7 @@ describe DiffToHtml do
|
|
239
228
|
|
240
229
|
it "should be true if commit is older than required by skip_commits_older_than" do
|
241
230
|
@config['skip_commits_older_than'] = 1
|
242
|
-
@diff_to_html.old_commit?({:date => (Time.now - 2 * DiffToHtml::SECS_PER_DAY).to_s}).should be_true
|
231
|
+
@diff_to_html.old_commit?({:date => (Time.now - 2 * GitCommitNotifier::DiffToHtml::SECS_PER_DAY).to_s}).should be_true
|
243
232
|
end
|
244
233
|
end
|
245
|
-
|
246
234
|
end
|
@@ -2,26 +2,24 @@ require File.expand_path('../../../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
require 'git_commit_notifier'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
describe Emailer do
|
5
|
+
describe GitCommitNotifier::Emailer do
|
8
6
|
describe :new do
|
9
7
|
it "should assign config if given" do
|
10
|
-
Emailer.new({:a => :b}).config[:a].should == :b
|
8
|
+
GitCommitNotifier::Emailer.new({:a => :b}).config[:a].should == :b
|
11
9
|
end
|
12
10
|
|
13
11
|
it "should use empty hash unless config given" do
|
14
|
-
cfg = Emailer.new(false).config
|
12
|
+
cfg = GitCommitNotifier::Emailer.new(false).config
|
15
13
|
cfg.should be_kind_of(Hash)
|
16
14
|
cfg.should be_empty
|
17
15
|
end
|
18
16
|
|
19
17
|
it "should assign parameters from options" do
|
20
18
|
options = {}
|
21
|
-
Emailer::PARAMETERS.each do |name|
|
19
|
+
GitCommitNotifier::Emailer::PARAMETERS.each do |name|
|
22
20
|
options[name.to_sym] = Faker::Lorem.sentence
|
23
21
|
end
|
24
|
-
emailer = Emailer.new({}, options)
|
22
|
+
emailer = GitCommitNotifier::Emailer.new({}, options)
|
25
23
|
options.each_pair do |key, value|
|
26
24
|
emailer.instance_variable_get("@#{key}").should == value
|
27
25
|
end
|
@@ -30,15 +28,15 @@ describe Emailer do
|
|
30
28
|
|
31
29
|
describe :stylesheet_string do
|
32
30
|
it "should return default stylesheet if custom is not provided" do
|
33
|
-
emailer = Emailer.new({})
|
34
|
-
mock(IO).read(Emailer::DEFAULT_STYLESHEET_PATH) { 'ok' }
|
31
|
+
emailer = GitCommitNotifier::Emailer.new({})
|
32
|
+
mock(IO).read(GitCommitNotifier::Emailer::DEFAULT_STYLESHEET_PATH) { 'ok' }
|
35
33
|
emailer.stylesheet_string.should == 'ok'
|
36
34
|
end
|
37
35
|
|
38
36
|
it "should return custom stylesheet if custom is provided" do
|
39
|
-
emailer = Emailer.new({'stylesheet' => '/path/to/custom/stylesheet'})
|
37
|
+
emailer = GitCommitNotifier::Emailer.new({'stylesheet' => '/path/to/custom/stylesheet'})
|
40
38
|
mock(IO).read('/path/to/custom/stylesheet') { 'ok' }
|
41
|
-
dont_allow(IO).read(Emailer::DEFAULT_STYLESHEET_PATH)
|
39
|
+
dont_allow(IO).read(GitCommitNotifier::Emailer::DEFAULT_STYLESHEET_PATH)
|
42
40
|
emailer.stylesheet_string.should == 'ok'
|
43
41
|
end
|
44
42
|
end
|
@@ -46,27 +44,27 @@ describe Emailer do
|
|
46
44
|
describe :mail_html_message do
|
47
45
|
it "should form inline html" do
|
48
46
|
options = {}
|
49
|
-
Emailer::PARAMETERS.each do |name|
|
47
|
+
GitCommitNotifier::Emailer::PARAMETERS.each do |name|
|
50
48
|
options[name.to_sym] = Faker::Lorem.sentence
|
51
49
|
end
|
52
|
-
emailer = Emailer.new({}, options)
|
50
|
+
emailer = GitCommitNotifier::Emailer.new({}, options)
|
53
51
|
emailer.mail_html_message.should match(/html/)
|
54
52
|
end
|
55
53
|
end
|
56
54
|
|
57
55
|
describe :template do
|
58
56
|
before(:each) do
|
59
|
-
Emailer.reset_template
|
60
|
-
mock(IO).read(Emailer::TEMPLATE) { 'erb' }
|
57
|
+
GitCommitNotifier::Emailer.reset_template
|
58
|
+
mock(IO).read(GitCommitNotifier::Emailer::TEMPLATE) { 'erb' }
|
61
59
|
end
|
62
60
|
|
63
61
|
it "should respond to result" do
|
64
|
-
Emailer.template.should respond_to(:result)
|
62
|
+
GitCommitNotifier::Emailer.template.should respond_to(:result)
|
65
63
|
end
|
66
64
|
|
67
65
|
it "should return Erubis template if Erubis installed" do
|
68
|
-
mock(Emailer).require('erubis')
|
69
|
-
dont_allow(Emailer).require('erb')
|
66
|
+
mock(GitCommitNotifier::Emailer).require('erubis')
|
67
|
+
dont_allow(GitCommitNotifier::Emailer).require('erb')
|
70
68
|
unless defined?(Erubis)
|
71
69
|
module Erubis
|
72
70
|
class Eruby
|
@@ -76,16 +74,16 @@ describe Emailer do
|
|
76
74
|
end
|
77
75
|
end
|
78
76
|
mock.proxy(Erubis::Eruby).new('erb')
|
79
|
-
Emailer.template.should be_kind_of(Erubis::Eruby)
|
77
|
+
GitCommitNotifier::Emailer.template.should be_kind_of(Erubis::Eruby)
|
80
78
|
end
|
81
79
|
|
82
80
|
it "should return ERB template unless Erubis installed" do
|
83
81
|
require 'erb'
|
84
|
-
mock(Emailer).require('erubis') { raise LoadError.new('erubis') }
|
85
|
-
mock(Emailer).require('erb')
|
82
|
+
mock(GitCommitNotifier::Emailer).require('erubis') { raise LoadError.new('erubis') }
|
83
|
+
mock(GitCommitNotifier::Emailer).require('erb')
|
86
84
|
mock.proxy(ERB).new('erb')
|
87
85
|
|
88
|
-
Emailer.template.should be_kind_of(ERB)
|
86
|
+
GitCommitNotifier::Emailer.template.should be_kind_of(ERB)
|
89
87
|
end
|
90
88
|
end
|
91
89
|
end
|
@@ -1,42 +1,40 @@
|
|
1
1
|
require File.expand_path('../../../spec_helper', __FILE__)
|
2
2
|
require 'git_commit_notifier'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
describe Git do
|
4
|
+
describe GitCommitNotifier::Git do
|
7
5
|
SAMPLE_REV = '51b986619d88f7ba98be7d271188785cbbb541a0'.freeze
|
8
6
|
SAMPLE_REV_2 = '62b986619d88f7ba98be7d271188785cbbb541b1'.freeze
|
9
7
|
|
10
8
|
describe :from_shell do
|
11
9
|
it "should be backtick" do
|
12
|
-
Git.from_shell('pwd').should == `pwd`
|
10
|
+
GitCommitNotifier::Git.from_shell('pwd').should == `pwd`
|
13
11
|
end
|
14
12
|
end
|
15
13
|
|
16
14
|
describe :show do
|
17
15
|
it "should get data from shell: git show" do
|
18
16
|
expected = 'some data from git show'
|
19
|
-
mock(Git).from_shell("git show #{SAMPLE_REV} -w") { expected }
|
20
|
-
Git.show(SAMPLE_REV).should == expected
|
17
|
+
mock(GitCommitNotifier::Git).from_shell("git show #{SAMPLE_REV} -w") { expected }
|
18
|
+
GitCommitNotifier::Git.show(SAMPLE_REV).should == expected
|
21
19
|
end
|
22
20
|
|
23
21
|
it "should strip given revision" do
|
24
|
-
mock(Git).from_shell("git show #{SAMPLE_REV} -w")
|
25
|
-
Git.show("#{SAMPLE_REV}\n")
|
22
|
+
mock(GitCommitNotifier::Git).from_shell("git show #{SAMPLE_REV} -w")
|
23
|
+
GitCommitNotifier::Git.show("#{SAMPLE_REV}\n")
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
27
|
describe :branch_heads do
|
30
28
|
before(:each) do
|
31
|
-
mock(Git).from_shell("git rev-parse --branches") { "some\npopular\ntext\n" }
|
29
|
+
mock(GitCommitNotifier::Git).from_shell("git rev-parse --branches") { "some\npopular\ntext\n" }
|
32
30
|
end
|
33
31
|
|
34
32
|
it "should get branch heads from shell" do
|
35
|
-
lambda { Git.branch_heads }.should_not raise_error
|
33
|
+
lambda { GitCommitNotifier::Git.branch_heads }.should_not raise_error
|
36
34
|
end
|
37
35
|
|
38
36
|
it "should return array of lines" do
|
39
|
-
Git.branch_heads.should == %w[ some popular text ]
|
37
|
+
GitCommitNotifier::Git.branch_heads.should == %w[ some popular text ]
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
@@ -49,42 +47,42 @@ describe Git do
|
|
49
47
|
|
50
48
|
it "should return hooks.emailprefix if it's not empty" do
|
51
49
|
expected = "name of repo"
|
52
|
-
mock(Git).from_shell("git config hooks.emailprefix") { expected }
|
50
|
+
mock(GitCommitNotifier::Git).from_shell("git config hooks.emailprefix") { expected }
|
53
51
|
dont_allow(Dir).pwd
|
54
|
-
Git.repo_name.should == expected
|
52
|
+
GitCommitNotifier::Git.repo_name.should == expected
|
55
53
|
end
|
56
54
|
|
57
55
|
it "should return folder name if no emailprefix and directory not ended with .git" do
|
58
|
-
mock(Git).from_shell("git config hooks.emailprefix") { " " }
|
56
|
+
mock(GitCommitNotifier::Git).from_shell("git config hooks.emailprefix") { " " }
|
59
57
|
mock(Dir).pwd { "/home/someuser/repositories/myrepo" }
|
60
|
-
Git.repo_name.should == "myrepo"
|
58
|
+
GitCommitNotifier::Git.repo_name.should == "myrepo"
|
61
59
|
end
|
62
60
|
|
63
61
|
it "should return folder name without extension if no emailprefix and directory ended with .git" do
|
64
|
-
mock(Git).from_shell("git config hooks.emailprefix") { " " }
|
62
|
+
mock(GitCommitNotifier::Git).from_shell("git config hooks.emailprefix") { " " }
|
65
63
|
mock(Dir).pwd { "/home/someuser/repositories/myrepo.git" }
|
66
|
-
Git.repo_name.should == "myrepo"
|
64
|
+
GitCommitNotifier::Git.repo_name.should == "myrepo"
|
67
65
|
end
|
68
66
|
end
|
69
67
|
|
70
68
|
describe :log do
|
71
69
|
it "should run git log with given args" do
|
72
|
-
mock(Git).from_shell("git log #{SAMPLE_REV}..#{SAMPLE_REV_2}") { " ok " }
|
73
|
-
Git.log(SAMPLE_REV, SAMPLE_REV_2).should == "ok"
|
70
|
+
mock(GitCommitNotifier::Git).from_shell("git log #{SAMPLE_REV}..#{SAMPLE_REV_2}") { " ok " }
|
71
|
+
GitCommitNotifier::Git.log(SAMPLE_REV, SAMPLE_REV_2).should == "ok"
|
74
72
|
end
|
75
73
|
end
|
76
74
|
|
77
75
|
describe :branch_head do
|
78
76
|
it "should run git rev-parse with given treeish" do
|
79
|
-
mock(Git).from_shell("git rev-parse #{SAMPLE_REV}") { " ok " }
|
80
|
-
Git.branch_head(SAMPLE_REV).should == "ok"
|
77
|
+
mock(GitCommitNotifier::Git).from_shell("git rev-parse #{SAMPLE_REV}") { " ok " }
|
78
|
+
GitCommitNotifier::Git.branch_head(SAMPLE_REV).should == "ok"
|
81
79
|
end
|
82
80
|
end
|
83
81
|
|
84
82
|
describe :mailing_list_address do
|
85
83
|
it "should run git config hooks.mailinglist" do
|
86
|
-
mock(Git).from_shell("git config hooks.mailinglist") { " ok " }
|
87
|
-
Git.mailing_list_address.should == "ok"
|
84
|
+
mock(GitCommitNotifier::Git).from_shell("git config hooks.mailinglist") { " ok " }
|
85
|
+
GitCommitNotifier::Git.mailing_list_address.should == "ok"
|
88
86
|
end
|
89
87
|
end
|
90
88
|
|
@@ -1,60 +1,59 @@
|
|
1
1
|
require File.expand_path('../../../spec_helper', __FILE__)
|
2
2
|
require 'git_commit_notifier'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
describe Logger do
|
4
|
+
describe GitCommitNotifier::Logger do
|
7
5
|
describe :debug? do
|
8
6
|
it "should be false unless debug section exists" do
|
9
|
-
logger = Logger.new({})
|
7
|
+
logger = GitCommitNotifier::Logger.new({})
|
10
8
|
logger.should_not be_debug
|
11
9
|
end
|
12
10
|
|
13
11
|
it "should be false unless debug/enabled" do
|
14
|
-
logger = Logger.new("debug" => { "enabled" => false })
|
12
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => false })
|
15
13
|
logger.should_not be_debug
|
16
14
|
end
|
17
15
|
|
18
16
|
it "should be true if debug/enabled" do
|
19
|
-
logger = Logger.new("debug" => { "enabled" => true })
|
17
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => true })
|
20
18
|
logger.should be_debug
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
24
22
|
describe :log_directory do
|
25
23
|
it "should be nil unless debug?" do
|
26
|
-
logger = Logger.new({})
|
24
|
+
logger = GitCommitNotifier::Logger.new({})
|
27
25
|
logger.should_not be_debug
|
28
26
|
logger.log_directory.should be_nil
|
29
27
|
end
|
30
28
|
|
31
29
|
it "should be custom if debug and custom directory specified" do
|
32
30
|
expected = Faker::Lorem.sentence
|
33
|
-
logger = Logger.new("debug" => { "enabled" => true, "log_directory" => expected})
|
31
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => true, "log_directory" => expected})
|
34
32
|
logger.log_directory.should == expected
|
35
33
|
end
|
36
34
|
|
37
35
|
it "should be default log directory if debug and custom directory not specified" do
|
38
|
-
logger = Logger.new("debug" => { "enabled" => true })
|
39
|
-
logger.log_directory.should == Logger::DEFAULT_LOG_DIRECTORY
|
36
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => true })
|
37
|
+
logger.log_directory.should == GitCommitNotifier::Logger::DEFAULT_LOG_DIRECTORY
|
40
38
|
end
|
41
39
|
end
|
42
40
|
|
43
41
|
describe :log_path do
|
44
42
|
it "should be nil unless debug?" do
|
45
|
-
logger = Logger.new({})
|
43
|
+
logger = GitCommitNotifier::Logger.new({})
|
46
44
|
mock(logger).debug? { false }
|
47
45
|
logger.log_path.should be_nil
|
48
46
|
end
|
49
47
|
|
50
48
|
it "should be path in log_directory if debug?" do
|
51
|
-
logger = Logger.new("debug" => { "enabled" => true })
|
49
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => true })
|
52
50
|
File.dirname(logger.log_path).should == logger.log_directory
|
53
51
|
end
|
54
52
|
|
55
53
|
it "should points to LOG_NAME if debug?" do
|
56
|
-
logger = Logger.new("debug" => { "enabled" => true })
|
57
|
-
File.basename(logger.log_path).should == Logger::LOG_NAME
|
54
|
+
logger = GitCommitNotifier::Logger.new("debug" => { "enabled" => true })
|
55
|
+
File.basename(logger.log_path).should == GitCommitNotifier::Logger::LOG_NAME
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|
59
|
+
|
@@ -3,15 +3,13 @@
|
|
3
3
|
require File.expand_path('../../../spec_helper', __FILE__)
|
4
4
|
require 'git_commit_notifier'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
describe ResultProcessor do
|
6
|
+
describe GitCommitNotifier::ResultProcessor do
|
9
7
|
before(:all) do
|
10
8
|
create_test_input
|
11
9
|
end
|
12
10
|
|
13
11
|
it :processor do
|
14
|
-
processor = ResultProcessor.new(@diff)
|
12
|
+
processor = GitCommitNotifier::ResultProcessor.new(@diff)
|
15
13
|
removal, addition = processor.results
|
16
14
|
removal.should have(1).line
|
17
15
|
|
@@ -34,7 +32,7 @@ describe ResultProcessor do
|
|
34
32
|
{ :action => :match, :token => 'x' }
|
35
33
|
]
|
36
34
|
|
37
|
-
processor = ResultProcessor.new(@diff)
|
35
|
+
processor = GitCommitNotifier::ResultProcessor.new(@diff)
|
38
36
|
removal, addition = processor.results
|
39
37
|
|
40
38
|
removal.should have(1).line
|
@@ -59,7 +57,7 @@ describe ResultProcessor do
|
|
59
57
|
diff << { :action => :discard_b, :token => 'u' }
|
60
58
|
diff << { :action => :discard_b, :token => 'b' }
|
61
59
|
|
62
|
-
processor = ResultProcessor.new(diff)
|
60
|
+
processor = GitCommitNotifier::ResultProcessor.new(diff)
|
63
61
|
removal, addition = processor.results
|
64
62
|
|
65
63
|
removal.should have(1).line
|
@@ -96,7 +94,7 @@ describe ResultProcessor do
|
|
96
94
|
|
97
95
|
describe :length_in_chars do
|
98
96
|
it "should be unicode friendly" do
|
99
|
-
processor = ResultProcessor.new(@diff)
|
97
|
+
processor = GitCommitNotifier::ResultProcessor.new(@diff)
|
100
98
|
processor.length_in_chars([{ :token => 'японская мама' }]).should == 13
|
101
99
|
end
|
102
100
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 9
|
8
|
-
-
|
9
|
-
version: 0.9.
|
8
|
+
- 1
|
9
|
+
version: 0.9.1
|
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: 2011-04-
|
17
|
+
date: 2011-04-05 00:00:00 +02:00
|
18
18
|
default_executable: git-commit-notifier
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -268,9 +268,11 @@ files:
|
|
268
268
|
- lib/git_commit_notifier/diff_to_html.rb
|
269
269
|
- lib/git_commit_notifier/emailer.rb
|
270
270
|
- lib/git_commit_notifier/escape_helper.rb
|
271
|
+
- lib/git_commit_notifier/executor.rb
|
271
272
|
- lib/git_commit_notifier/git.rb
|
272
273
|
- lib/git_commit_notifier/logger.rb
|
273
274
|
- lib/git_commit_notifier/result_processor.rb
|
275
|
+
- local-run.rb
|
274
276
|
- spec/fixtures/existing_file_one_line.txt
|
275
277
|
- spec/fixtures/git-notifier-group-email-by-push.yml
|
276
278
|
- spec/fixtures/git-notifier-ignore-merge.yml
|