git-commit-mailer 1.0.0 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a9a76ede1a8e869ceb08833b8d53d8ac98a4a18
4
- data.tar.gz: cafcfc3b82ab6101a2b57b7d9eb176afac78f047
3
+ metadata.gz: 3c8f402644de43c9b76f2631aef1603d127d3f12
4
+ data.tar.gz: 8306e844d78ee136b1d499f9b9a73d033dcf83c5
5
5
  SHA512:
6
- metadata.gz: 3b582c308654f80df51c2f3804b1d4ee97a068432e79ab13ddd4e23f1339efb961a2bbe39cbf60399adeb34570ef531f14592938368d2136e6c3de63a50df291
7
- data.tar.gz: 87f2bc5f3cc64241d0a443a66a1e1d9f8027751928cac405f11a47943923f1bb413ecf713f968d32e5da5fe588d79a9284e2040d30998d3a9b9b37050e330255
6
+ metadata.gz: f1a33c639872bbc62c88c86cc4300bba9e6e4e9dcb8c6c32f1acfd619c43dbfc9d3258862a0619d9372f3369e890595f0a9378a56fe7e7dd2deb021673d9085a
7
+ data.tar.gz: 223867affd7a3ab35163af1d1528cb19d9c2ad480dd3d0f3d7c2a29ac1dcc76dfe881d1177cd203b842e167ad5671ffeb02391b620a89824e73707abf32674f9
data/LICENSE ADDED
@@ -0,0 +1 @@
1
+ GPLv3 or later. See doc/text/GPL-3.txt for details.
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # GitCommitMailer
4
4
 
5
- A utility to send commit mails for commits pushed to git repositories.
5
+ A utility to send commit mails for commits pushed to Git repositories.
6
6
 
