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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98bf6f648f72277fb219044bd6f5a5e0c1320c21d122e8478cc4e6d6f7000a4b
4
- data.tar.gz: 6308aa3432b0cf8e9f2fc3ca4fc66fb9075902fb3c421fad4d2dbd03f2105418
3
+ metadata.gz: ca8a2bc3e8f629e23986cd1f75bdcca6fc2cd0aaabf85fbde2ae00e721077178
4
+ data.tar.gz: 1bfc80f8f3f0844bbc943c23f48258577f7d3b7cea66dd48319893e7f3289aa7
5
5
  SHA512:
6
- metadata.gz: 268febf76230f6cb10ac9b492bc7c37fb34d48764b43d912dc430ae66f9b29cae1190c58109fa93d2935b4145a1e75685f6a8a1f4345e0ff53a40e70326301bc
7
- data.tar.gz: dbf74be661003f9b67e878c9284d2b4a6ef4d20712226e6021023b5e2e7d8352bb671c8a86e184367fb0bad38301a4c589a6254c8d2ba2660d972a178d715feb
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
- # Send each start command to the pane
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
- combined_cmd = start_cmds.join(' && ')
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
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.151"
2
+ VERSION = "0.1.152"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiiro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.151
4
+ version: 0.1.152
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota