sesh 0.0.7 → 0.0.8
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/bin/sesh +38 -10
- data/lib/sesh/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2b2b6726a4931f7ab2b379307da2ad4f8759a10
|
4
|
+
data.tar.gz: db3e61656ca079e4eab18dc29f0a1bb4caa31cca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d9153dced581cae190f0849a1e14bec49fb26ef7dbd83f6a2d501f62ae106b901349a9b7d7038ff32deb9e86e66fa6e05e9d09c5356e2ca386725096cdb64e6
|
7
|
+
data.tar.gz: 1f0ef9b03d59840014684d59ae16cbba97e96afe4455b37034392903c321867c4d24432fad62a8314f5dc83ba12a7ee74183817b192ae8361ce4b4e85b641d78
|
data/bin/sesh
CHANGED
@@ -10,8 +10,9 @@ Usage: #{File.basename $0} command [project]
|
|
10
10
|
Commands:
|
11
11
|
|
12
12
|
sesh new Create a new tmuxinator configuration.
|
13
|
-
sesh
|
14
|
-
sesh
|
13
|
+
sesh edit [project] Edit an existing tmuxinator configuration.
|
14
|
+
sesh start [project] Start a Sesh session for a project.
|
15
|
+
sesh stop [project] Stop a Sesh session for a project.
|
15
16
|
sesh list List running Sesh sessions on this machine.
|
16
17
|
sesh enslave [project] user@host Connect a slave to a local Sesh session.
|
17
18
|
sesh connect [project] [user@host] Connect as a slave to a Sesh session.
|
@@ -53,7 +54,8 @@ end
|
|
53
54
|
@project_name = get_project_name
|
54
55
|
|
55
56
|
|
56
|
-
@
|
57
|
+
@socket_file = "/tmp/#{@project_name}.sock"
|
58
|
+
@pids_file = "/tmp/#{@project_name}.pids.txt"
|
57
59
|
|
58
60
|
def get_remote_address
|
59
61
|
@options[@options.length>1 ? 1:0] if @options.any?
|
@@ -65,6 +67,12 @@ def get_term_app
|
|
65
67
|
output.length > 0 ? 'iTerm' : fatal("iTerm 2 is not installed.") # 'Terminal'
|
66
68
|
end
|
67
69
|
|
70
|
+
def get_editor
|
71
|
+
editor = `echo $EDITOR`.strip
|
72
|
+
editor = 'vim' unless editor.length > 0
|
73
|
+
editor
|
74
|
+
end
|
75
|
+
|
68
76
|
def project_name_matcher
|
69
77
|
pn = @project_name.gsub '-', '\-'
|
70
78
|
"[t]mux.*[#{pn[0]}]#{pn[1..-1]}"
|
@@ -79,7 +87,7 @@ def format_command(command) command.gsub(/\ [ ]+/, ' ').strip end
|
|
79
87
|
def format_and_run_command(command) `#{format_command(command)}`.strip end
|
80
88
|
|
81
89
|
def issue_server_start_command!
|
82
|
-
`tmux -S "#{@
|
90
|
+
`tmux -S "#{@socket_file}" new-session -d "env TMUX='' mux start #{@project_name}"`
|
83
91
|
end
|
84
92
|
|
85
93
|
def issue_server_stop_command!
|
@@ -88,7 +96,7 @@ end
|
|
88
96
|
|
89
97
|
def connection_command(local=false, addr=nil)
|
90
98
|
addr ||= @local_ssh_addr
|
91
|
-
local_command = "tmux -S #{@
|
99
|
+
local_command = "tmux -S #{@socket_file} a"
|
92
100
|
return local_command if local
|
93
101
|
"ssh #{addr} -t '#{local_command}'"
|
94
102
|
end
|
@@ -127,18 +135,33 @@ def show_progress_until(condition_lambda, timeout=10)
|
|
127
135
|
return condition_lambda.call
|
128
136
|
end
|
129
137
|
|
138
|
+
def kill_running_processes
|
139
|
+
if File.exists? @pids_file
|
140
|
+
File.readlines(@pids_file).each{|pid| kill_process! pid }
|
141
|
+
File.delete @pids_file
|
142
|
+
end
|
143
|
+
end
|
144
|
+
def kill_process!(pid)
|
145
|
+
`kill -9 #{pid}`
|
146
|
+
end
|
147
|
+
|
130
148
|
if @command
|
131
149
|
case @command
|
132
150
|
when 'start'
|
133
151
|
fatal("Sesh project '#{@project_name}' is already running!") if already_running?
|
134
152
|
debug "Starting Sesh project '#{@project_name}'..."
|
153
|
+
kill_running_processes
|
135
154
|
output = issue_server_start_command!
|
136
155
|
success = show_progress_until ->{ already_running? }
|
137
156
|
if success
|
138
157
|
sleep 1
|
139
158
|
if $? && already_running?
|
159
|
+
pids = `tmux list-panes -s -F "\#{pane_pid} \#{pane_current_command}" | grep -v tmux | awk '{print $1}'`.strip.lines
|
160
|
+
File.open(@pids_file, 'w') {|f| pids.each{|pid| f.puts pid } }
|
140
161
|
debug 'Sesh started successfully.'
|
141
162
|
debug "To connect: #{connection_command}"
|
163
|
+
# TODO: show other sesh commands (connect, enslave), specify full
|
164
|
+
# command as what is needed for machines without sesh.
|
142
165
|
puts
|
143
166
|
else
|
144
167
|
fatal 'Sesh failed to start!'
|
@@ -149,6 +172,7 @@ if @command
|
|
149
172
|
when 'stop'
|
150
173
|
fatal("Sesh project '#{@project_name}' is not running!") unless already_running?
|
151
174
|
debug "Stopping Sesh project '#{@project_name}'..."
|
175
|
+
kill_running_processes
|
152
176
|
output = issue_server_stop_command!
|
153
177
|
success = show_progress_until ->{ !already_running? }
|
154
178
|
if success && $?
|
@@ -172,12 +196,16 @@ if @command
|
|
172
196
|
File.open(config, "w") { |f| f.write(erb) }
|
173
197
|
end
|
174
198
|
|
175
|
-
|
176
|
-
editor = 'vim' unless editor.length > 0
|
177
|
-
Kernel.system("#{editor} #{config}") || Tmuxinator::Cli.new.doctor
|
178
|
-
# command = "env EDITOR='vim' tmuxinator new #{@project_name}"
|
179
|
-
# output = exec command
|
199
|
+
Kernel.system("#{get_editor} #{config}") || Tmuxinator::Cli.new.doctor
|
180
200
|
puts
|
201
|
+
when 'edit'
|
202
|
+
config = Tmuxinator::Config.project(@project_name)
|
203
|
+
if Tmuxinator::Config.exists? @project_name
|
204
|
+
Kernel.system("#{get_editor} #{config}") || Tmuxinator::Cli.new.doctor
|
205
|
+
puts
|
206
|
+
else
|
207
|
+
fatal "Sesh project '#{@project_name}' does not exist yet!"
|
208
|
+
end
|
181
209
|
when 'list'
|
182
210
|
output = format_and_run_command <<-BASH
|
183
211
|
ps aux | grep tmux | grep "env TMUX='' mux start" \
|
data/lib/sesh/version.rb
CHANGED