ruby_git_hooks 0.0.32 → 0.0.40
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +8 -0
- data/TODO +2 -0
- data/lib/ruby_git_hooks.rb +62 -21
- data/lib/ruby_git_hooks/git_ops.rb +21 -2
- data/lib/ruby_git_hooks/jira_add_comment.rb +18 -23
- data/lib/ruby_git_hooks/version.rb +2 -2
- data/test/basic_hook_test.rb +123 -9
- data/test/copyright_check_test.rb +16 -5
- data/test/jira_add_comment_test.rb +24 -3
- data/test/max_file_size_hook_test.rb +2 -2
- data/test/multi_hook_test.rb +4 -3
- data/test/test_helper.rb +2 -2
- metadata +3 -4
data/README.md
CHANGED
@@ -254,6 +254,14 @@ Ruby version managers like rbenv.
|
|
254
254
|
|
255
255
|
## Troubleshooting
|
256
256
|
|
257
|
+
### Running our tests
|
258
|
+
For now, to run the tests you need to be sure to have the latest code
|
259
|
+
actually installed.
|
260
|
+
|
261
|
+
* gem build ruby_git_hooks.gemspec
|
262
|
+
* gem install ruby_git_hooks-0.0.34.gem (but use your real file name)
|
263
|
+
* rake test
|
264
|
+
|
257
265
|
### It Says It's Not Installed
|
258
266
|
|
259
267
|
Sometimes you can get an error saying that ruby_git_hooks isn't
|
data/TODO
CHANGED
data/lib/ruby_git_hooks.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "ruby_git_hooks/version"
|
4
4
|
|
@@ -46,19 +46,24 @@ module RubyGitHooks
|
|
46
46
|
# All filenames in repo
|
47
47
|
attr_accessor :ls_files
|
48
48
|
|
49
|
-
# All current commits (sometimes empty)
|
50
|
-
attr_accessor :commits
|
51
|
-
|
52
49
|
# Commit message for current commit
|
53
50
|
attr_accessor :commit_message
|
54
51
|
|
55
52
|
# Commit message file for current commit
|
56
53
|
attr_accessor :commit_message_file
|
54
|
+
|
55
|
+
# the following are for hooks which involve multiple commits (pre-receive, post-receive):
|
56
|
+
# (may be empty in other hooks)
|
57
|
+
# All current commits
|
58
|
+
attr_accessor :commits
|
59
|
+
|
60
|
+
# refs associated with each commit
|
61
|
+
attr_accessor :commit_ref_map
|
57
62
|
end
|
58
63
|
|
59
64
|
# Instances of Hook delegate these methods to the class methods.
|
60
65
|
HOOK_INFO = [ :files_changed, :file_contents, :file_diffs, :ls_files,
|
61
|
-
:commits, :commit_message, :commit_message_file ]
|
66
|
+
:commits, :commit_message, :commit_message_file, :commit_ref_map ]
|
62
67
|
HOOK_INFO.each do |info_method|
|
63
68
|
define_method(info_method) do |*args, &block|
|
64
69
|
Hook.send(info_method, *args, &block)
|
@@ -69,25 +74,47 @@ module RubyGitHooks
|
|
69
74
|
|
70
75
|
# Pre-receive gets no args, but STDIN with a list of changes.
|
71
76
|
"pre-receive" => proc {
|
77
|
+
def commit_date(c)
|
78
|
+
date = Hook.shell!("git log #{c} --pretty=%ct -1").strip.to_i
|
79
|
+
end
|
80
|
+
|
72
81
|
changes = []
|
73
82
|
STDIN.each_line do |line|
|
83
|
+
# STDERR.puts line # for debugging
|
74
84
|
base, commit, ref = line.strip.split
|
75
85
|
changes.push [base, commit, ref]
|
76
86
|
end
|
77
|
-
self.
|
87
|
+
self.commit_ref_map = {} #
|
88
|
+
# commit_ref_map is a list of which new commits are in this push, and which branches they are associated with
|
89
|
+
# as {commit1 => [ref1, ref2], commit2 => [ref1]}
|
90
|
+
# For existing branches, this information is sent in directly "base commit ref"
|
91
|
+
# BUT for branch new branches, the pre/post-receive hook gets "0 commit ref"
|
92
|
+
# ref is of the form refs/heads/branch_name
|
93
|
+
|
94
|
+
new_branches = changes.select{|base, _, _ | base =~ /\A0+\z/ }.collect{|_,_, ref| ref[/refs\/heads\/(\S+)/,1] }
|
95
|
+
|
96
|
+
if !new_branches.empty?
|
97
|
+
# For new branches, we will calculate which commits are new by specifically not including commits which are
|
98
|
+
# present in any other branch (and therefore will have been processed with that branch)
|
99
|
+
all_branches = Hook.shell!("git branch").split(/[* \n]+/).select{|b| !b.empty?} # remove spaces and the *
|
100
|
+
# ref is like refs/heads/<branch_name>
|
101
|
+
existing_branches = all_branches - new_branches
|
102
|
+
exclude_branches = existing_branches.inject("") {|str, b| str + " ^" + b} # "^B1 ^B2"
|
103
|
+
end
|
104
|
+
|
78
105
|
|
79
106
|
self.files_changed = []
|
80
107
|
self.file_contents = {}
|
81
108
|
self.file_diffs = {}
|
82
109
|
|
83
110
|
changes.each do |base, commit, ref|
|
84
|
-
|
85
|
-
if
|
86
|
-
# if base is 000
|
87
|
-
|
88
|
-
|
89
|
-
#
|
90
|
-
files_with_status
|
111
|
+
new_branch = base =~ /\A0+\z/
|
112
|
+
if new_branch
|
113
|
+
# if base is 000 then this is a new branch and we have no easy way know what files were added
|
114
|
+
# so for now just don't include files changed in a new branch
|
115
|
+
# because really this should be done per commit or at least per branch anyway
|
116
|
+
# TODO: we could figure it out based on the branch commit calculations per branch (see below)
|
117
|
+
files_with_status = []
|
91
118
|
else
|
92
119
|
files_with_status = Hook.shell!("git diff --name-status #{base}..#{commit}").split("\n")
|
93
120
|
end
|
@@ -107,19 +134,34 @@ module RubyGitHooks
|
|
107
134
|
file_contents[file_changed] = ""
|
108
135
|
end
|
109
136
|
end
|
110
|
-
|
111
|
-
|
112
|
-
|
137
|
+
|
138
|
+
# now calculate which commits are new
|
139
|
+
if new_branch
|
140
|
+
# new branch, but we don't want to include all commits from beginning of time
|
141
|
+
# so exclude any commits that are on any other branches
|
142
|
+
# e.g. git rev-list <commit for B3> ^master ^B2
|
143
|
+
# NOTE: have to use commit, not ref, because if this is called in pre-receive the branch name of ref won't
|
144
|
+
# actually have been set up yet!
|
145
|
+
new_commits = Hook.shell!("git rev-list #{commit} #{exclude_branches}").split("\n")
|
146
|
+
else
|
147
|
+
# existing branch, base..commit is right
|
148
|
+
new_commits = Hook.shell!("git rev-list #{base}..#{commit}").split("\n")
|
149
|
+
end
|
150
|
+
|
151
|
+
new_commits.each do |one_commit|
|
152
|
+
self.commit_ref_map[one_commit] ||= [];
|
153
|
+
self.commit_ref_map[one_commit] << ref # name of the branch associated with this commit
|
154
|
+
end
|
113
155
|
end
|
114
156
|
|
157
|
+
# we want the list of commits sorted by commit date
|
158
|
+
self.commits = self.commit_ref_map.keys.sort{|a,b|commit_date(b) <=> commit_date(a)}
|
159
|
+
|
115
160
|
if !self.commits.empty?
|
116
161
|
file_list_revision = self.commits.first # can't just use HEAD - remote may be on branch with no HEAD
|
117
162
|
self.ls_files = Hook.shell!("git ls-tree --full-tree --name-only -r #{file_list_revision}").split("\n")
|
118
|
-
# TODO should store ls_files per commit
|
163
|
+
# TODO should store ls_files per commit (with status)?
|
119
164
|
end
|
120
|
-
|
121
|
-
|
122
|
-
|
123
165
|
},
|
124
166
|
|
125
167
|
"pre-commit" => proc {
|
@@ -286,7 +328,6 @@ ERR
|
|
286
328
|
"any of: #{HOOK_NAMES.inspect}"
|
287
329
|
exit 1
|
288
330
|
end
|
289
|
-
|
290
331
|
unless HOOK_TYPE_SETUP[@run_as_hook]
|
291
332
|
STDERR.puts "No setup defined for hook type #{@run_as_hook.inspect}!"
|
292
333
|
exit 1
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
# This is a set of Git operations, run via shell. It permits much
|
4
4
|
# cleaner unit tests. Initially it was written in this way because it
|
@@ -57,7 +57,6 @@ module RubyGitHooks::GitOps
|
|
57
57
|
|
58
58
|
@single_file_counter += 1
|
59
59
|
end
|
60
|
-
system("git mv child_repo/file_to_rename child_repo/renamed_file")
|
61
60
|
|
62
61
|
def git_delete(repo_name="child_repo", filename="file_to_delete")
|
63
62
|
# filename is a file that has already been added and commited to the repo
|
@@ -90,4 +89,24 @@ module RubyGitHooks::GitOps
|
|
90
89
|
Hook.shell!("cd #{repo_name} && git log -1").chomp
|
91
90
|
end
|
92
91
|
|
92
|
+
def git_tag(repo_name="child_repo", tagname="0.1")
|
93
|
+
Hook.shell! "cd #{repo_name} && git tag -a #{tagname} -m 'test'"
|
94
|
+
end
|
95
|
+
|
96
|
+
def git_checkout(repo_name="child_repo", branch_name="master")
|
97
|
+
Hook.shell! "cd #{repo_name} && git checkout #{branch_name}"
|
98
|
+
end
|
99
|
+
|
100
|
+
def git_create_and_checkout_branch(repo_name="child_repo", branch_name="B1")
|
101
|
+
Hook.shell! "cd #{repo_name} && git checkout -b #{branch_name}"
|
102
|
+
end
|
103
|
+
|
104
|
+
def git_push_all(repo_name = "child_repo")
|
105
|
+
Hook.shell! "cd #{repo_name} && git push --all"
|
106
|
+
end
|
107
|
+
|
108
|
+
def git_revlist_all(repo_name = "child_repo")
|
109
|
+
Hook.shell!("cd #{repo_name} && git rev-list --all").split("\n")
|
110
|
+
end
|
111
|
+
|
93
112
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "ruby_git_hooks"
|
4
4
|
require "ruby_git_hooks/jira_ref_check"
|
@@ -114,21 +114,12 @@ class JiraCommentAddHook < RubyGitHooks::Hook
|
|
114
114
|
uri = "#{repo_remote_path}/commit/#{commit}"
|
115
115
|
end
|
116
116
|
|
117
|
-
def
|
118
|
-
#
|
119
|
-
#
|
120
|
-
#
|
121
|
-
|
122
|
-
|
123
|
-
# This is the initial commit so all files were added, but have to add the A ourselves
|
124
|
-
files_with_status = Hook.shell!("git ls-tree --name-status -r #{commit}").split("\n")
|
125
|
-
# put the A at the front
|
126
|
-
files_with_status.map!{|filename| "A\t" + filename}
|
127
|
-
else
|
128
|
-
|
129
|
-
files_with_status = Hook.shell!("git diff --name-status #{base}..#{current}")
|
130
|
-
end
|
131
|
-
files_with_status
|
117
|
+
def get_commit_branch(commit)
|
118
|
+
# get the branch (list) for this commit
|
119
|
+
# will usually be a single ref ([refs/heads/branch_name]). but could
|
120
|
+
# theoretically be multiple if single commit is on several branches processed at the same time.
|
121
|
+
refs = self.commit_ref_map[commit]
|
122
|
+
refs ? refs.join(" ") : ""
|
132
123
|
end
|
133
124
|
|
134
125
|
def get_comment_content(commit, commit_message)
|
@@ -146,12 +137,16 @@ class JiraCommentAddHook < RubyGitHooks::Hook
|
|
146
137
|
#
|
147
138
|
# M test.txt
|
148
139
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
140
|
+
github_link = build_commit_uri(commit) # have to do this separately
|
141
|
+
branch = "Branch: #{get_commit_branch(commit)}"
|
142
|
+
begin
|
143
|
+
content = "Revision: %h committed by %cn%nCommit date: %cd%n#{branch}%n#{github_link}%n%n#{commit_message}%n{noformat}"
|
144
|
+
text = Hook.shell!("git log #{commit} -1 --name-status --pretty='#{content}'")
|
145
|
+
text += "{noformat}" # git log puts changes at the bottom, we need to close the noformat tag for Jira
|
146
|
+
rescue
|
147
|
+
text = "No commit details available for #{commit}\n#{commit_message}"
|
148
|
+
end
|
149
|
+
text
|
155
150
|
end
|
156
151
|
|
157
152
|
def check_one_commit(commit, commit_message)
|
@@ -262,7 +257,7 @@ class JiraCommentAddHook < RubyGitHooks::Hook
|
|
262
257
|
# (it looks scary when there's a lot)
|
263
258
|
# when there's only one, just return the commit
|
264
259
|
# when more than one return first_commit..last_commit
|
265
|
-
# use the shortened
|
260
|
+
# use the shortened SHA-1 for readability
|
266
261
|
return "" if !self.commits || self.commits.empty?
|
267
262
|
|
268
263
|
if self.commits.size == 1
|
data/test/basic_hook_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
@@ -40,6 +40,24 @@ class TestHook < RubyGitHooks::Hook
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
RubyGitHooks.run TestHook.new
|
44
|
+
HOOK
|
45
|
+
|
46
|
+
TEST_HOOK_MULTI = <<HOOK
|
47
|
+
#{RubyGitHooks.shebang}
|
48
|
+
require "ruby_git_hooks"
|
49
|
+
|
50
|
+
class TestHook < RubyGitHooks::Hook
|
51
|
+
def check
|
52
|
+
File.open("#{TEST_PATH}", "w") do |f|
|
53
|
+
f.puts commit_ref_map.inspect
|
54
|
+
end
|
55
|
+
|
56
|
+
puts "Test hook runs!"
|
57
|
+
true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
43
61
|
RubyGitHooks.run TestHook.new
|
44
62
|
HOOK
|
45
63
|
|
@@ -91,32 +109,128 @@ HOOK
|
|
91
109
|
end
|
92
110
|
|
93
111
|
def test_simple_pre_receive
|
94
|
-
|
112
|
+
@hook_name ||= "pre-receive"
|
113
|
+
add_hook("parent_repo.git", @hook_name, TEST_HOOK_BODY)
|
95
114
|
|
96
115
|
new_single_file_commit "child_repo"
|
116
|
+
|
97
117
|
git_push("child_repo")
|
98
118
|
|
119
|
+
assert File.exist?(TEST_PATH), "Test #{@hook_name} hook didn't run!"
|
120
|
+
|
121
|
+
# file contents not expected to reach pre-receive hook for first push of a branch
|
122
|
+
# assert File.read(TEST_PATH).include?("Single-file commit"), "No file contents reached pre-receive hook!"
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
def test_multiple_pre_receive
|
127
|
+
@hook_name ||= "pre-receive"
|
128
|
+
add_hook("parent_repo.git", @hook_name, TEST_HOOK_MULTI)
|
129
|
+
|
130
|
+
before_commits = git_revlist_all("child_repo") # commits already in the repo
|
131
|
+
|
132
|
+
new_single_file_commit "child_repo"
|
133
|
+
|
134
|
+
git_create_and_checkout_branch("child_repo", "B1")
|
135
|
+
new_single_file_commit "child_repo"
|
136
|
+
git_push_all("child_repo") # pushes multiple branches
|
137
|
+
|
99
138
|
assert File.exist?(TEST_PATH), "Test pre-receive hook didn't run!"
|
100
|
-
|
101
|
-
|
139
|
+
|
140
|
+
commits = git_revlist_all("child_repo") - before_commits # will give us all the commits we just made
|
141
|
+
contents = File.read(TEST_PATH)
|
142
|
+
commits.each do |c|
|
143
|
+
assert contents.include?(c), "Missing commit info for #{c} in #{@hook_name} hook!"
|
144
|
+
end
|
145
|
+
assert contents.include?("B1")
|
146
|
+
assert contents.include?("master")
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_simple_post_receive
|
150
|
+
@hook_name = "post-receive" # pre and post are the same, but want to test both
|
151
|
+
# default to pre but this lets us use the exact same tests.
|
152
|
+
test_simple_pre_receive
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_multiple_post_receive
|
156
|
+
@hook_name = "post-receive" # pre and post are the same, but want to test both
|
157
|
+
# default to pre but this lets us use the exact same tests.
|
158
|
+
test_multiple_branch_pre_receive
|
159
|
+
end
|
160
|
+
|
161
|
+
def test_delete_post_receive
|
162
|
+
@hook_name = "post-receive" # pre and post are the same, but want to test both
|
163
|
+
# default to pre but this lets us use the exact same tests.
|
164
|
+
test_pre_receive_with_delete
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
def test_multiple_branch_pre_receive
|
170
|
+
@hook_name ||= "pre-receive"
|
171
|
+
|
172
|
+
add_hook("parent_repo.git", @hook_name, TEST_HOOK_MULTI)
|
173
|
+
|
174
|
+
before_commits = git_revlist_all("child_repo") # commits already in the repo
|
175
|
+
|
176
|
+
new_single_file_commit "child_repo" # commit to master
|
177
|
+
git_create_and_checkout_branch("child_repo", "B1")
|
178
|
+
new_single_file_commit "child_repo"
|
179
|
+
git_create_and_checkout_branch("child_repo", "B2")
|
180
|
+
new_single_file_commit "child_repo"
|
181
|
+
git_checkout("child_repo", "master")
|
182
|
+
new_single_file_commit "child_repo"
|
183
|
+
|
184
|
+
git_push_all("child_repo") # pushes multiple branches
|
185
|
+
|
186
|
+
commits = before_commits - git_revlist_all("child_repo") # will give us all the commits we just made
|
187
|
+
contents = File.read(TEST_PATH)
|
188
|
+
commits.each do |c|
|
189
|
+
assert contents.include?(c), "Missing commit info for #{c} in #{@hook_name} hook!"
|
190
|
+
end
|
191
|
+
assert contents.include?("B1")
|
192
|
+
assert contents.include?("B2")
|
193
|
+
assert contents.include?("master")
|
194
|
+
|
195
|
+
# now push a commit to a single existing branch and a new branch
|
196
|
+
before_commits = git_revlist_all("child_repo") # commits already in the repo
|
197
|
+
|
198
|
+
git_create_and_checkout_branch("child_repo", "B4") # no commits
|
199
|
+
git_checkout("child_repo", "B1")
|
200
|
+
new_single_file_commit "child_repo"
|
201
|
+
git_create_and_checkout_branch("child_repo", "B3")
|
202
|
+
new_single_file_commit "child_repo"
|
203
|
+
|
204
|
+
git_push_all("child_repo") # pushes multiple branches
|
205
|
+
|
206
|
+
commits = git_revlist_all("child_repo") - before_commits # will give us all the commits we just made
|
207
|
+
contents = File.read(TEST_PATH)
|
208
|
+
commits.each do |c|
|
209
|
+
assert contents.include?(c), "Missing commit info for #{c} in pre-receive hook!"
|
210
|
+
end
|
211
|
+
assert contents.include?("B1")
|
212
|
+
assert contents.include?("B3")
|
213
|
+
|
214
|
+
refute contents.include?("B2")
|
215
|
+
refute contents.include?("master")
|
216
|
+
|
102
217
|
end
|
103
218
|
|
104
219
|
|
105
220
|
def test_pre_receive_with_delete
|
106
|
-
|
221
|
+
@hook_name ||= "pre-receive"
|
222
|
+
add_hook("parent_repo.git", @hook_name, TEST_HOOK_BODY)
|
107
223
|
|
108
224
|
new_commit "child_repo", "file_to_delete"
|
109
225
|
git_push "child_repo"
|
110
226
|
|
111
|
-
|
112
227
|
git_delete "child_repo", "file_to_delete"
|
113
228
|
git_commit "child_repo", "Deleted file_to_delete"
|
114
229
|
git_push "child_repo"
|
115
230
|
|
116
|
-
|
117
|
-
assert File.exist?(TEST_PATH), "Test pre-receive hook didn't run!"
|
231
|
+
assert File.exist?(TEST_PATH), "Test #{@hook_name} hook didn't run!"
|
118
232
|
assert File.read(TEST_PATH).include?('"file_to_delete"=>""'),
|
119
|
-
"File deletion did not reach
|
233
|
+
"File deletion did not reach #{@hook_name} hook!"
|
120
234
|
end
|
121
235
|
|
122
236
|
def test_commit_msg
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
@@ -9,6 +9,7 @@ class RealCopyrightCheckHookTest < HookTestCase
|
|
9
9
|
REPOS_DIR = File.expand_path File.join(File.dirname(__FILE__), "repos")
|
10
10
|
FAKE_MAILER = File.join(File.dirname(__FILE__), "fake_mailer")
|
11
11
|
MAILER_FILE = File.join(File.dirname(__FILE__), "mail_params")
|
12
|
+
CURRENT_YEAR = Time.now.strftime("%Y")
|
12
13
|
TEST_HOOK_BASIC = <<TEST
|
13
14
|
#{RubyGitHooks.shebang}
|
14
15
|
require "ruby_git_hooks/copyright_check"
|
@@ -115,7 +116,7 @@ FILE_CONTENTS
|
|
115
116
|
add_hook("child_repo", "post-commit", TEST_HOOK_BASIC)
|
116
117
|
|
117
118
|
new_commit("child_repo", "correct_file.rb", <<FILE_CONTENTS)
|
118
|
-
# Copyright (C) 1941
|
119
|
+
# Copyright (C) 1941-#{CURRENT_YEAR} YoyoDyne, Inc. All Rights Reserved.
|
119
120
|
FILE_CONTENTS
|
120
121
|
|
121
122
|
assert !File.exist?(MAILER_FILE), "Copyright test must not send email!"
|
@@ -125,7 +126,7 @@ FILE_CONTENTS
|
|
125
126
|
add_hook("child_repo", "post-commit", TEST_HOOK_COMPANY)
|
126
127
|
|
127
128
|
new_commit("child_repo", "correct_file.rb", <<FILE_CONTENTS)
|
128
|
-
# Copyright (C) 1941
|
129
|
+
# Copyright (C) 1941-#{CURRENT_YEAR} YoyoDyne Industries All Rights Reserved.
|
129
130
|
FILE_CONTENTS
|
130
131
|
|
131
132
|
assert !File.exist?(MAILER_FILE), "Copyright test must not send email!"
|
@@ -135,7 +136,7 @@ FILE_CONTENTS
|
|
135
136
|
add_hook("child_repo", "post-commit", TEST_HOOK_COMPANY)
|
136
137
|
|
137
138
|
new_commit("child_repo", "correct_file.rb", <<FILE_CONTENTS)
|
138
|
-
# Copyright (C) 1941
|
139
|
+
# Copyright (C) 1941-#{CURRENT_YEAR} YoyoWrong All Rights Reserved.
|
139
140
|
FILE_CONTENTS
|
140
141
|
|
141
142
|
assert File.exist?(MAILER_FILE), "Must email about wrong company name!"
|
@@ -145,12 +146,22 @@ FILE_CONTENTS
|
|
145
146
|
add_hook("child_repo", "post-commit", TEST_HOOK_BASIC)
|
146
147
|
|
147
148
|
new_commit("child_repo", "correct_file_single_year.rb", <<FILE_CONTENTS)
|
148
|
-
# Copyright (C)
|
149
|
+
# Copyright (C) #{CURRENT_YEAR} YoyoDyne, Inc. All Rights Reserved.
|
149
150
|
FILE_CONTENTS
|
150
151
|
|
151
152
|
assert !File.exist?(MAILER_FILE), "Copyright test must not send email!"
|
152
153
|
end
|
153
154
|
|
155
|
+
def test_copyright_wrong_year
|
156
|
+
add_hook("child_repo", "post-commit", TEST_HOOK_COMPANY)
|
157
|
+
|
158
|
+
new_commit("child_repo", "correct_file.rb", <<FILE_CONTENTS)
|
159
|
+
# Copyright (C) 2012 YoyoDyne, Inc. All Rights Reserved.
|
160
|
+
FILE_CONTENTS
|
161
|
+
|
162
|
+
assert File.exist?(MAILER_FILE), "Must email about wrong date!"
|
163
|
+
end
|
164
|
+
|
154
165
|
def test_copyright_exclude_files
|
155
166
|
add_hook("child_repo", "post-commit", TEST_HOOK_EXCLUDE)
|
156
167
|
new_commit("child_repo", "schema.rb", <<FILE_CONTENTS)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
require "ruby_git_hooks/jira_add_comment"
|
@@ -37,6 +37,7 @@ class JiraCommentAddHookTest < HookTestCase
|
|
37
37
|
stub(@hook).commit_message { msg }
|
38
38
|
sha = last_commit_sha("child_repo")
|
39
39
|
stub(@hook).commits{[sha]}
|
40
|
+
stub(@hook).commit_ref_map{ {sha => ["refs/heads/master"]} } # it's always the master branch
|
40
41
|
Dir.chdir("child_repo") do
|
41
42
|
@hook.check
|
42
43
|
end
|
@@ -60,7 +61,7 @@ class JiraCommentAddHookTest < HookTestCase
|
|
60
61
|
|
61
62
|
def test_bad_reference
|
62
63
|
dont_allow(JiraCommentAddHook).add_comment # check that no comments are added
|
63
|
-
|
64
|
+
# because there are no valid tickets
|
64
65
|
mock(RestClient).get("https://user:password@jira.example.com/rest/api/latest/issue/BAD-234") do
|
65
66
|
exc = RestClient::Exception.new
|
66
67
|
mock(exc).http_code.at_least(1) { 404 }
|
@@ -82,10 +83,28 @@ JSON
|
|
82
83
|
mock(RestClient).post.with_any_args {<<JSON } # more complicated to check the args, just be sure it's called.
|
83
84
|
{ "fields": { "status": { "name": "Open" } } }
|
84
85
|
JSON
|
85
|
-
|
86
|
+
git_tag("child_repo", "0.1")
|
86
87
|
fake_hook_check("Message with GOOD-234 reference to Jira" )
|
87
88
|
|
88
89
|
# as long as the mocked RestClient calls happen, we succeeded
|
90
|
+
# would be better if we had a way to check if the tag is in the message
|
91
|
+
# but at least we'll make sure it doesn't fail.
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_good_reference_with_description
|
95
|
+
|
96
|
+
mock(RestClient).get("https://user:password@jira.example.com/rest/api/latest/issue/GOOD-234") { <<JSON }
|
97
|
+
{ "fields": { "status": { "name": "Open" } } }
|
98
|
+
JSON
|
99
|
+
|
100
|
+
mock(RestClient).post.with_any_args {<<JSON } # more complicated to check the args, just be sure it's called.
|
101
|
+
{ "fields": { "status": { "name": "Open" } } }
|
102
|
+
JSON
|
103
|
+
# add a tag so describe works
|
104
|
+
|
105
|
+
fake_hook_check("Message with GOOD-234 reference to Jira" )
|
106
|
+
|
107
|
+
|
89
108
|
end
|
90
109
|
|
91
110
|
|
@@ -148,4 +167,6 @@ JSON
|
|
148
167
|
end
|
149
168
|
|
150
169
|
|
170
|
+
|
171
|
+
|
151
172
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
@@ -11,7 +11,7 @@ class MaxFileSizeHookTest < HookTestCase
|
|
11
11
|
#{RubyGitHooks.shebang}
|
12
12
|
require "ruby_git_hooks/max_file_size"
|
13
13
|
|
14
|
-
RubyGitHooks.run MaxFileSizeHook.new(MAX_SIZE)
|
14
|
+
RubyGitHooks.run MaxFileSizeHook.new(#{MAX_SIZE})
|
15
15
|
TEST
|
16
16
|
|
17
17
|
def setup
|
data/test/multi_hook_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
require "test_helper"
|
4
4
|
|
@@ -6,6 +6,7 @@ require "minitest/autorun"
|
|
6
6
|
|
7
7
|
class CopyrightCheckHookTest < HookTestCase
|
8
8
|
REPOS_DIR = File.expand_path File.join(File.dirname(__FILE__), "repos")
|
9
|
+
CURRENT_YEAR = Time.now.strftime("%Y")
|
9
10
|
TEST_HOOK_MULTI_REG = <<TEST
|
10
11
|
#{RubyGitHooks.shebang}
|
11
12
|
require "ruby_git_hooks/ruby_debug"
|
@@ -45,7 +46,7 @@ TEST
|
|
45
46
|
last_sha = last_commit_sha
|
46
47
|
|
47
48
|
new_commit("child_repo", "myfile.rb", <<FILE_CONTENTS)
|
48
|
-
# Copyright (C)
|
49
|
+
# Copyright (C) #{CURRENT_YEAR} YoyoDyne, Inc. All Rights Reserved.
|
49
50
|
# No copyright notice, no ruby-debug. Should be fine.
|
50
51
|
FILE_CONTENTS
|
51
52
|
|
@@ -65,7 +66,7 @@ FILE_CONTENTS
|
|
65
66
|
assert_raises RuntimeError do
|
66
67
|
new_commit("child_repo", "myfile.rb", <<FILE_CONTENTS)
|
67
68
|
# Includes a copyright notice, but has ruby-debug
|
68
|
-
# Copyright (C)
|
69
|
+
# Copyright (C) #{CURRENT_YEAR} YoyoDyne, Inc. All Rights Reserved.
|
69
70
|
require 'ruby-debug'
|
70
71
|
FILE_CONTENTS
|
71
72
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2013 OL2, Inc. See LICENSE.txt for details.
|
1
|
+
# Copyright (C) 2013-2014 OL2, Inc. See LICENSE.txt for details.
|
2
2
|
|
3
3
|
# Test local copy first
|
4
4
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
@@ -9,7 +9,7 @@ require "rr"
|
|
9
9
|
require "ruby_git_hooks"
|
10
10
|
require "ruby_git_hooks/git_ops"
|
11
11
|
|
12
|
-
class HookTestCase < MiniTest::
|
12
|
+
class HookTestCase < MiniTest::Test
|
13
13
|
Hook = RubyGitHooks::Hook
|
14
14
|
include RubyGitHooks::GitOps
|
15
15
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_git_hooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.40
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2014-04-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: pony
|
@@ -205,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
205
|
version: '0'
|
206
206
|
requirements: []
|
207
207
|
rubyforge_project:
|
208
|
-
rubygems_version: 1.8.
|
208
|
+
rubygems_version: 1.8.23
|
209
209
|
signing_key:
|
210
210
|
specification_version: 3
|
211
211
|
summary: DSL and manager for git hooks in Ruby.
|
@@ -223,4 +223,3 @@ test_files:
|
|
223
223
|
- test/repos/.keep
|
224
224
|
- test/test_helper.rb
|
225
225
|
- test/watermark_test.rb
|
226
|
-
has_rdoc:
|