net-scp 1.2.1 → 2.0.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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.gitignore +6 -0
- data/.travis.yml +9 -4
- data/CHANGES.txt +3 -0
- data/Gemfile +15 -0
- data/README.rdoc +5 -6
- data/Rakefile +48 -26
- data/lib/net/scp.rb +8 -8
- data/lib/net/scp/download.rb +5 -5
- data/lib/net/scp/version.rb +63 -13
- data/net-scp-public_cert.pem +21 -0
- data/net-scp.gemspec +33 -56
- metadata +49 -58
- metadata.gz.sig +0 -0
- data/gem-public_cert.pem +0 -20
- data/test/common.rb +0 -153
- data/test/test_all.rb +0 -3
- data/test/test_download.rb +0 -197
- data/test/test_scp.rb +0 -60
- data/test/test_upload.rb +0 -269
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cbfca972e9cc5bd85bd596ce1be966402e2d6d30
|
4
|
+
data.tar.gz: 33451e0d0cd8d4d9c77f8c2aecc70f28d67100a2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 660a95fd1181762c52dc1929637ce5791f11c101f327dfce376bce9b412ac539b4448d345438c70773c842abdc031acf3b5e5b179864ac98050d0931e4962271
|
7
|
+
data.tar.gz: c6b069bde4616271d17cc86f48dae3abcc69d098b9a63880dd31559b1da04c8780d64f5b4f1ca3e2525b32d184eca50b1abecf1f973c20a6f463942d65e9bbbc
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.travis.yml
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
language: ruby
|
2
|
+
cache: bundler
|
2
3
|
rvm:
|
3
|
-
-
|
4
|
-
-
|
5
|
-
-
|
4
|
+
- 2.3.8
|
5
|
+
- 2.4.5
|
6
|
+
- 2.5.3
|
7
|
+
- 2.6.1
|
8
|
+
- ruby-head
|
6
9
|
|
10
|
+
matrix:
|
11
|
+
allow_failures:
|
12
|
+
- rvm: ruby-head
|
7
13
|
|
8
14
|
install: gem install jeweler test-unit mocha net-ssh
|
9
15
|
|
10
16
|
script: rake test
|
11
|
-
|
data/CHANGES.txt
CHANGED
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in mygem.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
# TODO: add to gemspec
|
7
|
+
gem "bundler", "~> 1.11"
|
8
|
+
gem "rake", "~> 12.0"
|
9
|
+
|
10
|
+
gem 'byebug', group: %i[development test] if !Gem.win_platform? && RUBY_ENGINE == "ruby"
|
11
|
+
|
12
|
+
if ENV["CI"]
|
13
|
+
gem 'codecov', require: false, group: :test
|
14
|
+
gem 'simplecov', require: false, group: :test
|
15
|
+
end
|
data/README.rdoc
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
== DESCRIPTION:
|
15
15
|
|
16
|
-
Net::SCP is a pure-Ruby implementation of the SCP protocol. This operates over SSH (and requires the Net::SSH library), and allows files and directory trees to copied to and from a remote server.
|
16
|
+
Net::SCP is a pure-Ruby implementation of the SCP protocol. This operates over SSH (and requires the Net::SSH library), and allows files and directory trees to be copied to and from a remote server.
|
17
17
|
|
18
18
|
== FEATURES/PROBLEMS:
|
19
19
|
|
@@ -42,7 +42,7 @@ In a nutshell:
|
|
42
42
|
data = Net::SCP::download!("remote.host.com", "username", "/remote/path")
|
43
43
|
|
44
44
|
# use a persistent connection to transfer files
|
45
|
-
Net::SCP.start("remote.host.com", "username", :
|
45
|
+
Net::SCP.start("remote.host.com", "username", :password => "password") do |scp|
|
46
46
|
# upload a file to a remote server
|
47
47
|
scp.upload! "/local/path", "/remote/path"
|
48
48
|
|
@@ -74,12 +74,12 @@ If you wish to run the tests, you'll also need:
|
|
74
74
|
|
75
75
|
* gem install net-scp (might need sudo privileges)
|
76
76
|
|
77
|
-
However, in order to be sure the code you're installing hasn't been tampered with, it's recommended that you verify the signiture[http://docs.
|
77
|
+
However, in order to be sure the code you're installing hasn't been tampered with, it's recommended that you verify the signiture[http://docs.seattlerb.org/rubygems/Gem/Security.html]. To do this, you need to add my public key as a trusted certificate (you only need to do this once):
|
78
78
|
|
79
79
|
# Add the public key as a trusted certificate
|
80
80
|
# (You only need to do this once)
|
81
|
-
$ curl -O https://raw.
|
82
|
-
$ gem cert --add
|
81
|
+
$ curl -O https://raw.githubusercontent.com/net-ssh/net-ssh/master/net-ssh-public_cert.pem
|
82
|
+
$ gem cert --add net-ssh-public_cert.pem
|
83
83
|
|
84
84
|
Then, when install the gem, do so with high security:
|
85
85
|
|
@@ -87,7 +87,6 @@ Then, when install the gem, do so with high security:
|
|
87
87
|
|
88
88
|
If you don't add the public key, you'll see an error like "Couldn't verify data signature". If you're still having trouble let me know and I'll give you a hand.
|
89
89
|
|
90
|
-
|
91
90
|
Or, you can do it the hard way (without Rubygems):
|
92
91
|
|
93
92
|
* tar xzf net-scp-*.tgz
|
data/Rakefile
CHANGED
@@ -2,40 +2,64 @@ require "rubygems"
|
|
2
2
|
require "rake"
|
3
3
|
require "rake/clean"
|
4
4
|
require "rdoc/task"
|
5
|
+
require "bundler/gem_tasks"
|
5
6
|
|
6
|
-
|
7
|
+
desc "When releasing make sure NET_SSH_BUILDGEM_SIGNED is set"
|
8
|
+
task :check_NET_SSH_BUILDGEM_SIGNED do
|
9
|
+
raise "NET_SSH_BUILDGEM_SIGNED should be set to release" unless ENV['NET_SSH_BUILDGEM_SIGNED']
|
10
|
+
end
|
11
|
+
|
12
|
+
Rake::Task[:release].enhance [:check_NET_SSH_BUILDGEM_SIGNED]
|
13
|
+
Rake::Task[:release].prerequisites.unshift(:check_NET_SSH_BUILDGEM_SIGNED)
|
14
|
+
|
15
|
+
task default: ["build"]
|
7
16
|
CLEAN.include [ 'pkg', 'rdoc' ]
|
8
17
|
name = "net-scp"
|
9
18
|
|
10
|
-
|
11
|
-
|
12
|
-
|
19
|
+
require_relative "lib/net/scp/version"
|
20
|
+
version = Net::SCP::Version::CURRENT
|
21
|
+
|
22
|
+
namespace :cert do
|
23
|
+
desc "Update public cert from private - only run if public is expired"
|
24
|
+
task :update_public_when_expired do
|
25
|
+
require 'openssl'
|
26
|
+
require 'time'
|
27
|
+
raw = File.read "net-scp-public_cert.pem"
|
28
|
+
certificate = OpenSSL::X509::Certificate.new raw
|
29
|
+
raise Exception, "Not yet expired: #{certificate.not_after}" unless certificate.not_after < Time.now
|
30
|
+
sh "gem cert --build netssh@solutious.com --days 365*5 --private-key /mnt/gem/net-ssh-private_key.pem"
|
31
|
+
sh "mv gem-public_cert.pem net-scp-public_cert.pem"
|
32
|
+
sh "gem cert --add net-scp-public_cert.pem"
|
33
|
+
end
|
34
|
+
end
|
13
35
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
36
|
+
if false
|
37
|
+
begin
|
38
|
+
require "jeweler"
|
39
|
+
Jeweler::Tasks.new do |s|
|
40
|
+
s.version = version
|
41
|
+
s.name = name
|
42
|
+
s.rubyforge_project = s.name
|
43
|
+
s.summary = "A pure Ruby implementation of the SCP client protocol"
|
44
|
+
s.description = s.summary
|
45
|
+
s.email = "net-ssh@solutious.com"
|
46
|
+
s.homepage = "https://github.com/net-ssh/net-scp"
|
47
|
+
s.authors = ["Jamis Buck", "Delano Mandelbaum"]
|
25
48
|
|
26
|
-
|
49
|
+
s.add_dependency 'net-ssh', ">=2.6.5"
|
27
50
|
|
28
|
-
|
29
|
-
|
51
|
+
s.add_development_dependency 'test-unit'
|
52
|
+
s.add_development_dependency 'mocha'
|
30
53
|
|
31
|
-
|
54
|
+
s.license = "MIT"
|
32
55
|
|
33
|
-
|
34
|
-
|
56
|
+
s.signing_key = File.join('/mnt/gem/', 'gem-private_key.pem')
|
57
|
+
s.cert_chain = ['gem-public_cert.pem']
|
58
|
+
end
|
59
|
+
Jeweler::GemcutterTasks.new
|
60
|
+
rescue LoadError
|
61
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
35
62
|
end
|
36
|
-
Jeweler::GemcutterTasks.new
|
37
|
-
rescue LoadError
|
38
|
-
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
39
63
|
end
|
40
64
|
|
41
65
|
require 'rake/testtask'
|
@@ -56,5 +80,3 @@ RDoc::Task.new do |rdoc|
|
|
56
80
|
rdoc.rdoc_files.include(file) if File.exists?(file)
|
57
81
|
}
|
58
82
|
end
|
59
|
-
|
60
|
-
|
data/lib/net/scp.rb
CHANGED
@@ -194,7 +194,7 @@ module Net
|
|
194
194
|
include Net::SSH::Loggable
|
195
195
|
include Upload, Download
|
196
196
|
|
197
|
-
# Starts up a new SSH connection and instantiates a new SCP session on
|
197
|
+
# Starts up a new SSH connection and instantiates a new SCP session on
|
198
198
|
# top of it. If a block is given, the SCP session is yielded, and the
|
199
199
|
# SSH session is closed automatically when the block terminates. If no
|
200
200
|
# block is given, the SCP session is returned.
|
@@ -293,7 +293,7 @@ module Net
|
|
293
293
|
# * :preserve - the atime and mtime of the file should be preserved.
|
294
294
|
# * :verbose - the process should result in verbose output on the server
|
295
295
|
# end (useful for debugging).
|
296
|
-
#
|
296
|
+
#
|
297
297
|
# This method will return immediately, returning the Net::SSH::Connection::Channel
|
298
298
|
# object that will support the download. To wait for the download to finish,
|
299
299
|
# you can either call the #wait method on the channel, or otherwise run
|
@@ -343,7 +343,7 @@ module Net
|
|
343
343
|
# (See Net::SCP::Upload and Net::SCP::Download).
|
344
344
|
def start_command(mode, local, remote, options={}, &callback)
|
345
345
|
session.open_channel do |channel|
|
346
|
-
|
346
|
+
|
347
347
|
if options[:shell]
|
348
348
|
escaped_file = shellescape(remote).gsub(/'/) { |m| "'\\''" }
|
349
349
|
command = "#{options[:shell]} -c '#{scp_command(mode, options)} #{escaped_file}'"
|
@@ -362,10 +362,10 @@ module Net
|
|
362
362
|
channel[:stack ] = []
|
363
363
|
channel[:error_string] = ''
|
364
364
|
|
365
|
-
channel.on_close { |
|
366
|
-
channel.on_data { |
|
367
|
-
channel.on_extended_data { |
|
368
|
-
channel.on_request("exit-status") { |
|
365
|
+
channel.on_close { |ch2| send("#{channel[:state]}_state", channel); raise Net::SCP::Error, "SCP did not finish successfully (#{channel[:exit]}): #{channel[:error_string]}" if channel[:exit] != 0 }
|
366
|
+
channel.on_data { |ch2, data| channel[:buffer].append(data) }
|
367
|
+
channel.on_extended_data { |ch2, type, data| debug { data.chomp } }
|
368
|
+
channel.on_request("exit-status") { |ch2, data| channel[:exit] = data.read_long }
|
369
369
|
channel.on_process { send("#{channel[:state]}_state", channel) }
|
370
370
|
else
|
371
371
|
channel.close
|
@@ -395,7 +395,7 @@ module Net
|
|
395
395
|
def await_response_state(channel)
|
396
396
|
return if channel[:buffer].available == 0
|
397
397
|
c = channel[:buffer].read_byte
|
398
|
-
raise "#{c.chr}#{channel[:buffer].read}" if c != 0
|
398
|
+
raise Net::SCP::Error, "#{c.chr}#{channel[:buffer].read}" if c != 0
|
399
399
|
channel[:next], channel[:state] = nil, channel[:next]
|
400
400
|
send("#{channel[:state]}_state", channel)
|
401
401
|
end
|
data/lib/net/scp/download.rb
CHANGED
@@ -20,7 +20,7 @@ module Net; class SCP
|
|
20
20
|
elsif channel[:local].respond_to?(:write) && channel[:options][:preserve]
|
21
21
|
lwarn { ":preserve option is ignored when downloading to an in-memory buffer" }
|
22
22
|
channel[:options].delete(:preserve)
|
23
|
-
elsif channel[:options][:recursive] && !File.
|
23
|
+
elsif channel[:options][:recursive] && !File.exist?(channel[:local])
|
24
24
|
Dir.mkdir(channel[:local])
|
25
25
|
end
|
26
26
|
|
@@ -128,9 +128,9 @@ module Net; class SCP
|
|
128
128
|
|
129
129
|
channel[:local] = File.join(channel[:local], directive[:name])
|
130
130
|
|
131
|
-
if File.
|
132
|
-
raise "#{channel[:local]} already exists and is not a directory"
|
133
|
-
elsif !File.
|
131
|
+
if File.exist?(channel[:local]) && !File.directory?(channel[:local])
|
132
|
+
raise Net::SCP::Error, "#{channel[:local]} already exists and is not a directory"
|
133
|
+
elsif !File.exist?(channel[:local])
|
134
134
|
Dir.mkdir(channel[:local], directive[:mode] | 0700)
|
135
135
|
end
|
136
136
|
|
@@ -162,4 +162,4 @@ module Net; class SCP
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
-
end; end
|
165
|
+
end; end
|
data/lib/net/scp/version.rb
CHANGED
@@ -1,18 +1,68 @@
|
|
1
|
-
|
1
|
+
module Net
|
2
|
+
module SCP
|
3
|
+
# A class for describing the current version of a library. The version
|
4
|
+
# consists of three parts: the +major+ number, the +minor+ number, and the
|
5
|
+
# +tiny+ (or +patch+) number.
|
6
|
+
#
|
7
|
+
# Two Version instances may be compared, so that you can test that a version
|
8
|
+
# of a library is what you require:
|
9
|
+
#
|
10
|
+
# require 'net/scp/version'
|
11
|
+
#
|
12
|
+
# if Net::SCP::Version::CURRENT < Net::SCP::Version[2,1,0]
|
13
|
+
# abort "your software is too old!"
|
14
|
+
# end
|
15
|
+
class Version
|
16
|
+
include Comparable
|
2
17
|
|
3
|
-
|
18
|
+
# A convenience method for instantiating a new Version instance with the
|
19
|
+
# given +major+, +minor+, and +tiny+ components.
|
20
|
+
def self.[](major, minor, tiny, pre = nil)
|
21
|
+
new(major, minor, tiny, pre)
|
22
|
+
end
|
4
23
|
|
5
|
-
|
6
|
-
class Version < Net::SSH::Version
|
7
|
-
MAJOR = 1
|
8
|
-
MINOR = 2
|
9
|
-
TINY = 1
|
24
|
+
attr_reader :major, :minor, :tiny
|
10
25
|
|
11
|
-
|
12
|
-
|
26
|
+
# Create a new Version object with the given components.
|
27
|
+
def initialize(major, minor, tiny, pre = nil)
|
28
|
+
@major, @minor, @tiny, @pre = major, minor, tiny, pre
|
29
|
+
end
|
13
30
|
|
14
|
-
|
15
|
-
|
16
|
-
|
31
|
+
# Compare this version to the given +version+ object.
|
32
|
+
def <=>(version)
|
33
|
+
to_i <=> version.to_i
|
34
|
+
end
|
35
|
+
|
36
|
+
# Converts this version object to a string, where each of the three
|
37
|
+
# version components are joined by the '.' character. E.g., 2.0.0.
|
38
|
+
def to_s
|
39
|
+
@to_s ||= [@major, @minor, @tiny, @pre].compact.join(".")
|
40
|
+
end
|
41
|
+
|
42
|
+
# Converts this version to a canonical integer that may be compared
|
43
|
+
# against other version objects.
|
44
|
+
def to_i
|
45
|
+
@to_i ||= @major * 1_000_000 + @minor * 1_000 + @tiny
|
46
|
+
end
|
47
|
+
|
48
|
+
# The major component of this version of the Net::SSH library
|
49
|
+
MAJOR = 2
|
50
|
+
|
51
|
+
# The minor component of this version of the Net::SSH library
|
52
|
+
MINOR = 0
|
17
53
|
|
18
|
-
|
54
|
+
# The tiny component of this version of the Net::SSH library
|
55
|
+
TINY = 0
|
56
|
+
|
57
|
+
# The prerelease component of this version of the Net::SSH library
|
58
|
+
# nil allowed
|
59
|
+
PRE = nil
|
60
|
+
|
61
|
+
# The current version of the Net::SSH library as a Version instance
|
62
|
+
CURRENT = new(*[MAJOR, MINOR, TINY, PRE].compact)
|
63
|
+
|
64
|
+
# The current version of the Net::SSH library as a String
|
65
|
+
STRING = CURRENT.to_s
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsFADBBMQ8wDQYDVQQDDAZuZXRz
|
3
|
+
c2gxGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZFgNj
|
4
|
+
b20wHhcNMTgwNjA0MTA0OTQwWhcNMTkwNjA0MTA0OTQwWjBBMQ8wDQYDVQQDDAZu
|
5
|
+
ZXRzc2gxGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZ
|
6
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGJ4TbZ9H+qZ08
|
7
|
+
pQfJhPJTHaDCyQvCsKTFrL5O9z3tllQ7B/zksMMM+qFBpNYu9HCcg4yBATacE/PB
|
8
|
+
qVVyUrpr6lbH/XwoN5ljXm+bdCfmnjZvTCL2FTE6o+bcnaF0IsJyC0Q2B1fbWdXN
|
9
|
+
6Off1ZWoUk6We2BIM1bn6QJLxBpGyYhvOPXsYoqSuzDf2SJDDsWFZ8kV5ON13Ohm
|
10
|
+
JbBzn0oD8HF8FuYOewwsC0C1q4w7E5GtvHcQ5juweS7+RKsyDcVcVrLuNzoGRttS
|
11
|
+
KP4yMn+TzaXijyjRg7gECfJr3TGASaA4bQsILFGG5dAWcwO4OMrZedR7SHj/o0Kf
|
12
|
+
3gL7P0axAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
13
|
+
BBQF8qLA7Z4zg0SJGtUbv3eoQ8tjIzAfBgNVHREEGDAWgRRuZXRzc2hAc29sdXRp
|
14
|
+
b3VzLmNvbTAfBgNVHRIEGDAWgRRuZXRzc2hAc29sdXRpb3VzLmNvbTANBgkqhkiG
|
15
|
+
9w0BAQsFAAOCAQEAXnNaYXWVr/sCsfZdza+yBBOobYPgjOgDRfqNO2YX8RFEyDNB
|
16
|
+
AxBCQIF4OeUaoMbTQTVh24MwaDHpDTgqBAEfSs9h41lZewQaw4QUGJ6yxNVzO194
|
17
|
+
2vYohv9vHpodBukIpUFGk40vQq8nOq2MzVyCb911wnt5d0ZQg+UJf5tdMYvRvATa
|
18
|
+
F/dkTaqhq3wq/JJRghq8fJUqWN5aBtMQb/61z5J3mKAUJsUN2/VdDph2fRPDpECa
|
19
|
+
uWREKzWwXbaB96/ZyzoyP7FsQBLgdDL++g2nF0neCENc5Wj5IlQZiH0a2+X3jAgm
|
20
|
+
7UnoE3CP9Tk5GHVUina5gPyzl0VI4s4pYCPehQ==
|
21
|
+
-----END CERTIFICATE-----
|
data/net-scp.gemspec
CHANGED
@@ -1,69 +1,46 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
1
|
|
6
|
-
|
7
|
-
s.name = "net-scp"
|
8
|
-
s.version = "1.2.1"
|
2
|
+
require_relative 'lib/net/scp/version'
|
9
3
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "net-scp"
|
6
|
+
spec.version = Net::SCP::Version::STRING
|
7
|
+
spec.authors = ["Jamis Buck", "Delano Mandelbaum", "Mikl\u{f3}s Fazekas"]
|
8
|
+
spec.email = ["net-ssh@solutious.com"]
|
9
|
+
|
10
|
+
if ENV['NET_SSH_BUILDGEM_SIGNED']
|
11
|
+
spec.cert_chain = ["net-scp-public_cert.pem"]
|
12
|
+
spec.signing_key = "/mnt/gem/net-ssh-private_key.pem"
|
13
|
+
end
|
14
|
+
|
15
|
+
spec.summary = %q{A pure Ruby implementation of the SCP client protocol.}
|
16
|
+
spec.description = %q{A pure Ruby implementation of the SCP client protocol}
|
17
|
+
spec.homepage = "https://github.com/net-ssh/net-scp"
|
18
|
+
spec.license = "MIT"
|
19
|
+
spec.required_rubygems_version = Gem::Requirement.new(">= 0") if spec.respond_to? :required_rubygems_version=
|
20
|
+
|
21
|
+
spec.extra_rdoc_files = [
|
17
22
|
"LICENSE.txt",
|
18
23
|
"README.rdoc"
|
19
24
|
]
|
20
|
-
s.files = [
|
21
|
-
".travis.yml",
|
22
|
-
"CHANGES.txt",
|
23
|
-
"LICENSE.txt",
|
24
|
-
"Manifest",
|
25
|
-
"README.rdoc",
|
26
|
-
"Rakefile",
|
27
|
-
"gem-public_cert.pem",
|
28
|
-
"lib/net/scp.rb",
|
29
|
-
"lib/net/scp/download.rb",
|
30
|
-
"lib/net/scp/errors.rb",
|
31
|
-
"lib/net/scp/upload.rb",
|
32
|
-
"lib/net/scp/version.rb",
|
33
|
-
"lib/uri/open-scp.rb",
|
34
|
-
"lib/uri/scp.rb",
|
35
|
-
"net-scp.gemspec",
|
36
|
-
"setup.rb",
|
37
|
-
"test/common.rb",
|
38
|
-
"test/test_all.rb",
|
39
|
-
"test/test_download.rb",
|
40
|
-
"test/test_scp.rb",
|
41
|
-
"test/test_upload.rb"
|
42
|
-
]
|
43
|
-
s.homepage = "https://github.com/net-ssh/net-scp"
|
44
|
-
s.licenses = ["MIT"]
|
45
|
-
s.require_paths = ["lib"]
|
46
|
-
s.rubyforge_project = "net-scp"
|
47
|
-
s.rubygems_version = "1.8.23"
|
48
|
-
s.signing_key = "/mnt/gem/gem-private_key.pem"
|
49
|
-
s.summary = "A pure Ruby implementation of the SCP client protocol"
|
50
25
|
|
51
|
-
|
52
|
-
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
if spec.respond_to? :specification_version then
|
30
|
+
spec.specification_version = 3
|
53
31
|
|
54
32
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
55
|
-
|
56
|
-
|
57
|
-
|
33
|
+
spec.add_runtime_dependency(%q<net-ssh>, [">= 2.6.5", "< 6.0.0"])
|
34
|
+
spec.add_development_dependency(%q<test-unit>, [">= 0"])
|
35
|
+
spec.add_development_dependency(%q<mocha>, [">= 0"])
|
58
36
|
else
|
59
|
-
|
60
|
-
|
61
|
-
|
37
|
+
spec.add_dependency(%q<net-ssh>, [">= 2.6.5", "< 6.0.0"])
|
38
|
+
spec.add_dependency(%q<test-unit>, [">= 0"])
|
39
|
+
spec.add_dependency(%q<mocha>, [">= 0"])
|
62
40
|
end
|
63
41
|
else
|
64
|
-
|
65
|
-
|
66
|
-
|
42
|
+
spec.add_dependency(%q<net-ssh>, [">= 2.6.5", "< 6.0.0"])
|
43
|
+
spec.add_dependency(%q<test-unit>, [">= 0"])
|
44
|
+
spec.add_dependency(%q<mocha>, [">= 0"])
|
67
45
|
end
|
68
46
|
end
|
69
|
-
|