maestro_shell 0.0.6 → 0.0.7
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/util/shell.rb +17 -22
- data/lib/util/version.rb +1 -1
- data/spec/shell_spec.rb +10 -3
- 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: dc3c43c91ae1ad728a326390268aa61924c77521
|
4
|
+
data.tar.gz: bcc3c16f0f7d1309e0b51dabeccf1698bd9f9d92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15b0438163743d7540034ffc2375da502e7e0f31d573ae3e89896a2d5ff5efea96726c16bfd0a7de4779082db4b3b7e78520cb1ba9ba674163250c1e8f673013
|
7
|
+
data.tar.gz: 5ff0317c41ceca677029b8dbcd70669efa64e8394b64419244c2514fabf1998ef43307d882285500180b46fd7a13de482b520f969525463bd2d91d2dfa003987
|
data/lib/util/shell.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Copyright 2011 (c) MaestroDev. All rights reserved.
|
2
2
|
|
3
|
+
require 'pty'
|
3
4
|
require 'tempfile'
|
4
5
|
require 'rbconfig'
|
5
6
|
|
@@ -32,7 +33,6 @@ module Maestro
|
|
32
33
|
COMMAND_SEPARATOR = '&&' # IS_WINDOWS ? '&&' : '&&'
|
33
34
|
SCRIPT_EXTENSION = IS_WINDOWS ? '.bat' : '.shell'
|
34
35
|
SHELL_EXECUTABLE = IS_WINDOWS ? '' : 'bash '
|
35
|
-
COMMAND_SUFFIX = IS_WINDOWS ? '' : ' 2>&1'
|
36
36
|
|
37
37
|
def Shell.unset_env_variable(var)
|
38
38
|
IS_WINDOWS ? "set #{var}=" : "unset #{var}"
|
@@ -76,31 +76,26 @@ module Maestro
|
|
76
76
|
# +err+ Boolean True if line is from stderr
|
77
77
|
def run_script_with_delegate(delegate, on_output)
|
78
78
|
File.open(@output_file.path, 'a') do |out_file|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
readers.delete fd
|
89
|
-
else
|
90
|
-
|
91
|
-
text = fd.readpartial(1024)
|
92
|
-
out_file.write(text)
|
93
|
-
|
94
|
-
if delegate && on_output
|
95
|
-
delegate.send(on_output, text)
|
96
|
-
end
|
79
|
+
sleep 0.1
|
80
|
+
status = PTY.spawn(@command_line) do |master, slave, pid|
|
81
|
+
begin
|
82
|
+
while !slave.eof?
|
83
|
+
text = slave.readpartial(1024).gsub(/\r/, '')
|
84
|
+
out_file.write(text)
|
85
|
+
|
86
|
+
if delegate && on_output
|
87
|
+
delegate.send(on_output, text)
|
97
88
|
end
|
98
89
|
end
|
90
|
+
rescue Exception => e
|
91
|
+
Maestro.log.warn "Got Exception in spawn #{e} #{e.class}"
|
99
92
|
end
|
93
|
+
|
94
|
+
Process.wait(pid)
|
100
95
|
end
|
101
|
-
end
|
102
96
|
|
103
|
-
|
97
|
+
@exit_code = ExitCode.new($?)
|
98
|
+
end
|
104
99
|
|
105
100
|
return @exit_code
|
106
101
|
end
|
@@ -117,7 +112,7 @@ module Maestro
|
|
117
112
|
private
|
118
113
|
|
119
114
|
def get_command(path)
|
120
|
-
@command_line = "#{SHELL_EXECUTABLE}#{path}
|
115
|
+
@command_line = "#{SHELL_EXECUTABLE}#{path}"
|
121
116
|
@command_line
|
122
117
|
end
|
123
118
|
|
data/lib/util/version.rb
CHANGED
data/spec/shell_spec.rb
CHANGED
@@ -62,7 +62,13 @@ describe Maestro::Util::Shell do
|
|
62
62
|
path = subject.create_script "blah hello"
|
63
63
|
|
64
64
|
subject.run_script.success?.should be_false
|
65
|
-
subject.
|
65
|
+
subject.output.should include("blah: command not found")
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should emit stdout and stderr in order' do
|
69
|
+
subject.create_script("echo stdout1\nsleep 1\necho stderr1 >&2\nsleep 1\necho stdout2\nsleep 1\necho stderr2 >&2\nsleep 1\necho stdout3")
|
70
|
+
subject.run_script.success?.should be_true
|
71
|
+
subject.to_s.should eql("stdout1\nstderr1\nstdout2\nstderr2\nstdout3\n")
|
66
72
|
end
|
67
73
|
|
68
74
|
it 'should run with with export inline' do
|
@@ -86,7 +92,8 @@ CMD
|
|
86
92
|
path = subject.create_script command
|
87
93
|
|
88
94
|
subject.run_script.success?.should be_true
|
89
|
-
|
95
|
+
# Strips \r
|
96
|
+
subject.to_s.should eql("hello\ngoodbye\n")
|
90
97
|
end
|
91
98
|
|
92
99
|
it 'should create run and return result in on call' do
|
@@ -102,7 +109,7 @@ CMD
|
|
102
109
|
File.chmod(0777, temp.path)
|
103
110
|
command =<<-CMD
|
104
111
|
#{Maestro::Util::Shell::ENV_EXPORT_COMMAND} BLAH=blah; echo $BLAH
|
105
|
-
#{temp.path}
|
112
|
+
#{Maestro::Util::Shell::SHELL_EXECUTABLE} #{temp.path}
|
106
113
|
CMD
|
107
114
|
|
108
115
|
path = subject.create_script command
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maestro_shell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doug Henderson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logging
|