kommando 0.0.4 → 0.0.5
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/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/bin/reinstall +1 -1
- data/bin/release +29 -0
- data/bin/version +3 -0
- data/lib/kommando.rb +46 -14
- data/lib/kommando/version.rb +1 -1
- data/tests/forever_true.rb +12 -0
- data/tests/forever_uptime.rb +21 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e48c9ee88deb15984338770bcb3f88df16233c55
|
4
|
+
data.tar.gz: 1734e1fbce11cb305053d2a75c193a92ce71889d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fdc4301a64924c7bd60e2555a40c27a83849c47b674deb717017cb9c873aa2693cc790332545cf39a3e818af913190b59a4de903ee2869902ea1a6470bede89
|
7
|
+
data.tar.gz: b05437941a9ec740fe09a8aac78fa8b67ee3ed05f150b88e1ddb941e0308662c96fec308195146f33bac1f85fade218faad6ad3ac702eb21be9645fdc8061123
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -28,7 +28,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
28
28
|
|
29
29
|
`bin/e2e` runs all Kommando files in `examples/` with `kommando`.
|
30
30
|
|
31
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bin/release`, which will run all tests, create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
32
|
|
33
33
|
## Contributing
|
34
34
|
|
data/bin/reinstall
CHANGED
data/bin/release
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
git diff-index --quiet --cached HEAD
|
3
|
+
if [[ $? != 0 ]]; then
|
4
|
+
echo "git dirty."
|
5
|
+
exit 1
|
6
|
+
fi
|
7
|
+
|
8
|
+
set -e
|
9
|
+
|
10
|
+
rake
|
11
|
+
bin/e2e
|
12
|
+
bin/stress 2 10
|
13
|
+
|
14
|
+
echo
|
15
|
+
head CHANGELOG.md
|
16
|
+
echo
|
17
|
+
echo "Changelog ok?"
|
18
|
+
read
|
19
|
+
|
20
|
+
bin/version
|
21
|
+
echo "Version ok?"
|
22
|
+
read
|
23
|
+
|
24
|
+
echo "Release to rubygems?"
|
25
|
+
read
|
26
|
+
echo "Sure?"
|
27
|
+
read
|
28
|
+
echo "Double sure?"
|
29
|
+
bundle exec rake release
|
data/bin/version
ADDED
data/lib/kommando.rb
CHANGED
@@ -7,6 +7,23 @@ require_relative "kommando/buffer"
|
|
7
7
|
|
8
8
|
class Kommando
|
9
9
|
|
10
|
+
# http://stackoverflow.com/a/7263243
|
11
|
+
module SafePTY
|
12
|
+
def self.spawn command, *args, &block
|
13
|
+
|
14
|
+
PTY.spawn(command, *args) do |r,w,p|
|
15
|
+
begin
|
16
|
+
yield r,w,p
|
17
|
+
rescue Errno::EIO
|
18
|
+
ensure
|
19
|
+
Process.wait p
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
$?.exitstatus
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
10
27
|
def initialize(cmd, opts={})
|
11
28
|
@cmd = cmd
|
12
29
|
@stdout = Buffer.new
|
@@ -21,8 +38,12 @@ class Kommando
|
|
21
38
|
elsif opts[:timeout].class == Fixnum
|
22
39
|
opts[:timeout].to_f
|
23
40
|
end
|
41
|
+
@thread_did_timeout = nil
|
24
42
|
|
43
|
+
@code = nil
|
25
44
|
@executed = false
|
45
|
+
|
46
|
+
@retry = opts[:retry] == true
|
26
47
|
end
|
27
48
|
|
28
49
|
def run
|
@@ -31,22 +52,37 @@ class Kommando
|
|
31
52
|
|
32
53
|
command, *args = @cmd.split " "
|
33
54
|
begin
|
34
|
-
|
35
|
-
|
55
|
+
exitstatus = SafePTY.spawn(command, *args) do |stdout, stdin, pid|
|
56
|
+
if @retry && stdout.eof?
|
57
|
+
@executed = false
|
58
|
+
return run
|
59
|
+
end
|
60
|
+
|
61
|
+
if @output_file
|
62
|
+
stdout_file = File.open @output_file, 'w'
|
63
|
+
stdout_file.sync = true
|
64
|
+
end
|
36
65
|
|
37
66
|
Thread.abort_on_exception = true
|
38
67
|
thread_stdout = Thread.new do
|
39
68
|
while true do
|
40
69
|
break if stdout.eof?
|
41
70
|
|
42
|
-
c =
|
71
|
+
c = nil
|
72
|
+
begin
|
73
|
+
Timeout.timeout(0.1) do
|
74
|
+
c = stdout.getc
|
75
|
+
end
|
76
|
+
rescue Timeout::Error
|
77
|
+
# sometimes it just hangs.
|
78
|
+
end
|
79
|
+
|
43
80
|
@stdout.append c if c
|
44
81
|
print c if @output_stdout
|
45
82
|
stdout_file.write c if @output_file
|
46
83
|
end
|
47
84
|
end
|
48
85
|
|
49
|
-
thread_did_timeout = nil
|
50
86
|
if @timeout
|
51
87
|
begin
|
52
88
|
Timeout.timeout(@timeout) do
|
@@ -54,23 +90,19 @@ class Kommando
|
|
54
90
|
end
|
55
91
|
rescue Timeout::Error
|
56
92
|
Process.kill('KILL', pid)
|
57
|
-
thread_did_timeout = true
|
93
|
+
@thread_did_timeout = true
|
58
94
|
end
|
59
95
|
else
|
60
96
|
thread_stdout.join
|
61
97
|
end
|
62
98
|
|
63
99
|
stdout_file.close if @output_file
|
100
|
+
end
|
64
101
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
1
|
70
|
-
else
|
71
|
-
$?.exitstatus
|
72
|
-
end
|
73
|
-
|
102
|
+
@code = if @thread_did_timeout
|
103
|
+
1
|
104
|
+
else
|
105
|
+
exitstatus
|
74
106
|
end
|
75
107
|
rescue RuntimeError => ex
|
76
108
|
if ex.message == "can't get Master/Slave device"
|
data/lib/kommando/version.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
require "./lib/kommando"
|
2
|
+
|
3
|
+
puts "Running forever..."
|
4
|
+
|
5
|
+
iterations = 0
|
6
|
+
while true do
|
7
|
+
k = Kommando.new "uptime", {
|
8
|
+
retry: true # TODO: make this pass without true
|
9
|
+
}
|
10
|
+
k.run
|
11
|
+
|
12
|
+
unless k.out.size > 60
|
13
|
+
puts k.out
|
14
|
+
raise "uptime output doesn't have enough content"
|
15
|
+
end
|
16
|
+
|
17
|
+
iterations += 1
|
18
|
+
if iterations % 100 == 0
|
19
|
+
print "."
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kommando
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matti Paksula
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-05-
|
11
|
+
date: 2016-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -100,8 +100,10 @@ files:
|
|
100
100
|
- bin/console
|
101
101
|
- bin/e2e
|
102
102
|
- bin/reinstall
|
103
|
+
- bin/release
|
103
104
|
- bin/setup
|
104
105
|
- bin/stress
|
106
|
+
- bin/version
|
105
107
|
- examples/exit.rb
|
106
108
|
- examples/live_output.rb
|
107
109
|
- examples/ping.rb
|
@@ -113,6 +115,8 @@ files:
|
|
113
115
|
- lib/kommando/buffer.rb
|
114
116
|
- lib/kommando/error.rb
|
115
117
|
- lib/kommando/version.rb
|
118
|
+
- tests/forever_true.rb
|
119
|
+
- tests/forever_uptime.rb
|
116
120
|
homepage: http://github.com/matti/kommando
|
117
121
|
licenses:
|
118
122
|
- MIT
|