7
7
  See also [Git](http://git-scm.com/).
8
8
 
@@ -15,12 +15,12 @@ See also [Git](http://git-scm.com/).
15
15
  ## License
16
16
 
17
17
  GitCommitMailer is licensed under GPLv3 or later. See
18
- license/GPL-3.txt for details.
18
+ doc/text/GPL-3.txt for details.
19
19
 
20
20
  ## Dependencies
21
21
 
22
- * Ruby >= 2.0.0
23
- * git >= 1.7
22
+ * Ruby >= 1.9.3
23
+ * Git >= 1.7
24
24
 
25
25
  ## Install
26
26
 
@@ -28,20 +28,20 @@ license/GPL-3.txt for details.
28
28
  $ gem install git-commit-mailer
29
29
  ~~~
30
30
 
31
- git-commit-mailer utilizes git's hook functionality to send
31
+ git-commit-mailer utilizes Git's hook functionality to send
32
32
  commit mails.
33
33
 
34
34
  Edit "post-receive" shell script file to execute it from there,
35
- which is located under "hooks" directory in a git repository.
35
+ which is located under "hooks" directory in a Git repository.
36
36
 
37
37
  Example:
38
38
 
39
39
  ~~~
40
- git-commit-mailer \
41
- --from-domain=example.com \
42
- --error-to=onodera@example.com \
43
- commit@example.com
40
+ git-commit-mailer \
41
+ --from-domain=example.com \
42
+ --error-to=onodera@example.com \
43
+ commit@example.com
44
44
  ~~~
45
45
 
46
- For more detailed usage and options, execute commit-email.rb
46
+ For more detailed usage and options, execute git-commit-mailer
47
47
  with `--help` option.
File without changes
data/doc/text/news.md ADDED
@@ -0,0 +1,18 @@
1
+ # News
2
+
3
+ ## 1.0.1 - 2015-06-09 {#version-1-0-1}
4
+
5
+ GitHub support improvement release!
6
+
7
+ ### Improvements
8
+
9
+ * Supported GitHub issue link by `#NNN` form in commit message.
10
+ * Followed line number link change in commit page on GitHub.
11
+
12
+ ### Fixes
13
+
14
+ * Fixed message ID duplication problem in merge commits.
15
+
16
+ ## 1.0.0 - 2015-05-23 {#version-1-0-0}
17
+
18
+ The initial release!
@@ -46,7 +46,7 @@ class GitCommitMailer
46
46
  attr_reader :subject, :author_name, :author_email, :date, :summary
47
47
  attr_accessor :merge_status
48
48
  attr_writer :reference
49
- attr_reader :merge_revisions
49
+ attr_reader :merge_commits
50
50
  def initialize(mailer, reference, revision)
51
51
  @mailer = mailer
52
52
  @reference = reference
@@ -65,7 +65,7 @@ class GitCommitMailer
65
65
  parse_diff
66
66
 
67
67
  @merge_status = []
68
- @merge_revisions = []
68
+ @merge_commits = []
69
69
  end
70
70
 
71
71
  def first_parent
@@ -85,7 +85,11 @@ class GitCommitMailer
85
85
  end
86
86
 
87
87
  def message_id
88
- "<#{@revision}@#{self.class.host_name}>"
88
+ if merge?
89
+ "<merge.#{@parent_revisions.first}.#{@revision}@#{self.class.host_name}>"
90
+ else
91
+ "<#{@revision}@#{self.class.host_name}>"
92
+ end
89
93
  end
90
94
 
91
95
  def headers
@@ -102,8 +106,8 @@ class GitCommitMailer
102
106
 
103
107
  def related_mail_headers
104
108
  headers = []
105
- @merge_revisions.each do |merge_revision|
106
- merge_message_id = "<#{merge_revision}@#{self.class.host_name}>"
109
+ @merge_commits.each do |merge_commit|
110
+ merge_message_id = merge_commit.message_id
107
111
  headers << "References: #{merge_message_id}"
108
112
  headers << "In-Reply-To: #{merge_message_id}"
109
113
  end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
3
  # Copyright (C) 2009 Ryo Onodera <onodera@clear-code.com>
4
- # Copyright (C) 2012-2014 Kouhei Sutou <kou@clear-code.com>
4
+ # Copyright (C) 2012-2015 Kouhei Sutou <kou@clear-code.com>
5
5
  #
6
6
  # This program is free software: you can redistribute it and/or modify
7
7
  # it under the terms of the GNU General Public License as published by
@@ -16,6 +16,8 @@
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
18
 
19
+ require "digest/md5"
20
+
19
21
  class GitCommitMailer
20
22
  class HTMLMailBodyFormatter < MailBodyFormatter
21
23
  include ERB::Util
@@ -27,7 +29,7 @@ class GitCommitMailer
27
29
 
28
30
  private
29
31
  def template
30
- <<-EOT
32
+ <<-TEMPLATE
31
33
  <!DOCTYPE html>
32
34
  <html>
33
35
  <head>
@@ -51,7 +53,7 @@ class GitCommitMailer
51
53
  </dd>
52
54
  <% end %>
53
55
  <%= dt("Message") %>
54
- <%= dd(pre(h(@info.summary.strip))) %>
56
+ <%= dd(format_summary(@info.summary.strip)) %>
55
57
  <%= format_files("Added", @info.added_files) %>
56
58
  <%= format_files("Copied", @info.copied_files) %>
57
59
  <%= format_files("Removed", @info.deleted_files) %>
@@ -63,7 +65,7 @@ class GitCommitMailer
63
65
  <%= format_diffs %>
64
66
  </body>
65
67
  </html>
66
- EOT
68
+ TEMPLATE
67
69
  end
68
70
 
69
71
  def format_revision
@@ -209,6 +211,22 @@ EOT
209
211
  [from_line_column, to_line_column, content_column]
210
212
  end
211
213
 
214
+ def format_summary(summary)
215
+ case @mailer.repository_browser
216
+ when "github"
217
+ linked_summary = h(summary).gsub(/\#(\d+)/) do
218
+ %Q(<a href="#{github_issue_url($1)}">\##{$1}</a>)
219
+ end
220
+ pre(linked_summary)
221
+ else
222
+ pre(h(summary))
223
+ end
224
+ end
225
+
226
+ def github_issue_url(id)
227
+ "#{@mailer.github_base_url}/#{@mailer.github_user}/#{@mailer.github_repository}/issues/#{id}"
228
+ end
229
+
212
230
  def tag_start(name, attributes)
213
231
  start_tag = "<#{name}"
214
232
  unless attributes.empty?
@@ -431,7 +449,12 @@ EOT
431
449
 
432
450
  def span_line_number_hunk_header(file_path, direction, offset)
433
451
  content = "..."
434
- url = commit_file_line_number_url(file_path, direction, offset - 1)
452
+ if offset <= 1
453
+ offset_omitted = nil
454
+ else
455
+ offset_omitted = offset - 1
456
+ end
457
+ url = commit_file_line_number_url(file_path, direction, offset_omitted)
435
458
  if url
436
459
  content = tag("a", {"href" => url}, content)
437
460
  end
@@ -559,5 +582,37 @@ EOT
559
582
  },
560
583
  content)
561
584
  end
585
+
586
+ def commit_file_url(file)
587
+ case @mailer.repository_browser
588
+ when "github"
589
+ base_url = commit_url
590
+ return nil if base_url.nil?
591
+ file_md5 = Digest::MD5.hexdigest(file)
592
+ "#{base_url}#diff-#{file_md5}"
593
+ when "github-wiki"
594
+ commit_file_url_github_wiki(file)
595
+ else
596
+ nil
597
+ end
598
+ end
599
+
600
+ def commit_file_line_number_url(file, direction, line_number)
601
+ base_url = commit_url
602
+ return nil if base_url.nil?
603
+
604
+ case @mailer.repository_browser
605
+ when "github"
606
+ file_md5 = Digest::MD5.hexdigest(file)
607
+ url = "#{base_url}#diff-#{file_md5}"
608
+ if line_number
609
+ url << ((direction == :from) ? "L" : "R")
610
+ url << line_number.to_s
611
+ end
612
+ url
613
+ else
614
+ nil
615
+ end
616
+ end
562
617
  end
563
618
  end
@@ -49,21 +49,6 @@ class GitCommitMailer
49
49
  end
50
50
  end
51
51
 
52
- def commit_file_url(file)
53
- case @mailer.repository_browser
54
- when "github"
55
- base_url = commit_url
56
- return nil if base_url.nil?
57
- index = @info.file_index(file)
58
- return nil if index.nil?
59
- "#{base_url}#diff-#{index}"
60
- when "github-wiki"
61
- commit_file_url_github_wiki(file)
62
- else
63
- nil
64
- end
65
- end
66
-
67
52
  def commit_file_url_github_wiki(file)
68
53
  return nil if file.nil?
69
54
 
@@ -76,22 +61,5 @@ class GitCommitMailer
76
61
  revision = @info.revision
77
62
  "#{base_url}/#{user}/#{repository}/wiki/#{page_name_in_url}/#{revision}"
78
63
  end
79
-
80
- def commit_file_line_number_url(file, direction, line_number)
81
- base_url = commit_url
82
- return nil if base_url.nil?
83
-
84
- case @mailer.repository_browser
85
- when "github"
86
- index = @info.file_index(file)
87
- return nil if index.nil?
88
- url = "#{base_url}#L#{index}"
89
- url << ((direction == :from) ? "L" : "R")
90
- url << line_number.to_s
91
- url
92
- else
93
- nil
94
- end
95
- end
96
64
  end
97
65
  end
@@ -47,7 +47,7 @@ class GitCommitMailer
47
47
  end
48
48
 
49
49
  def message_id
50
- "<#{old_revision}.#{new_revision}@#{self.class.host_name}>"
50
+ "<push.#{old_revision}.#{new_revision}@#{self.class.host_name}>"
51
51
  end
52
52
 
53
53
  def headers
@@ -1,4 +1,4 @@
1
1
  class GitCommitMailer
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  URL = "https://github.com/clear-code/git-commit-mailer"
4
4
  end
@@ -1039,7 +1039,7 @@ EOF
1039
1039
  merge_message = "Merged #{merge_commit.short_revision}: #{merge_commit.subject}"
1040
1040
  if not is_traversing_first_parent and not commit_info.merge_status.index(merge_message)
1041
1041
  commit_info.merge_status << merge_message
1042
- commit_info.merge_revisions << merge_commit.revision
1042
+ commit_info.merge_commits << merge_commit
1043
1043
  end
1044
1044
 
1045
1045
  if commit_info.merge?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-commit-mailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Onodera
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-03-25 00:00:00.000000000 Z
13
+ date: 2015-06-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -81,9 +81,12 @@ files:
81
81
  - ".gitignore"
82
82
  - ".travis.yml"
83
83
  - Gemfile
84
+ - LICENSE
84
85
  - README.md
85
86
  - Rakefile
86
87
  - bin/git-commit-mailer
88
+ - doc/text/GPL-3.txt
89
+ - doc/text/news.md
87
90
  - git-commit-mailer.gemspec
88
91
  - lib/git-commit-mailer.rb
89
92
  - lib/git-commit-mailer/commit-info.rb
@@ -94,7 +97,6 @@ files:
94
97
  - lib/git-commit-mailer/push-info.rb
95
98
  - lib/git-commit-mailer/text-mail-body-formatter.rb
96
99
  - lib/git-commit-mailer/version.rb
97
- - license/GPL-3.txt
98
100
  homepage: https://github.com/clear-code/git-commit-mailer
99
101
  licenses:
100
102
  - GPL-3.0+
@@ -115,8 +117,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
117
  version: '0'
116
118
  requirements: []
117
119
  rubyforge_project:
118
- rubygems_version: 2.4.5
120
+ rubygems_version: 2.2.2
119
121
  signing_key:
120
122
  specification_version: 4
121
123
  summary: A utility to send commit mails for commits pushed to git repositories.
122
124
  test_files: []
125
+ has_rdoc: