mortar 0.10.1 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mortar/command/plugins.rb +9 -3
- data/lib/mortar/local/pig.rb +66 -10
- data/lib/mortar/plugin.rb +18 -3
- data/lib/mortar/templates/script/runpig.sh +4 -4
- data/lib/mortar/version.rb +1 -1
- data/spec/mortar/command/local_spec.rb +4 -2
- data/spec/mortar/local/pig_spec.rb +15 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 890d6f0f6d9f9171abb6ebafd62d23c70912eca5
|
4
|
+
data.tar.gz: 89ff5f77688e7e4b49d1c5215f3e7186c0f22759
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 924bc9cafb357195565616fbf77bc91b8aa3b58b9271ff09d7365ad44f2c8e8ebef718180c2d6df77bf7280ea3c1834159d555f52effa5d419a06cff136946a2
|
7
|
+
data.tar.gz: 63812c555e2a84345d3d1b82779dcaac9a4c4d67a18004cfb38e43c17a8263944f1c8bc8a4b04567d2248b313a4dc35fa65147b1b3c1117e5dfda8fe5b93faf7
|
@@ -31,11 +31,13 @@ module Mortar::Command
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
# plugins:install
|
34
|
+
# plugins:install GIT_URL
|
35
35
|
#
|
36
36
|
# install a plugin
|
37
37
|
#
|
38
|
-
#
|
38
|
+
# -b, --branchname BRANCHNAME # Install plugin from a specific branch.
|
39
|
+
#
|
40
|
+
# Examples:
|
39
41
|
#
|
40
42
|
# $ mortar plugins:install https://github.com/mortardata/watchtower.git
|
41
43
|
# Installing watchtower... done
|
@@ -47,7 +49,11 @@ module Mortar::Command
|
|
47
49
|
action("Installing #{plugin.name}") do
|
48
50
|
begin
|
49
51
|
record_usage("plugin_install", plugin.name)
|
50
|
-
|
52
|
+
if options[:branchname]
|
53
|
+
plugin.install(options[:branchname])
|
54
|
+
else
|
55
|
+
plugin.install
|
56
|
+
end
|
51
57
|
Mortar::Plugin.load_plugin(plugin.name)
|
52
58
|
rescue StandardError => e
|
53
59
|
error e.message
|
data/lib/mortar/local/pig.rb
CHANGED
@@ -23,8 +23,17 @@ class Mortar::Local::Pig
|
|
23
23
|
include Mortar::Local::InstallUtil
|
24
24
|
|
25
25
|
PIG_LOG_FORMAT = "humanreadable"
|
26
|
-
PIG_TGZ_NAME = "pig.
|
27
|
-
PIG_TGZ_DEFAULT_URL_PATH = "resource/
|
26
|
+
PIG_TGZ_NAME = "pig-0.9.tar.gz"
|
27
|
+
PIG_TGZ_DEFAULT_URL_PATH = "resource/pig_0_9"
|
28
|
+
LIB_TGZ_NAME = "lib-common.tar.gz"
|
29
|
+
PIG_COMMON_LIB_URL_PATH = "resource/lib_common"
|
30
|
+
|
31
|
+
|
32
|
+
#This needs to be defined for watchtower.
|
33
|
+
DEFAULT_PIGOPTS_FILES = %w(
|
34
|
+
/lib-common/conf/pig-hawk-global.properties
|
35
|
+
/lib-common/conf/pig-cli-local-dev.properties
|
36
|
+
)
|
28
37
|
|
29
38
|
# Tempfile objects have a hook to delete the file when the object is
|
30
39
|
# destroyed by the garbage collector. In practice this means that a
|
@@ -74,7 +83,11 @@ class Mortar::Local::Pig
|
|
74
83
|
end
|
75
84
|
|
76
85
|
def pig_directory
|
77
|
-
return File.join(local_install_directory, "pig")
|
86
|
+
return File.join(local_install_directory, "pig-0.9")
|
87
|
+
end
|
88
|
+
|
89
|
+
def lib_directory
|
90
|
+
return File.join(local_install_directory, "lib-common")
|
78
91
|
end
|
79
92
|
|
80
93
|
def pig_archive_url
|
@@ -83,31 +96,55 @@ class Mortar::Local::Pig
|
|
83
96
|
ENV.fetch('PIG_DISTRO_URL', default_url)
|
84
97
|
end
|
85
98
|
|
99
|
+
def lib_archive_url
|
100
|
+
full_host = (host =~ /^http/) ? host : "https://api.#{host}"
|
101
|
+
default_url = full_host + "/" + PIG_COMMON_LIB_URL_PATH
|
102
|
+
ENV.fetch('COMMON_LIB_DISTRO_URL', default_url)
|
103
|
+
end
|
104
|
+
|
86
105
|
# Determines if a pig install needs to occur, true if no pig install present
|
87
106
|
def should_do_pig_install?
|
88
107
|
not (File.exists?(pig_directory))
|
89
108
|
end
|
90
109
|
|
110
|
+
def should_do_lib_install?
|
111
|
+
not (File.exists?(lib_directory))
|
112
|
+
end
|
113
|
+
|
91
114
|
# Determines if a pig install needs to occur, true if server side
|
92
115
|
# pig tgz is newer than date of the existing install
|
93
116
|
def should_do_pig_update?
|
94
|
-
return is_newer_version('pig', pig_archive_url)
|
117
|
+
return is_newer_version('pig-0.9', pig_archive_url)
|
118
|
+
end
|
119
|
+
|
120
|
+
def should_do_lib_update?
|
121
|
+
return is_newer_version('lib-common', lib_archive_url)
|
95
122
|
end
|
96
123
|
|
97
124
|
def install_or_update()
|
98
125
|
if should_do_pig_install?
|
99
126
|
action "Installing pig to #{local_install_directory_name}" do
|
100
|
-
|
127
|
+
install_pig()
|
101
128
|
end
|
102
129
|
elsif should_do_pig_update?
|
103
130
|
action "Updating to latest pig in #{local_install_directory_name}" do
|
104
|
-
|
131
|
+
install_pig()
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
if should_do_lib_install?
|
136
|
+
action "Installing pig dependencies to #{local_install_directory_name}" do
|
137
|
+
install_lib()
|
138
|
+
end
|
139
|
+
elsif should_do_lib_update?
|
140
|
+
action "Updating to latest pig dependencies in #{local_install_directory_name}" do
|
141
|
+
install_lib()
|
105
142
|
end
|
106
143
|
end
|
107
144
|
end
|
108
145
|
|
109
146
|
# Installs pig for this project if it is not already present
|
110
|
-
def
|
147
|
+
def install_pig
|
111
148
|
FileUtils.mkdir_p(local_install_directory)
|
112
149
|
local_tgz = File.join(local_install_directory, PIG_TGZ_NAME)
|
113
150
|
download_file(pig_archive_url, local_tgz)
|
@@ -118,7 +155,17 @@ class Mortar::Local::Pig
|
|
118
155
|
FileUtils.chmod(0755, command)
|
119
156
|
|
120
157
|
File.delete(local_tgz)
|
121
|
-
note_install("pig")
|
158
|
+
note_install("pig-0.9")
|
159
|
+
end
|
160
|
+
|
161
|
+
def install_lib
|
162
|
+
FileUtils.mkdir_p(local_install_directory)
|
163
|
+
local_tgz = File.join(local_install_directory, LIB_TGZ_NAME)
|
164
|
+
download_file(lib_archive_url, local_tgz)
|
165
|
+
extract_tgz(local_tgz, local_install_directory)
|
166
|
+
|
167
|
+
File.delete(local_tgz)
|
168
|
+
note_install("lib-common")
|
122
169
|
end
|
123
170
|
|
124
171
|
def validate_script(pig_script, pig_parameters)
|
@@ -275,13 +322,22 @@ class Mortar::Local::Pig
|
|
275
322
|
File.expand_path("../../templates/script/runpig.sh", __FILE__)
|
276
323
|
end
|
277
324
|
|
325
|
+
def template_params_classpath
|
326
|
+
"#{pig_directory}/*:#{pig_directory}/lib-local/*:#{pig_directory}/lib-pig/*:#{pig_directory}/lib-cluster/*:#{lib_directory}/lib-pig/*:#{lib_directory}/lib-cluster/*:#{jython_directory}/jython.jar:#{lib_directory}/conf/jets3t.properties"
|
327
|
+
end
|
328
|
+
|
329
|
+
def log4j_conf
|
330
|
+
"#{lib_directory}/conf/log4j-cli-local-dev.properties"
|
331
|
+
end
|
332
|
+
|
278
333
|
# Parameters necessary for rendering the bash script template
|
279
334
|
def pig_command_script_template_parameters(cmd, pig_parameters)
|
280
335
|
template_params = {}
|
281
336
|
template_params['pig_params_file'] = make_pig_param_file(pig_parameters)
|
282
337
|
template_params['pig_home'] = pig_directory
|
283
|
-
template_params['pig_classpath'] = "#{pig_directory}/lib-pig/*:#{jython_directory}/jython.jar"
|
284
|
-
template_params['classpath'] =
|
338
|
+
template_params['pig_classpath'] = "#{pig_directory}/lib-local/*:#{pig_directory}/lib-pig/*:#{pig_directory}/lib-cluster/*:#{lib_directory}/lib-pig/*:#{lib_directory}/lib-cluster/*:#{jython_directory}/jython.jar"
|
339
|
+
template_params['classpath'] = template_params_classpath
|
340
|
+
template_params['log4j_conf'] = log4j_conf
|
285
341
|
template_params['project_home'] = File.expand_path("..", local_install_directory)
|
286
342
|
template_params['local_install_dir'] = local_install_directory
|
287
343
|
template_params['pig_sub_command'] = cmd
|
data/lib/mortar/plugin.rb
CHANGED
@@ -151,20 +151,35 @@ ERROR
|
|
151
151
|
"#{self.class.directory}/#{name}"
|
152
152
|
end
|
153
153
|
|
154
|
-
def install
|
154
|
+
def install(branch = nil)
|
155
155
|
if File.directory?(path)
|
156
156
|
uninstall
|
157
157
|
end
|
158
158
|
FileUtils.mkdir_p(self.class.directory)
|
159
159
|
Dir.chdir(self.class.directory) do
|
160
|
-
|
161
|
-
|
160
|
+
begin
|
161
|
+
git.git("clone #{uri}", check_success=true, check_git_directory=false)
|
162
|
+
rescue Mortar::Git::GitError
|
162
163
|
FileUtils.rm_rf path
|
163
164
|
raise Mortar::Plugin::ErrorInstallingPlugin, <<-ERROR
|
164
165
|
Unable to install plugin #{name}.
|
165
166
|
Please check the URL and try again.
|
166
167
|
ERROR
|
167
168
|
end
|
169
|
+
|
170
|
+
if !!branch
|
171
|
+
Dir.chdir(name) do
|
172
|
+
begin
|
173
|
+
git.git("checkout #{branch}", check_success=true, check_git_directory=true)
|
174
|
+
rescue Mortar::Git::GitError
|
175
|
+
FileUtils.rm_rf path
|
176
|
+
raise Mortar::Plugin::ErrorInstallingPlugin, <<-ERROR
|
177
|
+
Unable to checkout branch #{branch} for plugin #{name}.
|
178
|
+
Please check the URL and branch and try again.
|
179
|
+
ERROR
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
168
183
|
end
|
169
184
|
install_dependencies
|
170
185
|
return true
|
@@ -15,9 +15,9 @@ cd <%= @project_home %>/pigscripts
|
|
15
15
|
source <%= @local_install_dir %>/pythonenv/bin/activate
|
16
16
|
|
17
17
|
# Run Pig
|
18
|
-
<%= @local_install_dir %>/pig/bin/pig -exectype local \
|
19
|
-
-log4jconf <%= @
|
20
|
-
-propertyFile <%= @local_install_dir %>/
|
21
|
-
-propertyFile <%= @local_install_dir %>/
|
18
|
+
<%= @local_install_dir %>/pig-0.9/bin/pig -exectype local \
|
19
|
+
-log4jconf <%= @log4j_conf %> \
|
20
|
+
-propertyFile <%= @local_install_dir %>/lib-common/conf/pig-hawk-global.properties \
|
21
|
+
-propertyFile <%= @local_install_dir %>/lib-common/conf/pig-cli-local-dev.properties \
|
22
22
|
-param_file <%= @pig_params_file %> \
|
23
23
|
<%= @pig_sub_command %>
|
data/lib/mortar/version.rb
CHANGED
@@ -152,7 +152,8 @@ PARAMS
|
|
152
152
|
stub(j).check_install.returns(true)
|
153
153
|
end
|
154
154
|
any_instance_of(Mortar::Local::Pig) do |j|
|
155
|
-
stub(j).
|
155
|
+
stub(j).install_pig.returns(true)
|
156
|
+
stub(j).install_lib.returns(true)
|
156
157
|
end
|
157
158
|
any_instance_of(Mortar::Local::Python) do |j|
|
158
159
|
stub(j).check_or_install.returns(false)
|
@@ -166,7 +167,8 @@ PARAMS
|
|
166
167
|
mock(j).check_install.returns(true)
|
167
168
|
end
|
168
169
|
any_instance_of(Mortar::Local::Pig) do |j|
|
169
|
-
mock(j).
|
170
|
+
mock(j).install_pig.returns(true)
|
171
|
+
stub(j).install_lib.returns(true)
|
170
172
|
end
|
171
173
|
any_instance_of(Mortar::Local::Python) do |j|
|
172
174
|
mock(j).check_or_install.returns(true)
|
@@ -41,10 +41,10 @@ module Mortar::Local
|
|
41
41
|
FileUtils.touch(local_pig_archive)
|
42
42
|
end
|
43
43
|
mock(pig).extract_tgz(local_pig_archive, pig.local_install_directory)
|
44
|
-
mock(pig).note_install("pig")
|
44
|
+
mock(pig).note_install("pig-0.9")
|
45
45
|
begin
|
46
46
|
previous_stdout, $stdout = $stdout, StringIO.new
|
47
|
-
pig.
|
47
|
+
pig.install_pig
|
48
48
|
ensure
|
49
49
|
$stdout = previous_stdout
|
50
50
|
end
|
@@ -60,18 +60,25 @@ module Mortar::Local
|
|
60
60
|
pig = Mortar::Local::Pig.new
|
61
61
|
mock(pig).should_do_pig_install?.returns(false)
|
62
62
|
mock(pig).should_do_pig_update?.returns(false)
|
63
|
+
mock(pig).should_do_lib_install?.returns(false)
|
64
|
+
mock(pig).should_do_lib_update?.returns(false)
|
63
65
|
FakeFS do
|
64
66
|
FileUtils.mkdir_p(File.dirname(pig.local_install_directory))
|
65
67
|
FileUtils.rm_rf(pig.local_install_directory, :force => true)
|
66
68
|
pig.install_or_update
|
67
|
-
expect(File.exists?(pig.
|
69
|
+
expect(File.exists?(pig.pig_directory)).to be_false
|
70
|
+
expect(File.exists?(pig.lib_directory)).to be_false
|
71
|
+
|
68
72
|
end
|
69
73
|
end
|
70
74
|
|
71
75
|
it "does install if none has been done before" do
|
72
76
|
pig = Mortar::Local::Pig.new
|
73
77
|
mock(pig).should_do_pig_install?.returns(true)
|
74
|
-
mock(pig).
|
78
|
+
mock(pig).should_do_lib_install?.returns(true)
|
79
|
+
|
80
|
+
mock(pig).install_pig
|
81
|
+
mock(pig).install_lib
|
75
82
|
capture_stdout do
|
76
83
|
pig.install_or_update
|
77
84
|
end
|
@@ -81,7 +88,10 @@ module Mortar::Local
|
|
81
88
|
pig = Mortar::Local::Pig.new
|
82
89
|
mock(pig).should_do_pig_install?.returns(false)
|
83
90
|
mock(pig).should_do_pig_update?.returns(true)
|
84
|
-
mock(pig).
|
91
|
+
mock(pig).should_do_lib_install?.returns(false)
|
92
|
+
mock(pig).should_do_lib_update?.returns(true)
|
93
|
+
mock(pig).install_pig
|
94
|
+
mock(pig).install_lib
|
85
95
|
capture_stdout do
|
86
96
|
pig.install_or_update
|
87
97
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mortar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mortar Data
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|