lib/sup/mbox/ssh-file.rb in sup-0.0.7 vs lib/sup/mbox/ssh-file.rb in sup-0.0.8
- old
+ new
@@ -104,18 +104,16 @@
@fn = fn
@ssh_opts = ssh_opts
@file_size = nil
@offset = 0
@say_id = nil
- @broken_msg = nil
@shell = nil
@shell_mutex = nil
@buf_mutex = Mutex.new
end
def to_s; "mbox+ssh://#@host/#@fn"; end ## TODO: remove this EVILness
- def broken?; !@broken_msg.nil?; end
def connect
do_remote nil
end
@@ -162,58 +160,51 @@
BufferManager.clear @say_id if BufferManager.instantiated? && @say_id
@say_id = nil
end
def unsafe_connect
- raise SSHFileError, @broken_msg if broken?
return if @shell
@key = [@host, @ssh_opts[:username]]
begin
@shell, @shell_mutex = @@shells_mutex.synchronize do
unless @@shells.member? @key
say "Opening SSH connection to #{@host} for #@fn..."
- #raise SSHFileError, "simulated SSH file error"
session = Net::SSH.start @host, @ssh_opts
say "Starting SSH shell..."
@@shells[@key] = [session.shell.sync, Mutex.new]
end
@@shells[@key]
end
-
+
say "Checking for #@fn..."
@shell_mutex.synchronize { raise Errno::ENOENT, @fn unless @shell.test("-e #@fn").status == 0 }
ensure
shutup
end
end
def do_remote cmd, expected_size=0
retries = 0
result = nil
+
begin
- begin
- unsafe_connect
- if cmd
- # MBox::debug "sending command: #{cmd.inspect}"
- result = @shell_mutex.synchronize { x = @shell.send_command cmd; sleep 0.25; x }
- raise SSHFileError, "Failure during remote command #{cmd.inspect}: #{(result.stderr || result.stdout || "")[0 .. 100]}" unless result.status == 0
+ unsafe_connect
+ if cmd
+ # MBox::debug "sending command: #{cmd.inspect}"
+ result = @shell_mutex.synchronize { x = @shell.send_command cmd; sleep 0.25; x }
+ raise SSHFileError, "Failure during remote command #{cmd.inspect}: #{(result.stderr || result.stdout || "")[0 .. 100]}" unless result.status == 0
+ end
+ ## Net::SSH::Exceptions seem to happen every once in a while for
+ ## no good reason.
+ rescue Net::SSH::Exception, *RECOVERABLE_ERRORS
+ if (retries += 1) <= 3
+ @@shells_mutex.synchronize do
+ @shell = nil
+ @@shells[@key] = nil
end
-
- ## Net::SSH::Exceptions seem to happen every once in a while for
- ## no good reason.
- rescue Net::SSH::Exception, *RECOVERABLE_ERRORS
- if (retries += 1) <= 3
- @@shells_mutex.synchronize do
- @shell = nil
- @@shells[@key] = nil
- end
- retry
- end
- raise
+ retry
end
- rescue Net::SSH::Exception, SSHFileError, SystemCallError => e
- @broken_msg = e.message
raise
end
result.stdout if cmd
end