hiiro 0.1.151 → 0.1.152
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/hiiro/service_manager.rb +75 -11
- data/lib/hiiro/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: ca8a2bc3e8f629e23986cd1f75bdcca6fc2cd0aaabf85fbde2ae00e721077178
|
|
4
|
+
data.tar.gz: 1bfc80f8f3f0844bbc943c23f48258577f7d3b7cea66dd48319893e7f3289aa7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 05dfbdf2fdef32ec3471b8f26efefc26f07b171b0886c6f9beb55ea7008218165cc126f762cd1ef5e391511815b42eb479aa0dcdff9cc5831b885a8c4ea15b52
|
|
7
|
+
data.tar.gz: b9645c6341b3cf753d209b7fcac576264788156a646042a5601d4e4f1269478fd87ab8d93024448ad2ce8eb410d01cd7cd410c26d20f0ebd71007967f6f6a028
|
|
@@ -166,6 +166,44 @@ class Hiiro
|
|
|
166
166
|
load_state
|
|
167
167
|
end
|
|
168
168
|
|
|
169
|
+
def reset(name)
|
|
170
|
+
svc = find_service(name)
|
|
171
|
+
unless svc
|
|
172
|
+
puts "Service '#{name}' not found"
|
|
173
|
+
return false
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
svc_name = svc[:name]
|
|
177
|
+
state = load_state
|
|
178
|
+
unless state.key?(svc_name)
|
|
179
|
+
puts "Service '#{svc_name}' is not in running state"
|
|
180
|
+
return false
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
state.delete(svc_name)
|
|
184
|
+
save_state(state)
|
|
185
|
+
puts "Reset service '#{svc_name}' (cleared from running state)"
|
|
186
|
+
true
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def clean
|
|
190
|
+
state = load_state
|
|
191
|
+
return puts("No running services to clean") if state.empty?
|
|
192
|
+
|
|
193
|
+
stale = state.select { |_, info| stale_pane?(info['tmux_pane']) }
|
|
194
|
+
if stale.empty?
|
|
195
|
+
puts "All running services have live panes"
|
|
196
|
+
return false
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
stale.each do |svc_name, _|
|
|
200
|
+
state.delete(svc_name)
|
|
201
|
+
puts "Cleaned stale service '#{svc_name}'"
|
|
202
|
+
end
|
|
203
|
+
save_state(state)
|
|
204
|
+
true
|
|
205
|
+
end
|
|
206
|
+
|
|
169
207
|
def start(name, tmux_info: {}, task_info: {}, variation_overrides: {}, skip_env: false, skip_window_creation: false)
|
|
170
208
|
svc = find_service(name)
|
|
171
209
|
unless svc
|
|
@@ -205,12 +243,13 @@ class Hiiro
|
|
|
205
243
|
return false
|
|
206
244
|
end
|
|
207
245
|
|
|
208
|
-
# Coerce start command to array
|
|
209
246
|
start_cmds = Array(start_cmd)
|
|
210
|
-
|
|
211
247
|
base_dir = svc[:base_dir]
|
|
212
248
|
session = tmux_info[:session] || current_tmux_session
|
|
213
249
|
|
|
250
|
+
# Write start commands to an executable tempfile
|
|
251
|
+
script = write_start_script(svc_name, start_cmds, base_dir)
|
|
252
|
+
|
|
214
253
|
if session && !skip_window_creation
|
|
215
254
|
# Create a new tmux window for this service
|
|
216
255
|
window_target = create_tmux_window(session, svc_name, base_dir || Dir.pwd)
|
|
@@ -225,16 +264,9 @@ class Hiiro
|
|
|
225
264
|
end
|
|
226
265
|
|
|
227
266
|
if pane_id
|
|
228
|
-
|
|
229
|
-
combined_cmd = start_cmds.join(' && ')
|
|
230
|
-
system('tmux', 'send-keys', '-t', pane_id, combined_cmd, 'Enter')
|
|
267
|
+
system('tmux', 'send-keys', '-t', pane_id, script, 'Enter')
|
|
231
268
|
else
|
|
232
|
-
|
|
233
|
-
if base_dir
|
|
234
|
-
system("cd #{base_dir} && #{combined_cmd} &")
|
|
235
|
-
else
|
|
236
|
-
system("#{combined_cmd} &")
|
|
237
|
-
end
|
|
269
|
+
system("#{script} &")
|
|
238
270
|
end
|
|
239
271
|
|
|
240
272
|
# Record state
|
|
@@ -488,6 +520,19 @@ class Hiiro
|
|
|
488
520
|
sm.stop(svc_name)
|
|
489
521
|
end
|
|
490
522
|
|
|
523
|
+
h.add_subcmd(:reset) do |svc_name=nil|
|
|
524
|
+
unless svc_name
|
|
525
|
+
puts "Usage: service reset <name>"
|
|
526
|
+
next
|
|
527
|
+
end
|
|
528
|
+
|
|
529
|
+
sm.reset(svc_name)
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
h.add_subcmd(:clean) do
|
|
533
|
+
sm.clean
|
|
534
|
+
end
|
|
535
|
+
|
|
491
536
|
h.add_subcmd(:attach) do |svc_name=nil|
|
|
492
537
|
unless svc_name
|
|
493
538
|
puts "Usage: service attach <name>"
|
|
@@ -660,6 +705,25 @@ class Hiiro
|
|
|
660
705
|
|
|
661
706
|
private
|
|
662
707
|
|
|
708
|
+
def stale_pane?(pane_id)
|
|
709
|
+
return true unless pane_id
|
|
710
|
+
!system('tmux', 'has-session', '-t', pane_id, [:out, :err] => '/dev/null')
|
|
711
|
+
end
|
|
712
|
+
|
|
713
|
+
def write_start_script(svc_name, cmds, base_dir)
|
|
714
|
+
dir = File.join(STATE_DIR, 'scripts')
|
|
715
|
+
FileUtils.mkdir_p(dir)
|
|
716
|
+
path = File.join(dir, "#{svc_name}.sh")
|
|
717
|
+
|
|
718
|
+
lines = ["#!/usr/bin/env bash", "set -e"]
|
|
719
|
+
lines << "cd #{base_dir}" if base_dir
|
|
720
|
+
lines.concat(cmds)
|
|
721
|
+
|
|
722
|
+
File.write(path, lines.join("\n") + "\n")
|
|
723
|
+
File.chmod(0755, path)
|
|
724
|
+
path
|
|
725
|
+
end
|
|
726
|
+
|
|
663
727
|
def current_tmux_session
|
|
664
728
|
return nil unless ENV['TMUX']
|
|
665
729
|
`tmux display-message -p '#S'`.chomp
|
data/lib/hiiro/version.rb
CHANGED