angry_mob_common_targets 0.1.0
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/LICENSE +21 -0
- data/README.md +38 -0
- data/lib/common_mob.rb +9 -0
- data/lib/common_mob/digest.rb +43 -0
- data/lib/common_mob/erb.rb +72 -0
- data/lib/common_mob/file.rb +55 -0
- data/lib/common_mob/patch.rb +51 -0
- data/lib/common_mob/resource_locator.rb +9 -0
- data/lib/common_mob/shell.rb +323 -0
- data/lib/common_mob/template.rb +23 -0
- data/lib/common_mob/version.rb +3 -0
- data/targets/crontab_patch.rb +37 -0
- data/targets/extract.rb +40 -0
- data/targets/fetch.rb +40 -0
- data/targets/files.rb +244 -0
- data/targets/git.rb +84 -0
- data/targets/group.rb +33 -0
- data/targets/packages.rb +94 -0
- data/targets/ruby.rb +13 -0
- data/targets/services.rb +184 -0
- data/targets/shell.rb +43 -0
- data/targets/user.rb +108 -0
- data/vendor/mustache/CONTRIBUTORS +9 -0
- data/vendor/mustache/HISTORY.md +135 -0
- data/vendor/mustache/LICENSE +20 -0
- data/vendor/mustache/README.md +405 -0
- data/vendor/mustache/Rakefile +103 -0
- data/vendor/mustache/benchmarks/complex.erb +15 -0
- data/vendor/mustache/benchmarks/complex.haml +12 -0
- data/vendor/mustache/benchmarks/helper.rb +20 -0
- data/vendor/mustache/benchmarks/simple.erb +5 -0
- data/vendor/mustache/benchmarks/speed.rb +78 -0
- data/vendor/mustache/bin/mustache +90 -0
- data/vendor/mustache/contrib/mustache-mode.el +278 -0
- data/vendor/mustache/contrib/mustache.vim +69 -0
- data/vendor/mustache/examples/hash.rb +16 -0
- data/vendor/mustache/examples/hash.yml +5 -0
- data/vendor/mustache/examples/projects.mustache +26 -0
- data/vendor/mustache/examples/projects.yml +28 -0
- data/vendor/mustache/examples/self.mustache +4 -0
- data/vendor/mustache/examples/self.yml +3 -0
- data/vendor/mustache/examples/simple.mustache +10 -0
- data/vendor/mustache/examples/simple.rb +24 -0
- data/vendor/mustache/lib/mustache.rb +358 -0
- data/vendor/mustache/lib/mustache/context.rb +108 -0
- data/vendor/mustache/lib/mustache/generator.rb +160 -0
- data/vendor/mustache/lib/mustache/parser.rb +230 -0
- data/vendor/mustache/lib/mustache/sinatra.rb +180 -0
- data/vendor/mustache/lib/mustache/template.rb +59 -0
- data/vendor/mustache/lib/mustache/version.rb +3 -0
- data/vendor/mustache/lib/rack/bug/panels/mustache_panel.rb +81 -0
- data/vendor/mustache/lib/rack/bug/panels/mustache_panel/mustache_extension.rb +27 -0
- data/vendor/mustache/lib/rack/bug/panels/mustache_panel/view.mustache +46 -0
- data/vendor/mustache/man/mustache.1 +180 -0
- data/vendor/mustache/man/mustache.1.html +204 -0
- data/vendor/mustache/man/mustache.1.ron +127 -0
- data/vendor/mustache/man/mustache.5 +576 -0
- data/vendor/mustache/man/mustache.5.html +415 -0
- data/vendor/mustache/man/mustache.5.ron +324 -0
- data/vendor/mustache/mustache.gemspec +32 -0
- data/vendor/mustache/test/autoloading_test.rb +52 -0
- data/vendor/mustache/test/fixtures/comments.mustache +1 -0
- data/vendor/mustache/test/fixtures/comments.rb +14 -0
- data/vendor/mustache/test/fixtures/complex_view.mustache +17 -0
- data/vendor/mustache/test/fixtures/complex_view.rb +34 -0
- data/vendor/mustache/test/fixtures/crazy_recursive.mustache +9 -0
- data/vendor/mustache/test/fixtures/crazy_recursive.rb +31 -0
- data/vendor/mustache/test/fixtures/delimiters.mustache +8 -0
- data/vendor/mustache/test/fixtures/delimiters.rb +23 -0
- data/vendor/mustache/test/fixtures/double_section.mustache +7 -0
- data/vendor/mustache/test/fixtures/double_section.rb +14 -0
- data/vendor/mustache/test/fixtures/escaped.mustache +1 -0
- data/vendor/mustache/test/fixtures/escaped.rb +14 -0
- data/vendor/mustache/test/fixtures/inner_partial.mustache +1 -0
- data/vendor/mustache/test/fixtures/inner_partial.txt +1 -0
- data/vendor/mustache/test/fixtures/inverted_section.mustache +7 -0
- data/vendor/mustache/test/fixtures/inverted_section.rb +14 -0
- data/vendor/mustache/test/fixtures/lambda.mustache +7 -0
- data/vendor/mustache/test/fixtures/lambda.rb +31 -0
- data/vendor/mustache/test/fixtures/namespaced.mustache +1 -0
- data/vendor/mustache/test/fixtures/namespaced.rb +25 -0
- data/vendor/mustache/test/fixtures/nested_objects.mustache +17 -0
- data/vendor/mustache/test/fixtures/nested_objects.rb +35 -0
- data/vendor/mustache/test/fixtures/node.mustache +8 -0
- data/vendor/mustache/test/fixtures/partial_with_module.mustache +3 -0
- data/vendor/mustache/test/fixtures/partial_with_module.rb +37 -0
- data/vendor/mustache/test/fixtures/passenger.conf +5 -0
- data/vendor/mustache/test/fixtures/passenger.rb +27 -0
- data/vendor/mustache/test/fixtures/recursive.mustache +4 -0
- data/vendor/mustache/test/fixtures/recursive.rb +14 -0
- data/vendor/mustache/test/fixtures/simple.mustache +5 -0
- data/vendor/mustache/test/fixtures/simple.rb +26 -0
- data/vendor/mustache/test/fixtures/template_partial.mustache +2 -0
- data/vendor/mustache/test/fixtures/template_partial.rb +18 -0
- data/vendor/mustache/test/fixtures/template_partial.txt +4 -0
- data/vendor/mustache/test/fixtures/unescaped.mustache +1 -0
- data/vendor/mustache/test/fixtures/unescaped.rb +14 -0
- data/vendor/mustache/test/fixtures/utf8.mustache +3 -0
- data/vendor/mustache/test/fixtures/utf8_partial.mustache +1 -0
- data/vendor/mustache/test/helper.rb +7 -0
- data/vendor/mustache/test/mustache_test.rb +536 -0
- data/vendor/mustache/test/parser_test.rb +54 -0
- data/vendor/mustache/test/partial_test.rb +168 -0
- metadata +167 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'common_mob/erb'
|
|
2
|
+
require 'mustache'
|
|
3
|
+
|
|
4
|
+
module CommonMob
|
|
5
|
+
module Mustache
|
|
6
|
+
def render_mustache(src,variables)
|
|
7
|
+
::Mustache.render(src.read, variables)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module Template
|
|
12
|
+
include CommonMob::Mustache
|
|
13
|
+
include CommonMob::Erb
|
|
14
|
+
|
|
15
|
+
def render_template(src,variables)
|
|
16
|
+
if src.to_s[/\.mustache$/]
|
|
17
|
+
render_mustache(src,variables)
|
|
18
|
+
else
|
|
19
|
+
render_erb(src,variables)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'common_mob'
|
|
2
|
+
|
|
3
|
+
class Crontab < AngryMob::Target
|
|
4
|
+
include CommonMob::ShellHelper
|
|
5
|
+
include CommonMob::PatchHelper
|
|
6
|
+
|
|
7
|
+
default_action
|
|
8
|
+
def patch
|
|
9
|
+
if before_state[:changed]
|
|
10
|
+
sh("crontab -u #{user} -", :input => new_crontab).run
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def validate!
|
|
15
|
+
problem!("please specify a patch key as the default_object (crontab('key-something-unique'))") if default_object.blank?
|
|
16
|
+
problem!("please specify a crontab (:crontab => '* * * * * /bin/echo yay')" ) unless args.crontab?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def state
|
|
20
|
+
{
|
|
21
|
+
:changed => (new_crontab != crontab)
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
def new_crontab
|
|
27
|
+
@new_crontab ||= patch_string(crontab, args.crontab, :key => default_object)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def crontab
|
|
31
|
+
sh("crontab -l -u #{user}").to_s
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def user
|
|
35
|
+
args.user || 'root'
|
|
36
|
+
end
|
|
37
|
+
end
|
data/targets/extract.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'common_mob'
|
|
2
|
+
|
|
3
|
+
class Tarball < AngryMob::Target
|
|
4
|
+
include CommonMob::ShellHelper
|
|
5
|
+
|
|
6
|
+
default_action
|
|
7
|
+
def extract
|
|
8
|
+
cmd = "tar #{compression_opt}xf #{default_object}"
|
|
9
|
+
|
|
10
|
+
if !dest.blank?
|
|
11
|
+
sh("#{cmd} --strip 1 -C #{dest}").run
|
|
12
|
+
else
|
|
13
|
+
sh("#{cmd}").run
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def compression_opt
|
|
20
|
+
ext = default_object.to_s[/\.([^\.]+)$/,1].downcase
|
|
21
|
+
log "ext=#{ext}"
|
|
22
|
+
case ext
|
|
23
|
+
when 'gz'
|
|
24
|
+
'z'
|
|
25
|
+
when 'bz2'
|
|
26
|
+
'j'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def dest
|
|
31
|
+
args.dest || args.extract_to || args.to
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# no really good way to tell if we need to untar again...
|
|
35
|
+
def state
|
|
36
|
+
{
|
|
37
|
+
:rand => rand
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
end
|
data/targets/fetch.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'common_mob'
|
|
2
|
+
|
|
3
|
+
class Fetch < AngryMob::Target
|
|
4
|
+
include CommonMob::ShellHelper
|
|
5
|
+
include CommonMob::DigestHelper
|
|
6
|
+
|
|
7
|
+
default_action
|
|
8
|
+
def fetch
|
|
9
|
+
log "expected_sha=#{expected_sha}"
|
|
10
|
+
|
|
11
|
+
return if before_state[:exists] && (expected_sha && before_state[:sha] == expected_sha)
|
|
12
|
+
|
|
13
|
+
sh("curl #{args.src} -L -o #{default_object}".tapp, :cwd => args.cwd).run
|
|
14
|
+
|
|
15
|
+
if expected_sha && state[:sha] != expected_sha
|
|
16
|
+
raise "downloaded file's sha didn't match expected sha #{expected_sha} != #{state[:sha]}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def expected_sha
|
|
23
|
+
[ args.sha, args.sha256, args.sha512 ].find {|s| !s.blank?}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def state
|
|
27
|
+
new_sha = if !args.sha.blank?
|
|
28
|
+
sha(default_object)
|
|
29
|
+
elsif !args.sha256.blank?
|
|
30
|
+
sha256(default_object)
|
|
31
|
+
elsif !args.sha512.blank?
|
|
32
|
+
sha512(default_object)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
{
|
|
36
|
+
:exists => exist?,
|
|
37
|
+
:sha => new_sha
|
|
38
|
+
}
|
|
39
|
+
end
|
|
40
|
+
end
|
data/targets/files.rb
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
require 'common_mob'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
|
|
4
|
+
module FileHelpers
|
|
5
|
+
include CommonMob::DigestHelper
|
|
6
|
+
include CommonMob::ShellHelper
|
|
7
|
+
include CommonMob::PatchHelper
|
|
8
|
+
include CommonMob::FileHelper
|
|
9
|
+
include CommonMob::Template
|
|
10
|
+
|
|
11
|
+
def set_file_ownership
|
|
12
|
+
args.owner ||= args.user
|
|
13
|
+
args.group ||= args.user
|
|
14
|
+
|
|
15
|
+
set_file_attrs(default_object, args.owner, args.group, args.mode)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DirTarget < AngryMob::Target
|
|
21
|
+
nickname 'dir'
|
|
22
|
+
|
|
23
|
+
include FileHelpers
|
|
24
|
+
default_action
|
|
25
|
+
def create
|
|
26
|
+
begin
|
|
27
|
+
mkpath unless exist?
|
|
28
|
+
set_file_ownership
|
|
29
|
+
rescue Errno::EEXIST
|
|
30
|
+
# *ulp*
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def delete
|
|
35
|
+
FileUtils.rm_rf(default_object) if exist?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
protected
|
|
39
|
+
|
|
40
|
+
def state
|
|
41
|
+
{
|
|
42
|
+
:exists => exist?
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def default_object
|
|
47
|
+
Pathname(super)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def validate!
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
class FileTarget < AngryMob::Target
|
|
55
|
+
nickname 'file'
|
|
56
|
+
include FileHelpers
|
|
57
|
+
|
|
58
|
+
default_action
|
|
59
|
+
def create
|
|
60
|
+
if args.src
|
|
61
|
+
copy_resource resource(args.src)
|
|
62
|
+
elsif args.string
|
|
63
|
+
create_string
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
set_file_ownership
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def delete
|
|
70
|
+
if exist?
|
|
71
|
+
log "deleting #{default_object}"
|
|
72
|
+
unlink
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
protected
|
|
77
|
+
|
|
78
|
+
def default_object
|
|
79
|
+
Pathname(super)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def state
|
|
83
|
+
{
|
|
84
|
+
:sha512 => sha512(default_object)
|
|
85
|
+
}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def src
|
|
89
|
+
resource(args.src)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def validate!
|
|
93
|
+
if !args.actions.include?('delete')
|
|
94
|
+
if args.src?
|
|
95
|
+
problem!(":src #{src} doesn't exist" ) unless src.exist?
|
|
96
|
+
elsif !args.src? && !args.string?
|
|
97
|
+
problem!("please specify one of :src or :string")
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def copy_resource(src)
|
|
104
|
+
if sha512(src) != before_state[:sha512]
|
|
105
|
+
log "input string different from file contents, overwriting"
|
|
106
|
+
src.cp_to(default_object)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def create_string
|
|
111
|
+
if sha512(args.string) != before_state[:sha512]
|
|
112
|
+
log "input string different from file contents, overwriting"
|
|
113
|
+
default_object.open('w') {|f| f << args.string}
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# symlink("from/path", :to => "to/path")
|
|
120
|
+
#
|
|
121
|
+
class Symlink < AngryMob::Target
|
|
122
|
+
include FileHelpers
|
|
123
|
+
|
|
124
|
+
default_action
|
|
125
|
+
def create
|
|
126
|
+
if before_state[:points_to] != to
|
|
127
|
+
log "linking #{from} -> #{to}"
|
|
128
|
+
sh("ln -nfs #{to} #{from}").run
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
ensure_points_to_correct_file!
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def delete
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
protected
|
|
138
|
+
|
|
139
|
+
def ensure_points_to_correct_file!
|
|
140
|
+
raise "symlink doesn't point #{from} -> #{to} after action" unless state[:points_to] == to
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def from
|
|
144
|
+
Pathname(default_object).expand_path
|
|
145
|
+
end
|
|
146
|
+
def to
|
|
147
|
+
Pathname(args.to).expand_path.realpath
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def state
|
|
151
|
+
points_to = begin
|
|
152
|
+
from.readlink
|
|
153
|
+
rescue Errno::ENOENT,Errno::EINVAL
|
|
154
|
+
nil
|
|
155
|
+
end
|
|
156
|
+
{
|
|
157
|
+
:points_to => points_to
|
|
158
|
+
}
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def validate!
|
|
162
|
+
problem!("file we're linking to doesn't exist") unless to.exist? # is this a real problem?
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class Template < AngryMob::Target
|
|
168
|
+
include FileHelpers
|
|
169
|
+
|
|
170
|
+
default_action
|
|
171
|
+
def create
|
|
172
|
+
new_content = render_template(src,variables)
|
|
173
|
+
|
|
174
|
+
if sha512(new_content) != before_state[:sha512]
|
|
175
|
+
log "template has changed, overwriting"
|
|
176
|
+
|
|
177
|
+
backup_file(default_object)
|
|
178
|
+
|
|
179
|
+
default_object.open('w') {|f| f << new_content}
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
set_file_ownership
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
protected
|
|
186
|
+
|
|
187
|
+
def default_object
|
|
188
|
+
Pathname(super)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def src
|
|
192
|
+
resource(args.src)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def variables
|
|
196
|
+
(args.variables || args.vars || {}).update(:node => node)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def state
|
|
200
|
+
{
|
|
201
|
+
:sha512 => sha512(default_object)
|
|
202
|
+
}
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def validate!
|
|
206
|
+
super
|
|
207
|
+
problem!(":src #{src} doesn't exist" ) unless src.exist?
|
|
208
|
+
problem!(":src #{src} isn't a file" ) unless src.file?
|
|
209
|
+
problem!(":src #{src} isn't readable") unless src.readable?
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
class Patch < AngryMob::Target
|
|
214
|
+
include FileHelpers
|
|
215
|
+
|
|
216
|
+
default_action
|
|
217
|
+
def patch
|
|
218
|
+
log "patchhing"
|
|
219
|
+
|
|
220
|
+
patched = patch_file(default_object)
|
|
221
|
+
|
|
222
|
+
if before_state[:sha512] != sha512(patched)
|
|
223
|
+
log "patch has changed, overwriting"
|
|
224
|
+
|
|
225
|
+
backup_file(default_object)
|
|
226
|
+
default_object.open('w') {|f| f << patched}
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def unpatch
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
protected
|
|
234
|
+
|
|
235
|
+
def default_object
|
|
236
|
+
Pathname(super)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def state
|
|
240
|
+
{
|
|
241
|
+
:sha512 => sha512(default_object)
|
|
242
|
+
}
|
|
243
|
+
end
|
|
244
|
+
end
|
data/targets/git.rb
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'common_mob'
|
|
2
|
+
|
|
3
|
+
class Git < AngryMob::Target
|
|
4
|
+
include CommonMob::ShellHelper
|
|
5
|
+
|
|
6
|
+
default_action
|
|
7
|
+
def sync
|
|
8
|
+
if is_git?
|
|
9
|
+
update
|
|
10
|
+
else
|
|
11
|
+
create
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def update
|
|
16
|
+
log "updating"
|
|
17
|
+
|
|
18
|
+
set_repo
|
|
19
|
+
|
|
20
|
+
git("fetch").run
|
|
21
|
+
git("reset --hard #{ref}").run
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def create
|
|
25
|
+
log "cloning"
|
|
26
|
+
git("clone -o #{remote} #{args.repo} #{default_object}", :cwd => default_object.parent).run
|
|
27
|
+
git("reset --hard #{ref}").run
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
def changed
|
|
33
|
+
unless FalseClass === args.enable_submodules
|
|
34
|
+
git("submodule update --init").ok?
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def is_git?
|
|
39
|
+
exist? && git('rev-parse --is-inside-work-tree').to_s == "true"
|
|
40
|
+
rescue CommonMob::ShellError
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def git(*cmd)
|
|
44
|
+
cmd.options[:cwd] ||= default_object
|
|
45
|
+
cmd.options[:as] = args.as if args.as?
|
|
46
|
+
cmd[0] = "git #{cmd.first}"
|
|
47
|
+
sh(*cmd)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def set_repo
|
|
51
|
+
git("config remote.#{remote}.url #{args.repo}").run
|
|
52
|
+
# TODO write merge spec
|
|
53
|
+
# git("config branch.master.remote origin").run
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def default_object
|
|
57
|
+
args.default_object.pathname
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def remote
|
|
61
|
+
'origin'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def ref
|
|
65
|
+
ref = args.ref || args.branch || 'master'
|
|
66
|
+
"#{remote}/#{ref}"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def revision
|
|
70
|
+
exist? && git("rev-parse HEAD").to_s
|
|
71
|
+
rescue CommonMob::ShellError
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def state
|
|
75
|
+
{
|
|
76
|
+
:revision => revision
|
|
77
|
+
}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def validate!
|
|
81
|
+
problem!("no git repo defined") unless args.repo?
|
|
82
|
+
problem!("no git path defined") unless args.default_object?
|
|
83
|
+
end
|
|
84
|
+
end
|