Class: SCPSession

Inherits:
Object
  • Object
show all
Defined in:
lib/guard/autoupload/scpsession.rb

Instance Method Summary collapse

Constructor Details

#initialize(host, port, user, password, caller_ref) ⇒ SCPSession

Returns a new instance of SCPSession.



4
5
6
7
8
9
10
11
12
# File 'lib/guard/autoupload/scpsession.rb', line 4

def initialize(host, port, user, password, caller_ref)
    @host = host
    @port = port
    @user = user
    @password = password
    @caller = caller_ref
    @retry_count = 0
    @max_retries = 1
end

Instance Method Details

#closeObject



103
104
105
106
# File 'lib/guard/autoupload/scpsession.rb', line 103

def close
    ss.close
    Thread.current[:simplessh] = nil
end

#ls!(dir) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/guard/autoupload/scpsession.rb', line 83

def ls!(dir)
    begin
        ss.ssh @host, "ls #{dir}", :port => @port
        # This shouldn't be run if we get an exception
        @retry_count = 0
    rescue Net::SSH::Simple::Error => e
        case e.wrapped
        when Errno::ECONNRESET, Net::SSH::Disconnect
            raise e if @retry_count >= @max_retries
            @retry_count += 1
            @caller.log "Failed listing directory contents and will try again."
            @caller.log "The reason was #{e}" unless @caller.quiet?
            close
            retry
        else
            raise e
        end
    end
end

#mkdir!(dir) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/guard/autoupload/scpsession.rb', line 38

def mkdir!(dir)
    begin
        check_exists = ss.ssh "#{@host}", "ls -ld #{dir}", :port => @port
        ss.ssh "#{@host}", "mkdir #{dir}", :port => @port if check_exists.exit_code
        # This shouldn't be run if we get an exception
        @retry_count = 0
    rescue Net::SSH::Simple::Error => e
        case e.wrapped
        when Errno::ECONNRESET, Net::SSH::Disconnect
            raise e if @retry_count >= @max_retries
            @retry_count += 1
            @caller.log "Failed making directory and will try again."
            @caller.log "The reason was #{e}" unless @caller.quiet?
            close
            retry
        else
            raise e
        end
    end
end

#remove!(remote) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/guard/autoupload/scpsession.rb', line 59

def remove!(remote)
    begin
        ss.ssh @host, "rm #{remote}", :port => @port
        # This shouldn't be run if we get an exception
        @retry_count = 0
    rescue Net::SSH::Simple::Error => e
        case e.wrapped
        when Errno::ECONNRESET, Net::SSH::Disconnect
            raise e if @retry_count >= @max_retries
            @retry_count += 1
            @caller.log "Failed removing file and will try again."
            @caller.log "The reason was #{e}" unless @caller.quiet?
            close
            retry
        else
            raise e
        end
    end
end

#rmdir!(dir) ⇒ Object



79
80
81
# File 'lib/guard/autoupload/scpsession.rb', line 79

def rmdir!(dir)
    throw NotImplementedError
end

#ssObject



14
15
16
# File 'lib/guard/autoupload/scpsession.rb', line 14

def ss
    Thread.current[:simplessh] ||= Net::SSH::Simple.new({:user => @user, :password => @password})
end

#upload!(local, remote) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/guard/autoupload/scpsession.rb', line 18

def upload!(local, remote)
    begin
        ss.scp_put "#{@host}", "#{local}", "#{remote}", :port => @port
        # This shouldn't be run if we get an exception
        @retry_count = 0
    rescue Net::SSH::Simple::Error => e
        case e.wrapped
        when Errno::ECONNRESET, Net::SSH::Disconnect
            raise e if @retry_count >= @max_retries
            @retry_count += 1
            @caller.log "Failed uploading and will try again."
            @caller.log "The reason was #{e}" unless @caller.quiet?
            close
            retry
        else
            raise e
        end
    end
end