mortar 0.10.1 → 0.11.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.
- 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
|