rosh 0.9.3 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a029ca2deda02d278e112ba05e40a56dce955ffa8476091d0406ae098788bd1
4
- data.tar.gz: 701dfa757f7371589b997e21914dfecf6af4fe5b21b8519804ff4f2e7ae36b71
3
+ metadata.gz: 3934908cd1559287bd808f7774a044e7e598850d814bfcfe15604df715653114
4
+ data.tar.gz: 71f530ac4d74d582a4c4145f07f941e7ca63323a0bc054e33ac7cffd72b475ef
5
5
  SHA512:
6
- metadata.gz: 98e03da0dbba0d8737e39729553952ada5016b5cb7e2fe73a1b5184be1cafcfdf7d76b38a373731dca8a08bca68e014ed4b0d38fed7182eca1d9567249a31da4
7
- data.tar.gz: 8889757e1b4d933624a33d78727d2044fb36e16d58048e9e255355d8b2de8236697ceabb08eba52f63d90abb9c6f429555ffe5dc436596a3c9263399662bcdb8
6
+ metadata.gz: 922807c829ec873dbcb5a617cbcfd5b50a3d3da0cdfac24c6914223c27da717c9c29d109893402ca6f2666e3287035d34827b9efced35eaf4bc8cb7cdb6459e9
7
+ data.tar.gz: 0da6edde2a9f4825d029d2e8a37b5edf728e518d31997ede1522562e8d24d8ebd0f4a74f93211529ebb412824508a4105d0c50046775b042f3ee59469cb8851c
data/lib/rosh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Rosh
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.4'
3
3
  end
data/lib/rosh.rb CHANGED
@@ -227,23 +227,24 @@ private
227
227
 
228
228
  def sh_has_session?
229
229
  # tmux has-session -t <session_name>
230
- cmd = [
231
- "ssh",
232
- *@ssh_opts,
233
- resolv,
234
- "'tmux has-session -t #{@name} 2>/dev/null'"
235
- ]*' '
236
- puts cmd if @verbose
237
- system cmd
230
+ ssh_tmux("tmux has-session -t #{@name} 2>/dev/null")
238
231
  end
239
232
 
240
233
  def sh_new_session?
241
234
  # tmux new-session -s <session_name> -d
235
+ create_with_override = "tmux new-session -s #{@name} -d \\; set-option -t #{@name} destroy-unattached off"
236
+ return true if ssh_tmux(create_with_override)
237
+
238
+ puts "retrying tmux new-session without destroy-unattached override" if @verbose
239
+ ssh_tmux("tmux new-session -s #{@name} -d")
240
+ end
241
+
242
+ def ssh_tmux(command)
242
243
  cmd = [
243
244
  "ssh",
244
245
  *@ssh_opts,
245
246
  resolv,
246
- "'tmux new-session -s #{@name} -d'"
247
+ "'#{command}'"
247
248
  ]*' '
248
249
  puts cmd if @verbose
249
250
  system cmd
data/rosh.gemspec CHANGED
@@ -21,5 +21,6 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency "net-ssh"
23
23
  spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "minitest"
24
25
  spec.add_development_dependency "rake"
25
26
  end
@@ -24,14 +24,24 @@ class RoshForwardingTest < Minitest::Test
24
24
  end
25
25
 
26
26
  def test_ssh_opts_include_local_forwarding_from_ssh_config
27
- rosh = Rosh.new('grav')
27
+ klass = Class.new(Rosh) do
28
+ def local_forward_available?(_spec)
29
+ true
30
+ end
31
+ end
32
+ rosh = klass.new('grav')
28
33
  ssh_opts = rosh.instance_variable_get(:@ssh_opts)
29
34
 
30
35
  assert_includes ssh_opts, '-L 127.0.0.1:3131:localhost:3131'
31
36
  end
32
37
 
33
38
  def test_ssh_opts_include_remote_forwarding_from_ssh_config
34
- rosh = Rosh.new('grav')
39
+ klass = Class.new(Rosh) do
40
+ def local_forward_available?(_spec)
41
+ true
42
+ end
43
+ end
44
+ rosh = klass.new('grav')
35
45
  ssh_opts = rosh.instance_variable_get(:@ssh_opts)
36
46
 
37
47
  assert_includes ssh_opts, '-R 8082:localhost:8082'
@@ -84,4 +94,28 @@ class RoshForwardingTest < Minitest::Test
84
94
  out_again, _ = capture_io { rosh.send(:report_oom_if_needed, 'ssh grav') }
85
95
  assert_equal '', out_again
86
96
  end
97
+
98
+ def test_tmux_new_session_disables_destroy_unattached
99
+ rosh = Rosh.new('grav', 'grav')
100
+ commands = []
101
+ rosh.stub(:system, ->(cmd) { commands << cmd; true }) do
102
+ assert rosh.send(:sh_new_session?)
103
+ end
104
+
105
+ assert_equal 1, commands.size
106
+ assert_includes commands.first, 'set-option -t grav destroy-unattached off'
107
+ end
108
+
109
+ def test_tmux_new_session_fallback_without_override
110
+ rosh = Rosh.new('grav', 'grav')
111
+ commands = []
112
+ results = [false, true].each
113
+
114
+ rosh.stub(:system, ->(cmd) { commands << cmd; results.next rescue true }) do
115
+ assert rosh.send(:sh_new_session?)
116
+ end
117
+
118
+ assert_includes commands.first, 'set-option -t grav destroy-unattached off'
119
+ refute_includes commands.last, 'set-option -t grav destroy-unattached off'
120
+ end
87
121
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rosh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Takiuchi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-09-27 00:00:00.000000000 Z
11
+ date: 2025-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement