hotswap 0.1.2 → 0.1.4
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/exe/hotswap +10 -5
- data/lib/hotswap/cli.rb +17 -2
- data/lib/hotswap/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 94b316259e5493780b12f54e304280ebf4e32d1635eee5eae41ffdbbe48400ce
|
|
4
|
+
data.tar.gz: dfa1cc6a8905f93e9b24eb9f6527f97601992b8ee7af6ce7b63ee7ff1b714678
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7b93ec7dd2f3d2914ddf0280e79579a1c408975353e10a8fd6679c2eb0deafab1685e5db60ddac443d4da2117088f65017dcffad5e50b6256aea79f4440806aa
|
|
7
|
+
data.tar.gz: be36ea39ce6ff863689fae39ca946e2b4eb7f33209d65d45d3c824887106bc3f3f4b609db7478197262b153fe4bf48f51d2be98f091e46dec041bc0978ed0d55
|
data/exe/hotswap
CHANGED
|
@@ -23,10 +23,15 @@ sock = UNIXSocket.new(socket_path)
|
|
|
23
23
|
args = ARGV.map { |a| Shellwords.escape(a) }.join(" ")
|
|
24
24
|
sock.write(args + "\n")
|
|
25
25
|
|
|
26
|
-
# Pipe stdin to socket (
|
|
27
|
-
writer =
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
# Pipe stdin to socket (only if data is being piped in)
|
|
27
|
+
writer = nil
|
|
28
|
+
if !$stdin.tty?
|
|
29
|
+
writer = Thread.new do
|
|
30
|
+
IO.copy_stream($stdin, sock) rescue nil
|
|
31
|
+
sock.close_write rescue nil
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
sock.close_write
|
|
30
35
|
end
|
|
31
36
|
|
|
32
37
|
# Pipe stderr socket to local stderr (in background thread)
|
|
@@ -40,7 +45,7 @@ end
|
|
|
40
45
|
# Pipe socket output to stdout
|
|
41
46
|
IO.copy_stream(sock, $stdout) rescue nil
|
|
42
47
|
|
|
43
|
-
writer
|
|
48
|
+
writer&.join
|
|
44
49
|
stderr_reader&.join
|
|
45
50
|
stderr_sock&.close rescue nil
|
|
46
51
|
sock.close rescue nil
|
data/lib/hotswap/cli.rb
CHANGED
|
@@ -6,7 +6,18 @@ require "sqlite3"
|
|
|
6
6
|
module Hotswap
|
|
7
7
|
class CLI < Thor
|
|
8
8
|
def self.exit_on_failure?
|
|
9
|
-
|
|
9
|
+
false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
class Shell < Thor::Shell::Basic
|
|
13
|
+
def initialize(stdout, stderr)
|
|
14
|
+
super()
|
|
15
|
+
@_stdout = stdout
|
|
16
|
+
@_stderr = stderr
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def stdout = @_stdout
|
|
20
|
+
def stderr = @_stderr
|
|
10
21
|
end
|
|
11
22
|
|
|
12
23
|
# Thread-safe IO: each connection gets its own IO via thread-local storage
|
|
@@ -15,7 +26,11 @@ module Hotswap
|
|
|
15
26
|
Thread.current[:hotswap_stdin] = stdin
|
|
16
27
|
Thread.current[:hotswap_stdout] = stdout
|
|
17
28
|
Thread.current[:hotswap_stderr] = stderr
|
|
18
|
-
|
|
29
|
+
|
|
30
|
+
args = ["help"] if args.empty?
|
|
31
|
+
start(args, shell: Shell.new(stdout, stderr))
|
|
32
|
+
rescue SystemExit
|
|
33
|
+
# Thor calls exit on errors — catch it so we don't kill the server
|
|
19
34
|
ensure
|
|
20
35
|
Thread.current[:hotswap_stdin] = nil
|
|
21
36
|
Thread.current[:hotswap_stdout] = nil
|
data/lib/hotswap/version.rb
CHANGED