git-commit-notifier 0.12.0 → 0.12.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +11 -0
- data/README.md +7 -0
- data/VERSION +1 -1
- data/config/git-notifier-config.example.yml +7 -0
- data/lib/git_commit_notifier/diff_to_html.rb +34 -1
- data/lib/git_commit_notifier/git.rb +39 -2
- data/template/styles.css +23 -10
- metadata +3 -3
data/CHANGES.md
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
|
3
3
|
## Not yet released
|
4
4
|
|
5
|
+
## Version 0.12.1
|
6
|
+
|
7
|
+
* The regular expression adjusted to include the underscore in repo name.
|
8
|
+
* More HTML commit messages appearance improvements.
|
9
|
+
* Fix the issue of notifications for all commits being sent out when a
|
10
|
+
new branch is pushed with unique_commits_per_branch set to false.
|
11
|
+
* gitlabhq also supports the character "-" within repository names.
|
12
|
+
* Fixing broken links of renamed files in case of gitweb and other interfaces.
|
13
|
+
* Do not list commit to closest annotated tag until configuration option set.
|
14
|
+
* Show shortlog from previous tag on tag creation.
|
15
|
+
|
5
16
|
## Version 0.12.0
|
6
17
|
|
7
18
|
* Detects renamed files.
|
data/README.md
CHANGED
@@ -174,6 +174,13 @@ bundle install
|
|
174
174
|
rake # Run specs
|
175
175
|
```
|
176
176
|
|
177
|
+
or
|
178
|
+
|
179
|
+
```bash
|
180
|
+
gem build git-commit-notifier.gemspec
|
181
|
+
[sudo] gem install git-commit-notifier-0.11.10.gem
|
182
|
+
```
|
183
|
+
|
177
184
|
Now you can create test configuration file (example provided in `config` directory) and test your code over any test repository in this manner:
|
178
185
|
|
179
186
|
```bash
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.12.
|
1
|
+
0.12.1
|
@@ -225,6 +225,13 @@ ignore_whitespace: all
|
|
225
225
|
# more than 50% of it has not changed
|
226
226
|
similarity_detection_threshold: "0.5"
|
227
227
|
|
228
|
+
# Show a shortlog of commits since the last tag, when creating an annotated tag
|
229
|
+
#
|
230
|
+
# Note :: this feature uses git-describe to obtain the information
|
231
|
+
# So, if git-describe is not one of your favourite ways to find the nearest tagged-commit, you will refrain from using this feature
|
232
|
+
#
|
233
|
+
show_a_shortlog_of_commits_since_the_last_annotated_tag: false
|
234
|
+
|
228
235
|
# This is developer debugging options. Do not uncomment it if You aren't Jedi
|
229
236
|
# debug:
|
230
237
|
# enabled: true
|
@@ -195,6 +195,12 @@ module GitCommitNotifier
|
|
195
195
|
|
196
196
|
file_name = @current_file_name
|
197
197
|
|
198
|
+
# Adjust filenames and hashes in case of file renames
|
199
|
+
if @file_renamed
|
200
|
+
file_name = @file_renamed_new_name
|
201
|
+
@current_sha = Git.sha_of_filename(@current_commit, file_name)
|
202
|
+
end
|
203
|
+
|
198
204
|
# TODO: these filenames, etc, should likely be properly html escaped
|
199
205
|
file_link = file_name
|
200
206
|
if config['link_files'] && !@file_removed
|
@@ -696,6 +702,23 @@ module GitCommitNotifier
|
|
696
702
|
message_array = tag_info[:contents].split("\n")
|
697
703
|
multi_line_message = message_array.count > 1
|
698
704
|
html += "<dt>Message</dt><dd class='#{multi_line_message ? "multi-line" : ""}'>#{message_array_as_html(message_array)}</dd>\n"
|
705
|
+
|
706
|
+
if config['show_a_shortlog_of_commits_since_the_last_annotated_tag']
|
707
|
+
list_of_commits_in_between = Git.list_of_commits_between_current_commit_and_last_tag(ref_name, tag_info[:tagobject])
|
708
|
+
if list_of_commits_in_between.length > 0
|
709
|
+
html += "<dt><br/>Commits since the last annotated tag</dt><dd><br/><br/><ul>"
|
710
|
+
list_of_commits_in_between.each do |commit|
|
711
|
+
if config['link_files'].to_s != "none"
|
712
|
+
l = markup_commit_for_html(commit[0])
|
713
|
+
l = l.gsub(/>.*<\/a>/,">#{commit[1]}</a>") # Replace the link text with the commit message (the original link text is the commit hash)
|
714
|
+
html += "<li>#{l}</li>"
|
715
|
+
else
|
716
|
+
html += "<li>#{commit[1]}</li>"
|
717
|
+
end
|
718
|
+
end
|
719
|
+
html += "</ul></dd>"
|
720
|
+
end
|
721
|
+
end
|
699
722
|
html += "</dl>"
|
700
723
|
|
701
724
|
text = "Tag: #{tag} (#{change_type == :create ? "added" : "updated"})\n"
|
@@ -725,7 +748,17 @@ module GitCommitNotifier
|
|
725
748
|
# on this branch without regard to whether they occur on other branches"
|
726
749
|
# The flag unique_to_current_branch passed to new_commits means the
|
727
750
|
# opposite: "consider only commits that are unique to this branch"
|
728
|
-
|
751
|
+
|
752
|
+
# Note :: In case of creation of a new branch, the oldrev passed by git
|
753
|
+
# to the post-receive hook is 00000... which causes the git commit notifier
|
754
|
+
# to send out notifications for ALL commits in the repository. Hence we force
|
755
|
+
# the "unique_commits_per_branch" config to "true" in such cases, and in other
|
756
|
+
# cases, we consider the value from the config file
|
757
|
+
if oldrev =~ /^0+$/
|
758
|
+
Git.new_commits(oldrev, newrev, ref_name, true)
|
759
|
+
else
|
760
|
+
Git.new_commits(oldrev, newrev, ref_name, !unique_commits_per_branch?)
|
761
|
+
end
|
729
762
|
end
|
730
763
|
|
731
764
|
# Add each diff to @result
|
@@ -70,6 +70,18 @@ class GitCommitNotifier::Git
|
|
70
70
|
lines.uniq
|
71
71
|
end
|
72
72
|
|
73
|
+
# Returns sha1 of the file after the most recent commit.
|
74
|
+
# Runs `git show #{rev}:#{filename} | git hash-object --stdin` to return the sha of the file.
|
75
|
+
# @note It was required as when there is a file which is renamed, and it has a 100% similarity index, its sha is not included in the git-show output.
|
76
|
+
# @return [String] sha1 of the file name.
|
77
|
+
# @see from_shell
|
78
|
+
# @param [String] rev revision where we want to get the sha of the file name
|
79
|
+
# @param [String] filename File name whose sha1 we want
|
80
|
+
def sha_of_filename(rev, filename)
|
81
|
+
lines = from_shell("git show #{rev}:#{filename} | git hash-object --stdin")
|
82
|
+
lines.strip
|
83
|
+
end
|
84
|
+
|
73
85
|
# splits the output of changed_files
|
74
86
|
# @return [Hash(Array)] file names sorted by status
|
75
87
|
# @see changed_files
|
@@ -117,6 +129,31 @@ class GitCommitNotifier::Git
|
|
117
129
|
from_shell("git rev-parse #{treeish}").strip
|
118
130
|
end
|
119
131
|
|
132
|
+
|
133
|
+
# Lists commits between specified rev and closest annotated tag.
|
134
|
+
# Uses `git describe` to obtain information.
|
135
|
+
# @return [Array] Commit hashes and their messages
|
136
|
+
# @param [String] tag_name of the current tag
|
137
|
+
# @param [String] rev sha of the commit the tag is associated with
|
138
|
+
# @note There have been many complaints about using git describe to obtain this information
|
139
|
+
# but, this looked like the best way to obtain the information here.
|
140
|
+
# Here is a link http://www.xerxesb.com/2010/git-describe-and-the-tale-of-the-wrong-commits/
|
141
|
+
# discussing, the way git-describe handles the problem of finding the nearest commit with a tag.
|
142
|
+
# Looking forward to someone coming up with a better way.
|
143
|
+
def list_of_commits_between_current_commit_and_last_tag(tag_name, rev)
|
144
|
+
result = Array.new
|
145
|
+
|
146
|
+
lines = from_shell("git describe --abbrev=0 #{rev}^1 2> /dev/null | cat ").strip # the `cat` is used to suppress the error that might arise when handling the case of the first commit
|
147
|
+
if lines.length != 1
|
148
|
+
previous_tag = lines
|
149
|
+
list_of_commits = lines_from_shell("git log #{previous_tag}..#{tag_name} --format='%H::::::%s'")
|
150
|
+
list_of_commits.each do |row|
|
151
|
+
result << Array.new(row.split("::::::"))
|
152
|
+
end
|
153
|
+
end
|
154
|
+
result
|
155
|
+
end
|
156
|
+
|
120
157
|
def new_commits(oldrev, newrev, refname, unique_to_current_branch)
|
121
158
|
# We want to get the set of commits (^B1 ^B2 ... ^oldrev newrev)
|
122
159
|
# Where B1, B2, ..., are any other branch
|
@@ -215,8 +252,8 @@ class GitCommitNotifier::Git
|
|
215
252
|
if git_path.empty?
|
216
253
|
git_path = git_dir
|
217
254
|
end
|
218
|
-
name_with_parent = File.expand_path(git_path).scan(/[a-zA-z0-9]+\/[a-zA-Z0-9]+.git$/).first;
|
219
|
-
return name_with_parent.sub(/\.git$/, '')
|
255
|
+
name_with_parent = File.expand_path(git_path).scan(/[a-zA-z0-9\-_]+\/[a-zA-Z0-9\-_]+.git$/).first;
|
256
|
+
return name_with_parent.sub(/\.git$/, '') unless name_with_parent.empty?
|
220
257
|
File.expand_path(git_path).split("/").last.sub(/\.git$/, '')
|
221
258
|
end
|
222
259
|
|
data/template/styles.css
CHANGED
@@ -1,14 +1,27 @@
|
|
1
|
-
* {font-size:12px;}
|
2
|
-
|
3
|
-
|
1
|
+
* {font-size:12px; font-family: Verdana, sans-serif; }
|
2
|
+
|
3
|
+
h2 {font-size:14px; background-color: #2e7bcc; color: white; font-weight: bold; padding: 10px;}
|
4
|
+
|
5
|
+
h2 a {color: #FFCC33; text-decoration: none; font-size: 14px; font-weight: bold;}
|
6
|
+
h2 a:visited {color: #CCCC66; text-decoration: none; font-size: 14px; font-weight: bold;}
|
7
|
+
a, a:visited {color: #0B6CDA; text-decoration: none;}
|
8
|
+
a:hover {text-decoration: underline;}
|
9
|
+
|
10
|
+
.title {background-color: #FFFFCC; padding: 10px; border: 1px solid #FFAA00;}
|
11
|
+
dt { float: left; font-weight: bold; min-width: 8em; }
|
12
|
+
dt, dd { padding-bottom: 0.5em; }
|
13
|
+
dt:after { content: ':'; }
|
14
|
+
dd.multi-line { clear: both; margin-left: 0; padding-top: 1em; }
|
15
|
+
|
16
|
+
ul li { padding-bottom: 0.5em; }
|
17
|
+
|
18
|
+
table {width:100%; border-collapse:collapse;}
|
19
|
+
td {color:#000; font-family: "Bitstream Vera Sans Mono","Monaco","Courier",monospace;}
|
20
|
+
td.sep {text-align:center; border-top:1px solid DimGray; border-bottom:1px solid DimGray;}
|
21
|
+
|
22
|
+
.ln {background-color: white; width: 35px; padding-right: 5px; text-align:right; color: #666; border-right: 1px solid #ccc; }
|
23
|
+
|
4
24
|
.r {background-color: #fdd;}
|
5
25
|
.rr {background-color: #faa;}
|
6
26
|
.a {background-color: #dfd;}
|
7
27
|
.aa {background-color: #afa;}
|
8
|
-
.title {background-color: #ddd; padding: 10px;font-family:Verdana;font-size:12px;}
|
9
|
-
dt { float: left; font-weight: bold; min-width: 6em; }
|
10
|
-
dt:after { content: ':'; }
|
11
|
-
dd.multi-line { clear: both; margin-left: 0; padding-top: 1em; }
|
12
|
-
td {color:#000;font-family: "Bitstream Vera Sans Mono","Monaco","Courier",monospace}
|
13
|
-
.ln {background-color: #ccc; width:23px; text-align:right}
|
14
|
-
td.sep {text-align:center;border-top:1px solid DimGray;border-bottom:1px solid DimGray;}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-commit-notifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.12.
|
4
|
+
version: 0.12.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-08-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: diff-lcs
|
@@ -339,7 +339,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
339
339
|
version: '0'
|
340
340
|
segments:
|
341
341
|
- 0
|
342
|
-
hash: -
|
342
|
+
hash: -137437954914361840
|
343
343
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
344
344
|
none: false
|
345
345
|
requirements:
|