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 | 
             
              - - ">="
         |