git-commit-notifier 0.8.1 → 0.9.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/Gemfile +21 -0
- data/Gemfile.lock +105 -0
- data/README.textile +6 -1
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/git-commit-notifier +3 -1
- data/config/git-notifier-config.yml.sample +28 -4
- data/git-commit-notifier.gemspec +81 -56
- data/lib/git_commit_notifier.rb +8 -0
- data/lib/git_commit_notifier/commit_hook.rb +130 -0
- data/lib/git_commit_notifier/diff_callback.rb +22 -0
- data/lib/git_commit_notifier/diff_to_html.rb +471 -0
- data/lib/{emailer.rb → git_commit_notifier/emailer.rb} +47 -31
- data/lib/git_commit_notifier/escape_helper.rb +5 -0
- data/lib/{git.rb → git_commit_notifier/git.rb} +1 -1
- data/lib/{logger.rb → git_commit_notifier/logger.rb} +1 -1
- data/lib/git_commit_notifier/result_processor.rb +131 -0
- data/spec/fixtures/git-notifier-with-branch-restrictions.yml +22 -0
- data/spec/lib/{commit_hook_spec.rb → git_commit_notifier/commit_hook_spec.rb} +37 -11
- data/spec/lib/{diff_to_html_spec.rb → git_commit_notifier/diff_to_html_spec.rb} +94 -16
- data/spec/lib/{emailer_spec.rb → git_commit_notifier/emailer_spec.rb} +9 -20
- data/spec/lib/{git_spec.rb → git_commit_notifier/git_spec.rb} +4 -6
- data/spec/lib/{logger_spec.rb → git_commit_notifier/logger_spec.rb} +4 -7
- data/spec/lib/{result_processor_spec.rb → git_commit_notifier/result_processor_spec.rb} +4 -2
- data/template/email.html.erb +1 -1
- metadata +150 -50
- data/.gitignore +0 -21
- data/lib/commit_hook.rb +0 -129
- data/lib/diff_to_html.rb +0 -449
- data/lib/result_processor.rb +0 -126
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
source :rubygems
|
2
|
+
|
3
|
+
gem 'diff-lcs'
|
4
|
+
gem 'nntp'
|
5
|
+
gem 'premailer', '~>1.7.1'
|
6
|
+
gem 'nokogiri'
|
7
|
+
|
8
|
+
group :development do
|
9
|
+
gem 'jeweler'
|
10
|
+
gem 'code-cleaner'
|
11
|
+
gem 'metric_fu'
|
12
|
+
end
|
13
|
+
|
14
|
+
group :test do
|
15
|
+
gem 'rspec-core'
|
16
|
+
gem 'rspec-expectations'
|
17
|
+
gem 'rr'
|
18
|
+
gem 'faker'
|
19
|
+
gem 'rcov'
|
20
|
+
end
|
21
|
+
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
Saikuro (1.1.0)
|
5
|
+
abstract (1.0.0)
|
6
|
+
activesupport (3.0.5)
|
7
|
+
arrayfields (4.7.4)
|
8
|
+
chronic (0.3.0)
|
9
|
+
churn (0.0.13)
|
10
|
+
chronic (>= 0.2.3)
|
11
|
+
hirb
|
12
|
+
json_pure
|
13
|
+
main
|
14
|
+
ruby_parser (~> 2.0.4)
|
15
|
+
sexp_processor (~> 3.0.3)
|
16
|
+
code-cleaner (0.8.2)
|
17
|
+
colored (1.2)
|
18
|
+
css_parser (1.1.9)
|
19
|
+
diff-lcs (1.1.2)
|
20
|
+
erubis (2.6.6)
|
21
|
+
abstract (>= 1.0.0)
|
22
|
+
faker (0.9.5)
|
23
|
+
i18n (~> 0.4)
|
24
|
+
fattr (2.2.0)
|
25
|
+
flay (1.4.2)
|
26
|
+
ruby_parser (~> 2.0)
|
27
|
+
sexp_processor (~> 3.0)
|
28
|
+
flog (2.5.1)
|
29
|
+
ruby_parser (~> 2.0)
|
30
|
+
sexp_processor (~> 3.0)
|
31
|
+
git (1.2.5)
|
32
|
+
haml (3.0.25)
|
33
|
+
hirb (0.4.3)
|
34
|
+
htmlentities (4.3.0)
|
35
|
+
i18n (0.5.0)
|
36
|
+
jeweler (1.5.2)
|
37
|
+
bundler (~> 1.0.0)
|
38
|
+
git (>= 1.2.5)
|
39
|
+
rake
|
40
|
+
json_pure (1.5.1)
|
41
|
+
main (4.4.0)
|
42
|
+
arrayfields (>= 4.7.4)
|
43
|
+
fattr (>= 2.1.0)
|
44
|
+
metric_fu (2.1.1)
|
45
|
+
Saikuro (>= 1.1.0)
|
46
|
+
activesupport (>= 2.0.0)
|
47
|
+
chronic (~> 0.3.0)
|
48
|
+
churn (>= 0.0.7)
|
49
|
+
flay (>= 1.2.1)
|
50
|
+
flog (>= 2.3.0)
|
51
|
+
rails_best_practices (>= 0.6.4)
|
52
|
+
rcov (>= 0.8.3.3)
|
53
|
+
reek (>= 1.2.6)
|
54
|
+
roodi (>= 2.1.0)
|
55
|
+
syntax
|
56
|
+
nntp (1.0.0)
|
57
|
+
nokogiri (1.4.4)
|
58
|
+
premailer (1.7.1)
|
59
|
+
css_parser (>= 1.1.9)
|
60
|
+
htmlentities (>= 4.0.0)
|
61
|
+
rails_best_practices (0.7.5)
|
62
|
+
activesupport
|
63
|
+
colored (~> 1.2)
|
64
|
+
erubis (~> 2.6.6)
|
65
|
+
haml (~> 3.0.18)
|
66
|
+
i18n
|
67
|
+
ruby-progressbar (~> 0.0.9)
|
68
|
+
ruby_parser (~> 2.0.4)
|
69
|
+
rake (0.8.7)
|
70
|
+
rcov (0.9.9)
|
71
|
+
reek (1.2.8)
|
72
|
+
ruby2ruby (~> 1.2)
|
73
|
+
ruby_parser (~> 2.0)
|
74
|
+
sexp_processor (~> 3.0)
|
75
|
+
roodi (2.1.0)
|
76
|
+
ruby_parser
|
77
|
+
rr (1.0.2)
|
78
|
+
rspec-core (2.5.1)
|
79
|
+
rspec-expectations (2.5.0)
|
80
|
+
diff-lcs (~> 1.1.2)
|
81
|
+
ruby-progressbar (0.0.9)
|
82
|
+
ruby2ruby (1.2.5)
|
83
|
+
ruby_parser (~> 2.0)
|
84
|
+
sexp_processor (~> 3.0)
|
85
|
+
ruby_parser (2.0.6)
|
86
|
+
sexp_processor (~> 3.0)
|
87
|
+
sexp_processor (3.0.5)
|
88
|
+
syntax (1.0.0)
|
89
|
+
|
90
|
+
PLATFORMS
|
91
|
+
ruby
|
92
|
+
|
93
|
+
DEPENDENCIES
|
94
|
+
code-cleaner
|
95
|
+
diff-lcs
|
96
|
+
faker
|
97
|
+
jeweler
|
98
|
+
metric_fu
|
99
|
+
nntp
|
100
|
+
nokogiri
|
101
|
+
premailer (~> 1.7.1)
|
102
|
+
rcov
|
103
|
+
rr
|
104
|
+
rspec-core
|
105
|
+
rspec-expectations
|
data/README.textile
CHANGED
@@ -5,7 +5,9 @@ __by Bodo Tasche (bodo 'at' wannawork 'dot' de), Akzhan Abdulin (akzhan 'dot' ab
|
|
5
5
|
Sends email commit messages splitting commits that were pushed in one step.
|
6
6
|
Email is delivered as text or HTML with changes refined per word. Emails
|
7
7
|
have a scanable subject containing the first sentence of the commit as well
|
8
|
-
as the author, project and branch name.
|
8
|
+
as the author, project and branch name.
|
9
|
+
|
10
|
+
It's also possible to send a mail to a newsgroup using NNTP.
|
9
11
|
|
10
12
|
For example:
|
11
13
|
|
@@ -85,6 +87,9 @@ You should not receive messages about commits those already posted in other bran
|
|
85
87
|
This behaviour can be changed using unique_commits_per_branch option. When it's true,
|
86
88
|
you should receive new message about commit when it's merged in other branch.
|
87
89
|
|
90
|
+
Yet another option, skip_commits_older_than (in days), should be used to not inform about
|
91
|
+
old commits in processes of forking, branching etc.
|
92
|
+
|
88
93
|
h2. Note on Patches/Pull Requests
|
89
94
|
|
90
95
|
* Fork the project.
|
data/Rakefile
CHANGED
@@ -13,9 +13,9 @@ begin
|
|
13
13
|
gem.homepage = "http://github.com/bitboxer/git-commit-notifier"
|
14
14
|
gem.authors = ["Bodo Tasche"]
|
15
15
|
gem.add_dependency('diff-lcs')
|
16
|
-
gem.add_dependency('
|
17
|
-
gem.add_dependency('
|
18
|
-
gem.add_dependency('
|
16
|
+
gem.add_dependency('nntp')
|
17
|
+
gem.add_dependency('premailer', '~>1.7.1')
|
18
|
+
gem.add_dependency('nokogiri')
|
19
19
|
gem.add_development_dependency('rspec-core')
|
20
20
|
gem.add_development_dependency('rspec-expectations')
|
21
21
|
gem.add_development_dependency('rr')
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.9.0
|
data/bin/git-commit-notifier
CHANGED
@@ -9,7 +9,9 @@ end
|
|
9
9
|
# parameters: revision1, revision 2, branch
|
10
10
|
THIS_FILE = File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__
|
11
11
|
$:.unshift File.join(File.dirname(THIS_FILE), "../lib")
|
12
|
-
|
12
|
+
|
13
|
+
require 'git_commit_notifier'
|
14
|
+
include GitCommitNotifier
|
13
15
|
|
14
16
|
case ARGV.length
|
15
17
|
when 0
|
@@ -7,8 +7,13 @@ ignore_merge: false
|
|
7
7
|
# Limit lines per diff
|
8
8
|
# lines_per_diff: 300
|
9
9
|
|
10
|
-
#
|
11
|
-
|
10
|
+
# defines what branches to email for (defaults to all)
|
11
|
+
# include_branches: master
|
12
|
+
# include_branches: [master,some_other_branch]
|
13
|
+
|
14
|
+
# The recipient (or newsgroup for nntp) for the commit
|
15
|
+
# It can send to multiple destination, just seperate email address by "," :
|
16
|
+
mailinglist: developers@example.com,dev2@example.com,dev3@example.com,cto@example.com
|
12
17
|
|
13
18
|
# The from addres. If not defined it will use
|
14
19
|
# the address that is configured in git
|
@@ -17,7 +22,7 @@ mailinglist: developers@example.com
|
|
17
22
|
# stylesheet file (embedded template/styles.css by default)
|
18
23
|
# stylesheet: /absolute/path/to/readable/stylesheet.css
|
19
24
|
|
20
|
-
# select the delivery method: smtp or sendmail
|
25
|
+
# select the delivery method: smtp, nntp, or sendmail
|
21
26
|
delivery_method: sendmail
|
22
27
|
|
23
28
|
# Optionally group email by push: don't send an email for each commit when true.
|
@@ -33,11 +38,27 @@ smtp_server:
|
|
33
38
|
authentication: plain
|
34
39
|
enable_tls: false
|
35
40
|
|
41
|
+
# settings for the tls smtp server (gmail,etc)
|
42
|
+
# If you use gmail, just uncomment follow section and configure password
|
43
|
+
#smtp_server:
|
44
|
+
# address: smtp.gmail.com
|
45
|
+
# port: 587
|
46
|
+
# domain: smtp.gmail.com
|
47
|
+
# user_name: username@gmail.com
|
48
|
+
# password: password
|
49
|
+
# authentication: plain
|
50
|
+
# enable_tls: true
|
51
|
+
|
36
52
|
# settings for sendmail
|
37
53
|
sendmail_options:
|
38
54
|
location: /usr/sbin/sendmail
|
39
55
|
arguments: -i -t
|
40
56
|
|
57
|
+
# settings for nntp/newsgroup
|
58
|
+
nntp_settings:
|
59
|
+
address: your.nntp.host.here
|
60
|
+
port: 119
|
61
|
+
|
41
62
|
# Decorate files and commit ids with link to a webview. Possible values: none, gitweb, gitorious, cgit or trac
|
42
63
|
link_files: none
|
43
64
|
|
@@ -78,8 +99,11 @@ message_integration:
|
|
78
99
|
# Track unique commits per branch?
|
79
100
|
unique_commits_per_branch: false
|
80
101
|
|
102
|
+
# Skip commits older than N days
|
103
|
+
skip_commits_older_than: 7
|
104
|
+
|
81
105
|
# This is developer debugging options. Do not uncomment it if You aren't Jedi
|
82
106
|
# debug:
|
83
|
-
#
|
107
|
+
# enabled: true
|
84
108
|
# log_directory: /path/to/log/directory
|
85
109
|
|
data/git-commit-notifier.gemspec
CHANGED
@@ -1,74 +1,78 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
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.9.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{
|
12
|
+
s.date = %q{2011-04-04}
|
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}
|
16
16
|
s.executables = ["git-commit-notifier"]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
|
-
|
19
|
+
"README.textile"
|
20
20
|
]
|
21
21
|
s.files = [
|
22
22
|
".document",
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"LICENSE",
|
26
|
+
"README.textile",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"bin/git-commit-notifier",
|
30
|
+
"config/git-notifier-config.yml.sample",
|
31
|
+
"git-commit-notifier.gemspec",
|
32
|
+
"lib/git_commit_notifier.rb",
|
33
|
+
"lib/git_commit_notifier/commit_hook.rb",
|
34
|
+
"lib/git_commit_notifier/diff_callback.rb",
|
35
|
+
"lib/git_commit_notifier/diff_to_html.rb",
|
36
|
+
"lib/git_commit_notifier/emailer.rb",
|
37
|
+
"lib/git_commit_notifier/escape_helper.rb",
|
38
|
+
"lib/git_commit_notifier/git.rb",
|
39
|
+
"lib/git_commit_notifier/logger.rb",
|
40
|
+
"lib/git_commit_notifier/result_processor.rb",
|
41
|
+
"spec/fixtures/existing_file_one_line.txt",
|
42
|
+
"spec/fixtures/git-notifier-group-email-by-push.yml",
|
43
|
+
"spec/fixtures/git-notifier-ignore-merge.yml",
|
44
|
+
"spec/fixtures/git-notifier-with-branch-restrictions.yml",
|
45
|
+
"spec/fixtures/git-notifier-with-merge.yml",
|
46
|
+
"spec/fixtures/git_log",
|
47
|
+
"spec/fixtures/git_show_055850e7d925110322b8db4e17c3b840d76e144c",
|
48
|
+
"spec/fixtures/git_show_51b986619d88f7ba98be7d271188785cbbb541a0",
|
49
|
+
"spec/fixtures/git_show_a4629e707d80a5769f7a71ca6ed9471015e14dc9",
|
50
|
+
"spec/fixtures/git_show_dce6ade4cdc2833b53bd600ef10f9bce83c7102d",
|
51
|
+
"spec/fixtures/git_show_e28ad77bba0574241e6eb64dfd0c1291b221effe",
|
52
|
+
"spec/fixtures/git_show_ff037a73fc1094455e7bbf506171a3f3cf873ae6",
|
53
|
+
"spec/fixtures/new_file_one_line.txt",
|
54
|
+
"spec/lib/git_commit_notifier/commit_hook_spec.rb",
|
55
|
+
"spec/lib/git_commit_notifier/diff_to_html_spec.rb",
|
56
|
+
"spec/lib/git_commit_notifier/emailer_spec.rb",
|
57
|
+
"spec/lib/git_commit_notifier/git_spec.rb",
|
58
|
+
"spec/lib/git_commit_notifier/logger_spec.rb",
|
59
|
+
"spec/lib/git_commit_notifier/result_processor_spec.rb",
|
60
|
+
"spec/spec_helper.rb",
|
61
|
+
"template/email.html.erb",
|
62
|
+
"template/styles.css"
|
58
63
|
]
|
59
64
|
s.homepage = %q{http://github.com/bitboxer/git-commit-notifier}
|
60
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
61
65
|
s.require_paths = ["lib"]
|
62
66
|
s.rubygems_version = %q{1.3.7}
|
63
67
|
s.summary = %q{Sends git commit messages with diffs}
|
64
68
|
s.test_files = [
|
65
|
-
"spec/lib/commit_hook_spec.rb",
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
69
|
+
"spec/lib/git_commit_notifier/commit_hook_spec.rb",
|
70
|
+
"spec/lib/git_commit_notifier/diff_to_html_spec.rb",
|
71
|
+
"spec/lib/git_commit_notifier/emailer_spec.rb",
|
72
|
+
"spec/lib/git_commit_notifier/git_spec.rb",
|
73
|
+
"spec/lib/git_commit_notifier/logger_spec.rb",
|
74
|
+
"spec/lib/git_commit_notifier/result_processor_spec.rb",
|
75
|
+
"spec/spec_helper.rb"
|
72
76
|
]
|
73
77
|
|
74
78
|
if s.respond_to? :specification_version then
|
@@ -77,9 +81,16 @@ Gem::Specification.new do |s|
|
|
77
81
|
|
78
82
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
79
83
|
s.add_runtime_dependency(%q<diff-lcs>, [">= 0"])
|
80
|
-
s.add_runtime_dependency(%q<
|
81
|
-
s.add_runtime_dependency(%q<
|
82
|
-
s.add_runtime_dependency(%q<
|
84
|
+
s.add_runtime_dependency(%q<nntp>, [">= 0"])
|
85
|
+
s.add_runtime_dependency(%q<premailer>, ["~> 1.7.1"])
|
86
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
87
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
88
|
+
s.add_development_dependency(%q<code-cleaner>, [">= 0"])
|
89
|
+
s.add_development_dependency(%q<metric_fu>, [">= 0"])
|
90
|
+
s.add_runtime_dependency(%q<diff-lcs>, [">= 0"])
|
91
|
+
s.add_runtime_dependency(%q<nntp>, [">= 0"])
|
92
|
+
s.add_runtime_dependency(%q<premailer>, ["~> 1.7.1"])
|
93
|
+
s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
|
83
94
|
s.add_development_dependency(%q<rspec-core>, [">= 0"])
|
84
95
|
s.add_development_dependency(%q<rspec-expectations>, [">= 0"])
|
85
96
|
s.add_development_dependency(%q<rr>, [">= 0"])
|
@@ -88,9 +99,16 @@ Gem::Specification.new do |s|
|
|
88
99
|
s.add_development_dependency(%q<metric_fu>, [">= 0"])
|
89
100
|
else
|
90
101
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
91
|
-
s.add_dependency(%q<
|
92
|
-
s.add_dependency(%q<
|
93
|
-
s.add_dependency(%q<
|
102
|
+
s.add_dependency(%q<nntp>, [">= 0"])
|
103
|
+
s.add_dependency(%q<premailer>, ["~> 1.7.1"])
|
104
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
105
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
106
|
+
s.add_dependency(%q<code-cleaner>, [">= 0"])
|
107
|
+
s.add_dependency(%q<metric_fu>, [">= 0"])
|
108
|
+
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
109
|
+
s.add_dependency(%q<nntp>, [">= 0"])
|
110
|
+
s.add_dependency(%q<premailer>, ["~> 1.7.1"])
|
111
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
94
112
|
s.add_dependency(%q<rspec-core>, [">= 0"])
|
95
113
|
s.add_dependency(%q<rspec-expectations>, [">= 0"])
|
96
114
|
s.add_dependency(%q<rr>, [">= 0"])
|
@@ -100,9 +118,16 @@ Gem::Specification.new do |s|
|
|
100
118
|
end
|
101
119
|
else
|
102
120
|
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
103
|
-
s.add_dependency(%q<
|
104
|
-
s.add_dependency(%q<
|
105
|
-
s.add_dependency(%q<
|
121
|
+
s.add_dependency(%q<nntp>, [">= 0"])
|
122
|
+
s.add_dependency(%q<premailer>, ["~> 1.7.1"])
|
123
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
124
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
125
|
+
s.add_dependency(%q<code-cleaner>, [">= 0"])
|
126
|
+
s.add_dependency(%q<metric_fu>, [">= 0"])
|
127
|
+
s.add_dependency(%q<diff-lcs>, [">= 0"])
|
128
|
+
s.add_dependency(%q<nntp>, [">= 0"])
|
129
|
+
s.add_dependency(%q<premailer>, ["~> 1.7.1"])
|
130
|
+
s.add_dependency(%q<nokogiri>, [">= 0"])
|
106
131
|
s.add_dependency(%q<rspec-core>, [">= 0"])
|
107
132
|
s.add_dependency(%q<rspec-expectations>, [">= 0"])
|
108
133
|
s.add_dependency(%q<rr>, [">= 0"])
|
@@ -0,0 +1,8 @@
|
|
1
|
+
require 'git_commit_notifier/commit_hook'
|
2
|
+
require 'git_commit_notifier/diff_to_html'
|
3
|
+
require 'git_commit_notifier/diff_callback'
|
4
|
+
require 'git_commit_notifier/emailer'
|
5
|
+
require 'git_commit_notifier/escape_helper'
|
6
|
+
require 'git_commit_notifier/git'
|
7
|
+
require 'git_commit_notifier/logger'
|
8
|
+
require 'git_commit_notifier/result_processor'
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'cgi'
|
4
|
+
require 'net/smtp'
|
5
|
+
require 'digest/sha1'
|
6
|
+
|
7
|
+
module GitCommitNotifier
|
8
|
+
class CommitHook
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_reader :config
|
12
|
+
|
13
|
+
def show_error(message)
|
14
|
+
$stderr.puts "************** GIT NOTIFIER PROBLEM *******************"
|
15
|
+
$stderr.puts "\n"
|
16
|
+
$stderr.puts message
|
17
|
+
$stderr.puts "\n"
|
18
|
+
$stderr.puts "************** GIT NOTIFIER PROBLEM *******************"
|
19
|
+
end
|
20
|
+
|
21
|
+
def info(message)
|
22
|
+
$stdout.puts message
|
23
|
+
$stdout.flush
|
24
|
+
end
|
25
|
+
|
26
|
+
def logger
|
27
|
+
@logger ||= Logger.new(config)
|
28
|
+
end
|
29
|
+
|
30
|
+
def run(config_name, rev1, rev2, ref_name)
|
31
|
+
@config = File.exists?(config_name) ? YAML::load_file(config_name) : {}
|
32
|
+
|
33
|
+
project_path = Dir.getwd
|
34
|
+
recipient = config["mailinglist"] || Git.mailing_list_address
|
35
|
+
|
36
|
+
if recipient.nil? || recipient.length == 0
|
37
|
+
GitCommitNotifier::CommitHook.show_error(
|
38
|
+
"Please add a recipient for the emails. Eg : \n" +
|
39
|
+
" git config hooks.mailinglist developer@example.com"
|
40
|
+
)
|
41
|
+
return
|
42
|
+
end
|
43
|
+
|
44
|
+
include_branches = config["include_branches"]
|
45
|
+
|
46
|
+
logger.debug('----')
|
47
|
+
logger.debug("pwd: #{Dir.pwd}")
|
48
|
+
logger.debug("ref_name: #{ref_name}")
|
49
|
+
logger.debug("rev1: #{rev1}")
|
50
|
+
logger.debug("rev2: #{rev2}")
|
51
|
+
logger.debug("included branches: #{include_branches.join(',')}") unless include_branches.nil?
|
52
|
+
|
53
|
+
prefix = @config["emailprefix"] || Git.repo_name
|
54
|
+
branch_name = ref_name.split("/").last
|
55
|
+
|
56
|
+
logger.debug("prefix: #{prefix}")
|
57
|
+
logger.debug("branch: #{branch_name}")
|
58
|
+
|
59
|
+
unless include_branches.nil? || include_branches.include?(branch_name)
|
60
|
+
info("Supressing mail for branch #{branch_name}...")
|
61
|
+
return
|
62
|
+
end
|
63
|
+
|
64
|
+
branch_name = branch_name.eql?('master') ? "" : "/#{branch_name}"
|
65
|
+
|
66
|
+
info("Sending mail...")
|
67
|
+
|
68
|
+
diff2html = GitCommitNotifier::DiffToHtml.new(Dir.pwd, config)
|
69
|
+
diff2html.diff_between_revisions(rev1, rev2, prefix, ref_name)
|
70
|
+
|
71
|
+
diffresult = diff2html.result
|
72
|
+
|
73
|
+
if config["ignore_merge"]
|
74
|
+
diffresult = diffresult.reject do |result|
|
75
|
+
!result[:commit_info][:merge].nil?
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
if config["group_email_by_push"]
|
80
|
+
text, html = [], []
|
81
|
+
diffresult.each_with_index do |result, i|
|
82
|
+
text << result[:text_content]
|
83
|
+
html << result[:html_content]
|
84
|
+
end
|
85
|
+
result = diffresult.first
|
86
|
+
return if result.nil? || !result[:commit_info]
|
87
|
+
|
88
|
+
emailer = GitCommitNotifier::Emailer.new(config,
|
89
|
+
:project_path => project_path,
|
90
|
+
:recipient => recipient,
|
91
|
+
:from_address => config["from"] || result[:commit_info][:email],
|
92
|
+
:from_alias => result[:commit_info][:author],
|
93
|
+
:subject => "[#{prefix}#{branch_name}] #{diffresult.size > 1 ? "#{diffresult.size} commits: " : ''}#{result[:commit_info][:message]}",
|
94
|
+
:text_message => text.join("------------------------------------------\n\n"),
|
95
|
+
:html_message => html.join("<hr /><br />"),
|
96
|
+
:old_rev => rev1,
|
97
|
+
:new_rev => rev2,
|
98
|
+
:ref_name => ref_name
|
99
|
+
)
|
100
|
+
emailer.send
|
101
|
+
else
|
102
|
+
diffresult.reverse.each_with_index do |result, i|
|
103
|
+
next unless result[:commit_info]
|
104
|
+
nr = number(diffresult.size, i)
|
105
|
+
|
106
|
+
emailer = GitCommitNotifier::Emailer.new(config,
|
107
|
+
:project_path => project_path,
|
108
|
+
:recipient => recipient,
|
109
|
+
:from_address => config["from"] || result[:commit_info][:email],
|
110
|
+
:from_alias => result[:commit_info][:author],
|
111
|
+
:subject => "[#{prefix}#{branch_name}]#{nr} #{result[:commit_info][:message]}",
|
112
|
+
:text_message => result[:text_content],
|
113
|
+
:html_message => result[:html_content],
|
114
|
+
:old_rev => rev1,
|
115
|
+
:new_rev => rev2,
|
116
|
+
:ref_name => ref_name
|
117
|
+
)
|
118
|
+
emailer.send
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def number(total_entries, i)
|
124
|
+
return '' if total_entries <= 1
|
125
|
+
digits = total_entries < 10 ? 1 : 3
|
126
|
+
'[' + sprintf("%0#{digits}d", i + 1) + ']'
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|