rosh 0.7.0 → 0.9.0

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.
Files changed (5) hide show
  1. checksums.yaml +5 -5
  2. data/lib/rosh/version.rb +1 -1
  3. data/lib/rosh.rb +69 -7
  4. data/rosh.gemspec +1 -2
  5. metadata +10 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a4b0821ffe5555bfc94c655ce5fb65df8cad010f
4
- data.tar.gz: 9194acb2ffd94f23204a0bbb047d15e7720bdeea
2
+ SHA256:
3
+ metadata.gz: f64f95564122ea852fb93ffc481aac5a7977aca6c6858f716e3495f17ae07fc5
4
+ data.tar.gz: c364da8eeea9ec17bf927ecca79eda010393043c5580d4259929f7eded253a8d
5
5
  SHA512:
6
- metadata.gz: da22e8d575e6eac82951990f4ac59a260327bd15576b1dc386ff8d7d0fdc46b5fd5d1cf01e7cbe59b3420a400642d8b9032a064c27fd77d20ca791808ff5813b
7
- data.tar.gz: ccb2656b299e71747e42c3e16f7decca02597254f705edb7a86d321f56108a22f548438e35d0afbbac0f7f3b356c5f766b80741e722c78dd8c5a88f30a19f8aa
6
+ metadata.gz: 5eb516a7aecaa2d2baed09ca47941da6b6ba25530ba3b8b7eee3c04db2d5633164c038c913b1b0d326be9e2f8a91f9360acdaaa08f4d75a86b2267f170128f83
7
+ data.tar.gz: d565efa2e2a73328570f810270018935056c21328b75130e9f636b8ad1715bf1a35ee10a966493814540cf3aaacaffe2b6532ab6a39c4029aa7ebde9c2c8abb6
data/lib/rosh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Rosh
2
- VERSION = '0.7.0'
2
+ VERSION = '0.9.0'
3
3
  end
data/lib/rosh.rb CHANGED
@@ -15,6 +15,8 @@ class Rosh
15
15
  opt.on('-a alive-interval'){|v| alive_interval = v.to_i}
16
16
  opt.on('-e escape'){|v| @escape = v}
17
17
  opt.on('-I interval'){|v| @interval = v.to_f}
18
+ opt.on('-V'){|v| @verbose = true}
19
+ opt.on('-S'){|v| @screen = true}
18
20
  end.parse! args
19
21
  @host, @name = *args, :default
20
22
  abort 'hostname is required' if @host == :default
@@ -23,26 +25,58 @@ class Rosh
23
25
 
24
26
  # check ~/.ssh/config to resolve alias name
25
27
  config = Net::SSH::Config.for(@host)
28
+ if @verbose
29
+ puts "ssh-config: #{config}"
30
+ end
26
31
  @host = config[:host_name] if config[:host_name]
27
32
  @ssh_opts << "-l #{config[:user]}" if config[:user]
28
33
  @ssh_opts << "-p #{config[:port]}" if config[:port]
34
+ @ssh_opts << "-J #{config[:proxy].jump_proxies}" if config[:proxy]
29
35
  if keys = config[:keys]
30
36
  keys.each{|k| @ssh_opts << "-i #{k}"}
31
37
  end
38
+ if @verbose
39
+ puts "host: #{@host}"
40
+ puts "name: #{@name}"
41
+ puts "interval: #{@interval}"
42
+ puts "alive_interval: #{alive_interval}"
43
+ puts "options: #{@ssh_opts*' '}"
44
+ end
32
45
  @first_try = true
33
46
  end
34
47
 
35
48
  def connect
36
- reconnect until system ["ssh", *@ssh_opts, resolv,
37
- '-t', "'screen -rx #{@name}'", '2>/dev/null']*' '
49
+ cmd = if @screen
50
+ ["ssh", *@ssh_opts, resolv,
51
+ '-t', "'screen -rx #{@name}'", '2>/dev/null']*' '
52
+ else
53
+ ["ssh", *@ssh_opts, resolv,
54
+ '-t', "'tmux attach -t #{@name}'", '2>/dev/null']*' '
55
+ end
56
+ if @verbose
57
+ puts "connecting to #{@host}..."
58
+ puts cmd
59
+ end
60
+ reconnect until system cmd
38
61
  end
39
62
 
40
63
  def reconnect
41
64
  if @first_try
42
- if !sh('-p 0 -X echo ok', '2>&1 >/dev/null')
43
- print "creating new screen session #{@name}... "
44
- if sh %{-c /dev/null -e "#{@escape*2}" -dm} and
45
- sh '-p 0 -X eval "stuff STY=\\040screen\\015"'
65
+ session_exists = if @screen
66
+ sh('-p 0 -X echo ok', '2>&1 >/dev/null')
67
+ else
68
+ sh_has_session?
69
+ end
70
+ unless session_exists
71
+ type = @screen ? 'screen' : 'tmux'
72
+ print "creating new #{type} session #{@name}..."
73
+ new_session = if @screen
74
+ sh %{-c /dev/null -e "#{@escape*2}" -dm} and
75
+ sh '-p 0 -X eval "stuff STY=\\040screen\\015"'
76
+ else
77
+ sh_new_session?
78
+ end
79
+ if new_session
46
80
  puts "done."
47
81
  else
48
82
  puts "failed."
@@ -58,7 +92,35 @@ class Rosh
58
92
 
59
93
  private
60
94
  def sh(a, r=nil)
61
- system "ssh #{resolv} #{@ssh_opts*' '} 'screen -S #{@name} #{a}' #{r}"
95
+ cmd = "ssh #{resolv} #{@ssh_opts*' '} 'screen -S #{@name} #{a}' #{r}"
96
+ if @verbose
97
+ puts cmd
98
+ end
99
+ system cmd
100
+ end
101
+
102
+ def sh_has_session?
103
+ # tmux has-session -t <session_name>
104
+ cmd = [
105
+ "ssh",
106
+ *@ssh_opts,
107
+ resolv,
108
+ "'tmux has-session -t #{@name} 2>/dev/null'"
109
+ ]*' '
110
+ puts cmd if @verbose
111
+ system cmd
112
+ end
113
+
114
+ def sh_new_session?
115
+ # tmux new-session -s <session_name> -d
116
+ cmd = [
117
+ "ssh",
118
+ *@ssh_opts,
119
+ resolv,
120
+ "'tmux new-session -s #{@name} -d'"
121
+ ]*' '
122
+ puts cmd if @verbose
123
+ system cmd
62
124
  end
63
125
 
64
126
  def resolv
data/rosh.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require File.join(lib, %w[rosh version])
@@ -21,6 +20,6 @@ Gem::Specification.new do |spec|
21
20
  spec.require_paths = ["lib"]
22
21
 
23
22
  spec.add_dependency "net-ssh"
24
- spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "bundler"
25
24
  spec.add_development_dependency "rake"
26
25
  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.7.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Takiuchi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-27 00:00:00.000000000 Z
11
+ date: 2025-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -75,7 +75,7 @@ homepage: https://github.com/genki/rosh
75
75
  licenses:
76
76
  - MIT
77
77
  metadata: {}
78
- post_install_message:
78
+ post_install_message:
79
79
  rdoc_options: []
80
80
  require_paths:
81
81
  - lib
@@ -90,9 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.4.8
95
- signing_key:
93
+ rubygems_version: 3.4.15
94
+ signing_key:
96
95
  specification_version: 4
97
96
  summary: Rosh is roaming shell
98
97
  test_files: []