captain_hook 0.1.0 → 0.1.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/CHANGELOG.markdown +8 -0
- data/README.rdoc +25 -7
- data/VERSION +1 -1
- data/captain_hook.gemspec +16 -7
- data/lib/captain_hook.rb +1 -1
- data/lib/captain_hook/base.rb +8 -1
- data/lib/captain_hook/dsl.rb +2 -0
- data/lib/captain_hook/dsl/base.rb +9 -0
- data/lib/captain_hook/dsl/handle_post_commit.rb +29 -0
- data/lib/captain_hook/dsl/handle_post_receive.rb +3 -6
- data/lib/captain_hook/events.rb +6 -0
- data/lib/captain_hook/events/post_commit.rb +36 -0
- data/lib/captain_hook/events/post_receive.rb +45 -0
- data/spec/captain_hook/base_spec.rb +17 -2
- data/spec/captain_hook/dsl/handle_post_commit_spec.rb +37 -0
- data/spec/captain_hook/dsl/handle_post_receive_spec.rb +2 -2
- data/spec/captain_hook/events/post_commit_spec.rb +39 -0
- data/spec/captain_hook/{post_receive_event_spec.rb → events/post_receive_spec.rb} +3 -3
- metadata +40 -16
- data/lib/captain_hook/post_receive_event.rb +0 -44
data/CHANGELOG.markdown
ADDED
data/README.rdoc
CHANGED
@@ -4,15 +4,33 @@ A ruby library for managing git hooks.
|
|
4
4
|
|
5
5
|
== Usage
|
6
6
|
|
7
|
-
===
|
8
|
-
your_repo/.git/hooks/post-receive
|
9
|
-
|
7
|
+
=== An example post-receive hook sending to campfire (tinder)
|
8
|
+
your_repo/.git/hooks/post-receive
|
9
|
+
require 'captain_hook'
|
10
|
+
require 'tinder'
|
10
11
|
|
11
|
-
|
12
|
+
hook = CaptainHook.from_path("../../")
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
hook.handle_post_receive do
|
15
|
+
room = MyCampfire.my_room
|
16
|
+
room.speak "New commit: '#{message}' by #{author} to #{ref_name}"
|
17
|
+
end
|
18
|
+
|
19
|
+
=== An example post-commit hook sending an email detailing the commit
|
20
|
+
your_repo/.git/hooks/post-commit
|
21
|
+
require 'captain_hook'
|
22
|
+
require 'mail'
|
23
|
+
|
24
|
+
hook = CaptainHook.from_path(File.join(File.dirname(__FILE__), '..','..'))
|
25
|
+
hook.handle_post_commit do
|
26
|
+
mail = Mail.new
|
27
|
+
mail.from 'from@example.com'
|
28
|
+
mail.to 'to@example.com'
|
29
|
+
mail.subject "#{message} committed by #{author} to #{ref_name}"
|
30
|
+
mail.body diff
|
31
|
+
|
32
|
+
mail.delivery_method(:sendmail)
|
33
|
+
mail.deliver
|
16
34
|
end
|
17
35
|
|
18
36
|
== Note on Patches/Pull Requests
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/captain_hook.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{captain_hook}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Adam Pearson"]
|
12
|
-
s.date = %q{2010-02
|
12
|
+
s.date = %q{2010-03-02}
|
13
13
|
s.description = %q{Makes handling git hooks easy, with built-in notification to campfire}
|
14
14
|
s.email = %q{ampearson@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
|
+
"CHANGELOG.markdown",
|
22
23
|
"LICENSE",
|
23
24
|
"README.rdoc",
|
24
25
|
"Rakefile",
|
@@ -27,11 +28,17 @@ Gem::Specification.new do |s|
|
|
27
28
|
"lib/captain_hook.rb",
|
28
29
|
"lib/captain_hook/base.rb",
|
29
30
|
"lib/captain_hook/dsl.rb",
|
31
|
+
"lib/captain_hook/dsl/base.rb",
|
32
|
+
"lib/captain_hook/dsl/handle_post_commit.rb",
|
30
33
|
"lib/captain_hook/dsl/handle_post_receive.rb",
|
31
|
-
"lib/captain_hook/
|
34
|
+
"lib/captain_hook/events.rb",
|
35
|
+
"lib/captain_hook/events/post_commit.rb",
|
36
|
+
"lib/captain_hook/events/post_receive.rb",
|
32
37
|
"spec/captain_hook/base_spec.rb",
|
38
|
+
"spec/captain_hook/dsl/handle_post_commit_spec.rb",
|
33
39
|
"spec/captain_hook/dsl/handle_post_receive_spec.rb",
|
34
|
-
"spec/captain_hook/
|
40
|
+
"spec/captain_hook/events/post_commit_spec.rb",
|
41
|
+
"spec/captain_hook/events/post_receive_spec.rb",
|
35
42
|
"spec/captain_hook_spec.rb",
|
36
43
|
"spec/spec.opts",
|
37
44
|
"spec/spec_helper.rb"
|
@@ -39,12 +46,14 @@ Gem::Specification.new do |s|
|
|
39
46
|
s.homepage = %q{http://github.com/radamant/captain_hook}
|
40
47
|
s.rdoc_options = ["--charset=UTF-8"]
|
41
48
|
s.require_paths = ["lib"]
|
42
|
-
s.rubygems_version = %q{1.3.
|
49
|
+
s.rubygems_version = %q{1.3.6}
|
43
50
|
s.summary = %q{A ruby manager for git hooks}
|
44
51
|
s.test_files = [
|
45
52
|
"spec/captain_hook/base_spec.rb",
|
53
|
+
"spec/captain_hook/dsl/handle_post_commit_spec.rb",
|
46
54
|
"spec/captain_hook/dsl/handle_post_receive_spec.rb",
|
47
|
-
"spec/captain_hook/
|
55
|
+
"spec/captain_hook/events/post_commit_spec.rb",
|
56
|
+
"spec/captain_hook/events/post_receive_spec.rb",
|
48
57
|
"spec/captain_hook_spec.rb",
|
49
58
|
"spec/spec_helper.rb"
|
50
59
|
]
|
data/lib/captain_hook.rb
CHANGED
data/lib/captain_hook/base.rb
CHANGED
@@ -14,11 +14,18 @@ module CaptainHook
|
|
14
14
|
dsl.run(&block) if block_given?
|
15
15
|
end
|
16
16
|
|
17
|
+
def handle_post_commit(&block)
|
18
|
+
post_commit = CaptainHook::Events::PostCommit.new(:repo => self.repo)
|
19
|
+
if block_given?
|
20
|
+
CaptainHook::DSL::HandlePostCommit.new(post_commit).run(&block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
17
24
|
private
|
18
25
|
|
19
26
|
def post_receive_from_data(data)
|
20
27
|
args = data.read.split(" ")
|
21
|
-
post_receive = CaptainHook::
|
28
|
+
post_receive = CaptainHook::Events::PostReceive.new(
|
22
29
|
:old_sha => args[0],
|
23
30
|
:new_sha => args[1],
|
24
31
|
:ref_name => args[2],
|
data/lib/captain_hook/dsl.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module CaptainHook
|
2
|
+
module DSL
|
3
|
+
class HandlePostCommit
|
4
|
+
include Base
|
5
|
+
|
6
|
+
def initialize(event)
|
7
|
+
@event = event
|
8
|
+
end
|
9
|
+
|
10
|
+
def message
|
11
|
+
@event.message
|
12
|
+
end
|
13
|
+
|
14
|
+
def author
|
15
|
+
@event.author
|
16
|
+
end
|
17
|
+
|
18
|
+
def diff
|
19
|
+
@event.diff
|
20
|
+
end
|
21
|
+
|
22
|
+
def ref_name
|
23
|
+
@event.ref_name
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
module CaptainHook
|
2
2
|
module DSL
|
3
3
|
class HandlePostReceive
|
4
|
+
include Base
|
5
|
+
|
4
6
|
def initialize(post_receive_event)
|
5
7
|
@post_receive_event = post_receive_event
|
6
8
|
end
|
7
9
|
|
8
10
|
def message
|
9
|
-
puts "post-receive: #{@post_receive_event.message}"
|
10
11
|
@post_receive_event.message
|
11
12
|
end
|
12
13
|
|
@@ -16,11 +17,7 @@ module CaptainHook
|
|
16
17
|
|
17
18
|
def author
|
18
19
|
@post_receive_event.author
|
19
|
-
end
|
20
|
-
|
21
|
-
def run &block
|
22
|
-
instance_eval &block
|
23
|
-
end
|
20
|
+
end
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module CaptainHook
|
2
|
+
module Events
|
3
|
+
class PostCommit
|
4
|
+
def initialize(options={})
|
5
|
+
@repo = options[:repo]
|
6
|
+
end
|
7
|
+
|
8
|
+
# The represents the git commit object in question
|
9
|
+
def commit
|
10
|
+
@commit ||= @repo.commit(@repo.head.commit)
|
11
|
+
end
|
12
|
+
|
13
|
+
# The commit message
|
14
|
+
def message
|
15
|
+
commit.message
|
16
|
+
end
|
17
|
+
|
18
|
+
def author
|
19
|
+
commit.author
|
20
|
+
end
|
21
|
+
|
22
|
+
# The diff string from the commit
|
23
|
+
# Concatenates all of the sub-diffs into one string
|
24
|
+
def diff
|
25
|
+
@diff ||= begin
|
26
|
+
commit.diffs.collect{|diff| diff.diff}.join("\n")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def ref_name
|
31
|
+
@ref_name ||= @repo.head.name
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module CaptainHook
|
2
|
+
module Events
|
3
|
+
class PostReceive
|
4
|
+
attr_accessor :repo, :old_commit, :new_commit
|
5
|
+
|
6
|
+
def initialize(options = {})
|
7
|
+
@repo = options[:repo]
|
8
|
+
@old_commit = @repo.commit(options[:old_sha])
|
9
|
+
@new_commit = @repo.commit(options[:new_sha])
|
10
|
+
@full_ref_name = options[:ref_name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def commits
|
14
|
+
@commits ||= @repo.commits_between(new_commit, old_commit)
|
15
|
+
end
|
16
|
+
|
17
|
+
def ref_name
|
18
|
+
@ref_name ||= begin
|
19
|
+
@full_ref_name =~ %r{^refs/(?:tags|heads|remotes)/(.+)} ?
|
20
|
+
$1 : "unknown"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns the author of the most-recent revision
|
25
|
+
def author
|
26
|
+
new_commit.author
|
27
|
+
end
|
28
|
+
|
29
|
+
# Returns the first line of the most recent revision's commit message
|
30
|
+
def message
|
31
|
+
@message ||= new_commit.message.split("\n")[0]
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns lines 1..n of the most recent revision's commit message
|
35
|
+
def message_detail
|
36
|
+
@message_detail ||= begin
|
37
|
+
new_commit.message.
|
38
|
+
split("\n")[1..-1].
|
39
|
+
reject{|s| s == ""}.
|
40
|
+
join("\n")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -9,7 +9,6 @@ describe CaptainHook::Base do
|
|
9
9
|
|
10
10
|
describe :handle_post_receive do
|
11
11
|
before(:each) do
|
12
|
-
@yielded = nil
|
13
12
|
@args = "sha1 sha2 refree"
|
14
13
|
$stdin.stub!(:read).and_return(@args)
|
15
14
|
end
|
@@ -22,7 +21,7 @@ describe CaptainHook::Base do
|
|
22
21
|
end
|
23
22
|
|
24
23
|
it "should use $stdin to parse args" do
|
25
|
-
CaptainHook::
|
24
|
+
CaptainHook::Events::PostReceive.
|
26
25
|
should_receive(:new).
|
27
26
|
with({
|
28
27
|
:old_sha => "sha1",
|
@@ -35,6 +34,22 @@ describe CaptainHook::Base do
|
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
37
|
+
describe :handle_post_commit do
|
38
|
+
it "should call run on the right DSL handler" do
|
39
|
+
dsl = mock()
|
40
|
+
CaptainHook::DSL::HandlePostCommit.stub!(:new).and_return(dsl)
|
41
|
+
dsl.should_receive(:run)
|
42
|
+
@hook.handle_post_commit {}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should create a post-commit event with the repo" do
|
46
|
+
CaptainHook::Events::PostCommit.should_receive(:new).with({:repo => @repo})
|
47
|
+
@hook.handle_post_commit
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
|
38
53
|
|
39
54
|
end
|
40
55
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe CaptainHook::DSL::HandlePostCommit do
|
4
|
+
before(:each) do
|
5
|
+
@event = mock('post_commit_event',
|
6
|
+
:message => "wave a white flag",
|
7
|
+
:author => "costello",
|
8
|
+
:ref_name => "put away the pistol",
|
9
|
+
:diff => "none"
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
subject{ CaptainHook::DSL::HandlePostCommit.new(@event)}
|
14
|
+
|
15
|
+
it "should return the event's commit message for #message" do
|
16
|
+
subject.message.should == "wave a white flag"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should return the event's author for #author" do
|
20
|
+
subject.author.should == "costello"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return the event's ref_name for #ref_name" do
|
24
|
+
subject.ref_name.should == "put away the pistol"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return the event's diff for #diff" do
|
28
|
+
subject.diff.should == "none"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should let a block run against itself like a good DSL" do
|
32
|
+
subject.run do
|
33
|
+
"#{author} - #{ref_name}"
|
34
|
+
end.should == "costello - put away the pistol"
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -3,8 +3,8 @@ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
3
3
|
describe CaptainHook::DSL::HandlePostReceive do
|
4
4
|
before(:each) do
|
5
5
|
@event = mock('post_receive_event',
|
6
|
-
:message
|
7
|
-
:author
|
6
|
+
:message => "hey hey, mama",
|
7
|
+
:author => "zeppelin",
|
8
8
|
:ref_name => "misty mountain hop"
|
9
9
|
)
|
10
10
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe CaptainHook::Events::PostCommit do
|
4
|
+
before(:each) do
|
5
|
+
@diff = mock('diff', :diff => "foo")
|
6
|
+
@repo = mock('repo',
|
7
|
+
:head => mock('head', :commit => 'sha1', :name => "talking"),
|
8
|
+
:commit => mock('commit',
|
9
|
+
:message => 'been a long time',
|
10
|
+
:author => 'a visionary',
|
11
|
+
:diffs => [@diff, @diff, @diff])
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { CaptainHook::Events::PostCommit.new(:repo => @repo) }
|
16
|
+
|
17
|
+
it "should expose the latest commit" do
|
18
|
+
subject.commit.message.should be
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should expose the message of the latest commit" do
|
22
|
+
subject.message.should == "been a long time"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should expose the author of the latest commit" do
|
26
|
+
subject.author.should == 'a visionary'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should expose the ref-name of the latest commit" do
|
30
|
+
subject.ref_name.should == "talking"
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "#diff" do
|
34
|
+
it "should concatenate the diffs from the latest commit" do
|
35
|
+
expected_diff = "#{@diff.diff}\n#{@diff.diff}\n#{@diff.diff}"
|
36
|
+
subject.diff.should == expected_diff
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
2
|
|
3
|
-
describe CaptainHook::
|
3
|
+
describe CaptainHook::Events::PostReceive do
|
4
4
|
before(:each) do
|
5
5
|
@repo = mock('repo')
|
6
6
|
@ref_name = 'refs/heads/master'
|
@@ -11,7 +11,7 @@ describe CaptainHook::PostReceiveEvent do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
subject {
|
14
|
-
CaptainHook::
|
14
|
+
CaptainHook::Events::PostReceive.new(
|
15
15
|
:old_sha => "oldsha",
|
16
16
|
:new_sha => "newsha",
|
17
17
|
:ref_name => @ref_name,
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: captain_hook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Adam Pearson
|
@@ -9,29 +14,37 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-02
|
17
|
+
date: 2010-03-02 00:00:00 -08:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rspec
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 2
|
30
|
+
- 9
|
23
31
|
version: 1.2.9
|
24
|
-
|
32
|
+
type: :development
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: grit
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - "="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 0
|
44
|
+
- 0
|
33
45
|
version: 2.0.0
|
34
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
35
48
|
description: Makes handling git hooks easy, with built-in notification to campfire
|
36
49
|
email: ampearson@gmail.com
|
37
50
|
executables: []
|
@@ -44,6 +57,7 @@ extra_rdoc_files:
|
|
44
57
|
files:
|
45
58
|
- .document
|
46
59
|
- .gitignore
|
60
|
+
- CHANGELOG.markdown
|
47
61
|
- LICENSE
|
48
62
|
- README.rdoc
|
49
63
|
- Rakefile
|
@@ -52,11 +66,17 @@ files:
|
|
52
66
|
- lib/captain_hook.rb
|
53
67
|
- lib/captain_hook/base.rb
|
54
68
|
- lib/captain_hook/dsl.rb
|
69
|
+
- lib/captain_hook/dsl/base.rb
|
70
|
+
- lib/captain_hook/dsl/handle_post_commit.rb
|
55
71
|
- lib/captain_hook/dsl/handle_post_receive.rb
|
56
|
-
- lib/captain_hook/
|
72
|
+
- lib/captain_hook/events.rb
|
73
|
+
- lib/captain_hook/events/post_commit.rb
|
74
|
+
- lib/captain_hook/events/post_receive.rb
|
57
75
|
- spec/captain_hook/base_spec.rb
|
76
|
+
- spec/captain_hook/dsl/handle_post_commit_spec.rb
|
58
77
|
- spec/captain_hook/dsl/handle_post_receive_spec.rb
|
59
|
-
- spec/captain_hook/
|
78
|
+
- spec/captain_hook/events/post_commit_spec.rb
|
79
|
+
- spec/captain_hook/events/post_receive_spec.rb
|
60
80
|
- spec/captain_hook_spec.rb
|
61
81
|
- spec/spec.opts
|
62
82
|
- spec/spec_helper.rb
|
@@ -73,24 +93,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
93
|
requirements:
|
74
94
|
- - ">="
|
75
95
|
- !ruby/object:Gem::Version
|
96
|
+
segments:
|
97
|
+
- 0
|
76
98
|
version: "0"
|
77
|
-
version:
|
78
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
100
|
requirements:
|
80
101
|
- - ">="
|
81
102
|
- !ruby/object:Gem::Version
|
103
|
+
segments:
|
104
|
+
- 0
|
82
105
|
version: "0"
|
83
|
-
version:
|
84
106
|
requirements: []
|
85
107
|
|
86
108
|
rubyforge_project:
|
87
|
-
rubygems_version: 1.3.
|
109
|
+
rubygems_version: 1.3.6
|
88
110
|
signing_key:
|
89
111
|
specification_version: 3
|
90
112
|
summary: A ruby manager for git hooks
|
91
113
|
test_files:
|
92
114
|
- spec/captain_hook/base_spec.rb
|
115
|
+
- spec/captain_hook/dsl/handle_post_commit_spec.rb
|
93
116
|
- spec/captain_hook/dsl/handle_post_receive_spec.rb
|
94
|
-
- spec/captain_hook/
|
117
|
+
- spec/captain_hook/events/post_commit_spec.rb
|
118
|
+
- spec/captain_hook/events/post_receive_spec.rb
|
95
119
|
- spec/captain_hook_spec.rb
|
96
120
|
- spec/spec_helper.rb
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module CaptainHook
|
2
|
-
class PostReceiveEvent
|
3
|
-
attr_accessor :repo, :old_commit, :new_commit
|
4
|
-
|
5
|
-
def initialize(options = {})
|
6
|
-
@repo = options[:repo]
|
7
|
-
@old_commit = @repo.commit(options[:old_sha])
|
8
|
-
@new_commit = @repo.commit(options[:new_sha])
|
9
|
-
@full_ref_name = options[:ref_name]
|
10
|
-
end
|
11
|
-
|
12
|
-
def commits
|
13
|
-
@commits ||= @repo.commits_between(new_commit, old_commit)
|
14
|
-
end
|
15
|
-
|
16
|
-
def ref_name
|
17
|
-
@ref_name ||= begin
|
18
|
-
@full_ref_name =~ %r{^refs/(?:tags|heads|remotes)/(.+)} ?
|
19
|
-
$1 : "unknown"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
# Returns the author of the most-recent revision
|
24
|
-
def author
|
25
|
-
new_commit.author
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns the first line of the most recent revision's commit message
|
29
|
-
def message
|
30
|
-
@message ||= new_commit.message.split("\n")[0]
|
31
|
-
end
|
32
|
-
|
33
|
-
# Returns lines 1..n of the most recent revision's commit message
|
34
|
-
def message_detail
|
35
|
-
@message_detail ||= begin
|
36
|
-
new_commit.message.
|
37
|
-
split("\n")[1..-1].
|
38
|
-
reject{|s| s == ""}.
|
39
|
-
join("\n")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|