bfs-scp 0.6.1 → 0.7.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 +4 -4
- data/bfs-scp.gemspec +1 -1
- data/lib/bfs/bucket/scp.rb +16 -26
- data/spec/bfs/bucket/scp_spec.rb +7 -0
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2d33dfdf2a7f5d80e33d0392f3c52feffe3c5be8b63573ffb7fb2b6fd88bef1
|
4
|
+
data.tar.gz: e0858d6cd3738f575e61ab3f3cb010ecc7e1683788363c138e7e2c2633602b35
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14925bd3e352f5e20c8176c2f0c7cb8826f9cb25f8ac3a1b7fbf05015793319e330bc957da393c3830ca64516c212f015aa6ae2b88e02cc085a85b410df970c1
|
7
|
+
data.tar.gz: 17611abf696df83bf868761988fa6208e39dd830b735c7e2ec8a54f4db08ce35daad1259f3ed551233159d7ccfc22ea32e8cef71e38c39fbb8e8708720b0aad7
|
data/bfs-scp.gemspec
CHANGED
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.files = `git ls-files`.split("\n")
|
16
16
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
17
17
|
s.require_paths = ['lib']
|
18
|
-
s.required_ruby_version = '>= 2.
|
18
|
+
s.required_ruby_version = '>= 2.6.0'
|
19
19
|
|
20
20
|
s.add_dependency 'bfs', s.version
|
21
21
|
s.add_dependency 'net-scp'
|
data/lib/bfs/bucket/scp.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'bfs'
|
2
2
|
require 'net/scp'
|
3
|
-
require '
|
3
|
+
require 'net/ssh'
|
4
4
|
require 'shellwords'
|
5
5
|
|
6
6
|
module BFS
|
@@ -28,16 +28,11 @@ module BFS
|
|
28
28
|
# @option opts [Integer] :keepalive_interval interval if keepalive enabled. Default: 300.
|
29
29
|
# @option opts [Array<String>] :keys an array of file names of private keys to use for publickey and hostbased authentication.
|
30
30
|
# @option opts [Boolean|Symbol] :verify_host_key specifying how strict host-key verification should be, either false, true, :very, or :secure.
|
31
|
-
def initialize(host, **opts)
|
32
|
-
opts = opts.dup
|
33
|
-
opts.keys.each do |key|
|
34
|
-
val = opts.delete(key)
|
35
|
-
opts[key.to_sym] = val unless val.nil?
|
36
|
-
end
|
31
|
+
def initialize(host, prefix: nil, **opts)
|
37
32
|
super(**opts)
|
38
33
|
|
39
|
-
@prefix =
|
40
|
-
@client = Net::SCP.start(host, nil, **opts)
|
34
|
+
@prefix = prefix
|
35
|
+
@client = Net::SCP.start(host, nil, **opts.slice(*Net::SSH::VALID_OPTIONS))
|
41
36
|
|
42
37
|
if @prefix # rubocop:disable Style/GuardClause
|
43
38
|
@prefix = norm_path(@prefix) + '/'
|
@@ -62,10 +57,10 @@ module BFS
|
|
62
57
|
def info(path, **_opts)
|
63
58
|
full = full_path(path)
|
64
59
|
path = norm_path(path)
|
65
|
-
out = sh! 'stat', '-c', '%s;%Z', full
|
60
|
+
out = sh! 'stat', '-c', '%s;%Z;%a', full
|
66
61
|
|
67
|
-
size, epoch = out.strip.split(';',
|
68
|
-
BFS::FileInfo.new(path, size, Time.at(epoch))
|
62
|
+
size, epoch, mode = out.strip.split(';', 3)
|
63
|
+
BFS::FileInfo.new(path: path, size: size.to_i, mtime: Time.at(epoch.to_i), mode: BFS.norm_mode(mode))
|
69
64
|
rescue CommandError => e
|
70
65
|
e.status == 1 ? raise(BFS::FileNotFound, path) : raise
|
71
66
|
end
|
@@ -73,13 +68,13 @@ module BFS
|
|
73
68
|
# Creates a new file and opens it for writing
|
74
69
|
# @option opts [String|Encoding] :encoding Custom file encoding.
|
75
70
|
# @option opts [Integer] :perm Custom file permission, default: 0600.
|
76
|
-
def create(path, **opts, &block)
|
71
|
+
def create(path, encoding: self.encoding, perm: self.perm, **opts, &block)
|
77
72
|
full = full_path(path)
|
78
|
-
|
79
|
-
|
80
|
-
temp = BFS::TempWriter.new(path,
|
73
|
+
|
74
|
+
opts[:preserve] = true if perm && !opts.key?(:preserve)
|
75
|
+
temp = BFS::TempWriter.new(path, encoding: encoding, perm: perm) do |temp_path|
|
81
76
|
mkdir_p File.dirname(full)
|
82
|
-
@client.upload!(temp_path, full,
|
77
|
+
@client.upload!(temp_path, full, **opts)
|
83
78
|
end
|
84
79
|
return temp unless block
|
85
80
|
|
@@ -91,14 +86,13 @@ module BFS
|
|
91
86
|
end
|
92
87
|
|
93
88
|
# Opens an existing file for reading
|
94
|
-
def open(path, **
|
89
|
+
def open(path, encoding: self.encoding, tempdir: nil, **_opts, &block)
|
95
90
|
full = full_path(path)
|
96
|
-
|
97
|
-
temp = Tempfile.new(File.basename(path), encoding: enc)
|
91
|
+
temp = Tempfile.new(File.basename(path), tempdir, encoding: encoding)
|
98
92
|
temp.close
|
99
93
|
|
100
94
|
@client.download!(full, temp.path)
|
101
|
-
File.open(temp.path, encoding:
|
95
|
+
File.open(temp.path, encoding: encoding, &block)
|
102
96
|
rescue Net::SCP::Error
|
103
97
|
raise BFS::FileNotFound, path
|
104
98
|
end
|
@@ -189,11 +183,7 @@ module BFS
|
|
189
183
|
end
|
190
184
|
end
|
191
185
|
|
192
|
-
BFS.register('scp', 'ssh') do |url|
|
193
|
-
opts = {}
|
194
|
-
CGI.parse(url.query.to_s).each do |key, values|
|
195
|
-
opts[key.to_sym] = values.first
|
196
|
-
end
|
186
|
+
BFS.register('scp', 'ssh') do |url, opts|
|
197
187
|
opts[:user] ||= CGI.unescape(url.user) if url.user
|
198
188
|
opts[:password] ||= CGI.unescape(url.password) if url.password
|
199
189
|
opts[:port] ||= url.port if url.port
|
data/spec/bfs/bucket/scp_spec.rb
CHANGED
@@ -45,4 +45,11 @@ RSpec.describe BFS::Bucket::SCP, if: run_spec do
|
|
45
45
|
abs.close
|
46
46
|
rel.close
|
47
47
|
end
|
48
|
+
|
49
|
+
it 'should support custom perms' do
|
50
|
+
blob = BFS::Blob.new("scp://root:root@127.0.0.1:7022/#{SecureRandom.uuid}/file.txt")
|
51
|
+
blob.create(perm: 0o666) {|w| w.write 'foo' }
|
52
|
+
expect(blob.info.mode).to eq(0o666)
|
53
|
+
blob.close
|
54
|
+
end
|
48
55
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bfs-scp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dimitrij Denissenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bfs
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.7.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.7.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: net-scp
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -60,7 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
60
|
requirements:
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: 2.
|
63
|
+
version: 2.6.0
|
64
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|