git-runner 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +9 -0
- data/lib/git-runner.rb +1 -0
- data/lib/git-runner/base.rb +27 -13
- data/lib/git-runner/hooks.rb +27 -4
- data/lib/git-runner/threading.rb +21 -0
- data/lib/git-runner/version.rb +1 -1
- metadata +3 -2
data/README.md
CHANGED
@@ -63,6 +63,14 @@ Name | Gem |
|
|
63
63
|
[Deploy](https://github.com/JamesBrooks/git-runner-deploy) | git-runner-deploy | Application deployment using capistrano
|
64
64
|
|
65
65
|
|
66
|
+
## Requirements
|
67
|
+
|
68
|
+
* git
|
69
|
+
* Ruby 1.9
|
70
|
+
* Developed and "tested" using 1.9.3 (formal testing incoming soon).
|
71
|
+
* It *might* work with 1.8.7 if `Object#tap` is patched in.
|
72
|
+
|
73
|
+
|
66
74
|
## Installation
|
67
75
|
|
68
76
|
This section needs a lot more fleshing out as installation overly trivial. The main thing to worry about is making sure that `hooks/post-update` in each of your repositories is able to run `git-runner` (and pass it's arguments on).
|
@@ -105,6 +113,7 @@ tmp_directory | /tmp/git-runner | Working directory for git-runner
|
|
105
113
|
|
106
114
|
## TODOs
|
107
115
|
|
116
|
+
* TESTS!
|
108
117
|
* Support to monitor a command (stdout and stderr) as the command is running, not just at the end.
|
109
118
|
* Instruction file path is globally set, make this overwritable on a per-repository basis?
|
110
119
|
* Instruction prefix is globally set, make this overwritable on a per-repository basis?
|
data/lib/git-runner.rb
CHANGED
data/lib/git-runner/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module GitRunner
|
2
2
|
class Base
|
3
|
-
attr_accessor :refs
|
3
|
+
attr_accessor :refs, :current_branch
|
4
4
|
|
5
5
|
|
6
6
|
def initialize(refs=[])
|
@@ -9,20 +9,10 @@ module GitRunner
|
|
9
9
|
|
10
10
|
def run
|
11
11
|
begin
|
12
|
-
load_git_runner_gems
|
13
12
|
Text.begin
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
# Only process HEAD references
|
19
|
-
refs.select { |str| str =~ /^refs\/heads\// }.each do |ref|
|
20
|
-
branch_name = ref.split('/').last
|
21
|
-
branch = Branch.new(repository_path, branch_name)
|
22
|
-
|
23
|
-
branch.run
|
24
|
-
end
|
25
|
-
end
|
14
|
+
load_git_runner_gems
|
15
|
+
process_refs
|
26
16
|
|
27
17
|
|
28
18
|
rescue GitRunner::Instruction::Failure => ex
|
@@ -35,6 +25,7 @@ module GitRunner
|
|
35
25
|
handle_unknown_exception(ex)
|
36
26
|
|
37
27
|
ensure
|
28
|
+
join_threads
|
38
29
|
Text.finish
|
39
30
|
end
|
40
31
|
end
|
@@ -46,6 +37,24 @@ module GitRunner
|
|
46
37
|
Gem::Specification._all.map(&:name).select { |gem| gem =~ /^git-runner-/ }.each { |name| require(name) }
|
47
38
|
end
|
48
39
|
|
40
|
+
def process_refs
|
41
|
+
if refs && refs.is_a?(Array)
|
42
|
+
repository_path = Dir.pwd
|
43
|
+
|
44
|
+
# Only process HEAD references
|
45
|
+
refs.select { |str| str =~ /^refs\/heads\// }.each do |ref|
|
46
|
+
branch_name = ref.split('/').last
|
47
|
+
|
48
|
+
self.current_branch = Branch.new(repository_path, branch_name)
|
49
|
+
self.current_branch.run
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def join_threads
|
55
|
+
GitRunner::Threading.join
|
56
|
+
end
|
57
|
+
|
49
58
|
def handle_instruction_failure_exception(ex)
|
50
59
|
Text.new_line
|
51
60
|
Text.out("Stopping runner, no further instructions will be performed\n")
|
@@ -84,6 +93,11 @@ module GitRunner
|
|
84
93
|
|
85
94
|
File.open(error_log, 'w') { |file| yield(file) }
|
86
95
|
|
96
|
+
GitRunner::Hooks.fire(:after_write_error_log, {
|
97
|
+
base: self,
|
98
|
+
log_file: error_log
|
99
|
+
})
|
100
|
+
|
87
101
|
Text.out("An error log has been created: #{error_log}")
|
88
102
|
error_log
|
89
103
|
end
|
data/lib/git-runner/hooks.rb
CHANGED
@@ -7,13 +7,36 @@ module GitRunner
|
|
7
7
|
@registrations ||= Hash.new { |hash, key| hash[key] = [] }
|
8
8
|
end
|
9
9
|
|
10
|
-
def register(name,
|
11
|
-
|
10
|
+
def register(name, callable)
|
11
|
+
unless callable.respond_to?(:call) && callable.respond_to?(:arity)
|
12
|
+
raise InvalidCallable.new("Supplied callable is not callable, should respond to #call and #arity")
|
13
|
+
end
|
14
|
+
|
15
|
+
if callable.arity > 1
|
16
|
+
raise InvalidCallable.new("Supplied callable takes #{callable.arity} argument(s), should accept either 1 or 0.")
|
17
|
+
end
|
18
|
+
|
19
|
+
registrations[name] << callable
|
12
20
|
end
|
13
21
|
|
14
|
-
def fire(name)
|
22
|
+
def fire(name, data=nil)
|
15
23
|
return unless registrations.keys.include?(name)
|
16
|
-
|
24
|
+
|
25
|
+
registrations[name].each do |callable|
|
26
|
+
if callable.arity == 1
|
27
|
+
callable.call(data)
|
28
|
+
else
|
29
|
+
callable.call
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
module GitRunner
|
38
|
+
module Hooks
|
39
|
+
class InvalidCallable < StandardError
|
17
40
|
end
|
18
41
|
end
|
19
42
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module GitRunner
|
2
|
+
module Threading
|
3
|
+
extend self
|
4
|
+
|
5
|
+
|
6
|
+
def spawn
|
7
|
+
raise ThreadError.new('must be called with a block') unless block_given?
|
8
|
+
thread_group.add(Thread.new { yield })
|
9
|
+
end
|
10
|
+
|
11
|
+
def thread_group
|
12
|
+
@thread_group ||= ThreadGroup.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def join
|
16
|
+
# TODO: Timeout with failure alerts
|
17
|
+
|
18
|
+
thread_group.list.each(&:join)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/git-runner/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-runner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: session
|
@@ -54,6 +54,7 @@ files:
|
|
54
54
|
- lib/git-runner/instructions/base.rb
|
55
55
|
- lib/git-runner/instructions/display.rb
|
56
56
|
- lib/git-runner/text.rb
|
57
|
+
- lib/git-runner/threading.rb
|
57
58
|
- lib/git-runner/version.rb
|
58
59
|
homepage: https://github.com/JamesBrooks/git-runner
|
59
60
|
licenses: []
|