diskman 1.0.8 → 1.1.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/bin/diskman +25 -8
- data/lib/diskman/commands/clone.rb +19 -0
- data/lib/diskman/device.rb +7 -2
- data/lib/diskman/system.rb +4 -14
- data/lib/diskman/version.rb +1 -1
- metadata +7 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7fc1b38621654bc6c54e2c341508f7a34bad56edea11e3d6a1430fb386aa7998
         | 
| 4 | 
            +
              data.tar.gz: ef7d21e5d8fd39f346e755fd8cc961c38d0b0f90fbd1a8a8326faacd5021ce39
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1633d95b48a889716644ec065f124add986f10eaa11ed8386b4c64cf354bcf0a909231e00d727637ff6f2821fe1282cf7f2e37a7ce648c3bfe58224c86ac298d
         | 
| 7 | 
            +
              data.tar.gz: 6e3d1a87a326e762cef359c67ba782f87a63f8f8f658b6dadbb21f3bf6ad2c13e1db6aaf550759384f6ba699f7deb5f0422ff1982ac68aff04709fc05c26301f
         | 
    
        data/bin/diskman
    CHANGED
    
    | @@ -2,7 +2,18 @@ | |
| 2 2 | 
             
            require_relative '../lib/diskman'
         | 
| 3 3 | 
             
            require 'docopt'
         | 
| 4 4 |  | 
| 5 | 
            -
            include Diskman | 
| 5 | 
            +
            include Diskman
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Params = Struct.new(
         | 
| 8 | 
            +
                :version,
         | 
| 9 | 
            +
                :list,
         | 
| 10 | 
            +
                :write,
         | 
| 11 | 
            +
                :clone,
         | 
| 12 | 
            +
                :fdisk,
         | 
| 13 | 
            +
                :mkfs,
         | 
| 14 | 
            +
                :file,
         | 
| 15 | 
            +
                keyword_init: true,
         | 
| 16 | 
            +
            )
         | 
| 6 17 |  | 
| 7 18 | 
             
            class Main
         | 
| 8 19 | 
             
                def initialize(opts)
         | 
| @@ -14,14 +25,15 @@ class Main | |
| 14 25 | 
             
                end
         | 
| 15 26 |  | 
| 16 27 | 
             
                def params
         | 
| 17 | 
            -
                    @params ||=  | 
| 28 | 
            +
                    @params ||= Params.new(
         | 
| 18 29 | 
             
                        version: @opts['--version'],
         | 
| 19 30 | 
             
                        list: @opts['--list'],
         | 
| 20 31 | 
             
                        write: @opts['write'],
         | 
| 32 | 
            +
                        clone: @opts['clone'],
         | 
| 21 33 | 
             
                        fdisk: @opts['fdisk'],
         | 
| 22 34 | 
             
                        mkfs: @opts['mkfs'],
         | 
| 23 35 | 
             
                        file: @opts['<file>'],
         | 
| 24 | 
            -
                     | 
| 36 | 
            +
                    )
         | 
| 25 37 | 
             
                end
         | 
| 26 38 |  | 
| 27 39 | 
             
                def run
         | 
| @@ -34,6 +46,8 @@ class Main | |
| 34 46 | 
             
                        Command::Mkfs.new.run(list: params.list)
         | 
| 35 47 | 
             
                    elsif params.write
         | 
| 36 48 | 
             
                        Command::Write.new.run(file: params.file)
         | 
| 49 | 
            +
                    elsif params.clone
         | 
| 50 | 
            +
                        Command::Clone.new.run(file: params.file)
         | 
| 37 51 | 
             
                    elsif params.fdisk
         | 
| 38 52 | 
             
                        Command::Fdisk.new.run
         | 
| 39 53 | 
             
                    end
         | 
| @@ -41,16 +55,19 @@ class Main | |
| 41 55 | 
             
                end
         | 
| 42 56 | 
             
            end
         | 
| 43 57 |  | 
| 58 | 
            +
            PROGRAM_NAME = File.basename($PROGRAM_NAME)
         | 
| 59 | 
            +
             | 
| 44 60 | 
             
            usage = <<~EOF
         | 
| 45 61 | 
             
                Usage:
         | 
| 46 | 
            -
                    #{ | 
| 47 | 
            -
                    #{ | 
| 48 | 
            -
                    #{ | 
| 49 | 
            -
                    #{ | 
| 62 | 
            +
                    #{PROGRAM_NAME} write <file>
         | 
| 63 | 
            +
                    #{PROGRAM_NAME} clone <file>
         | 
| 64 | 
            +
                    #{PROGRAM_NAME} fdisk
         | 
| 65 | 
            +
                    #{PROGRAM_NAME} mkfs [--list]
         | 
| 66 | 
            +
                    #{PROGRAM_NAME} ( --version | --help )
         | 
| 50 67 |  | 
| 51 68 | 
             
                Options:
         | 
| 52 69 | 
             
                    -v, --version    Show version
         | 
| 53 | 
            -
                    -h, --help       Show  | 
| 70 | 
            +
                    -h, --help       Show help
         | 
| 54 71 | 
             
            EOF
         | 
| 55 72 |  | 
| 56 73 | 
             
            begin
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Command
         | 
| 2 | 
            +
                class Clone
         | 
| 3 | 
            +
                    def run(file:)
         | 
| 4 | 
            +
                        if File.exist?(file)
         | 
| 5 | 
            +
                            puts ('File exists: ' + file).red
         | 
| 6 | 
            +
                            raise Interrupt
         | 
| 7 | 
            +
                        end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                        device = RootDevice.choose
         | 
| 10 | 
            +
                        cmd = device.get_clone_command(file)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                        puts "File:    #{file.yellow}"
         | 
| 13 | 
            +
                        puts "Device:  #{device.to_s.yellow}"
         | 
| 14 | 
            +
                        puts "Command: #{cmd.yellow}"
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                        System.exec!(cmd)
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
            end
         | 
    
        data/lib/diskman/device.rb
    CHANGED
    
    | @@ -17,8 +17,13 @@ module Diskman | |
| 17 17 | 
             
                    end
         | 
| 18 18 |  | 
| 19 19 | 
             
                    def get_write_command(path)
         | 
| 20 | 
            -
                        dd = 'sudo dd if="%s" of="%s" bs=% | 
| 21 | 
            -
                        dd % [path, @path,  | 
| 20 | 
            +
                        dd = 'sudo dd if="%s" of="%s" bs=%dM status=progress conv=fsync'
         | 
| 21 | 
            +
                        dd % [path, @path, 4]
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    def get_clone_command(path)
         | 
| 25 | 
            +
                        dd = 'sudo dd if="%s" of="%s" bs=%dM status=progress conv=fsync'
         | 
| 26 | 
            +
                        dd % [@path, path, 4]
         | 
| 22 27 | 
             
                    end
         | 
| 23 28 |  | 
| 24 29 | 
             
                    def to_s
         | 
    
        data/lib/diskman/system.rb
    CHANGED
    
    | @@ -1,19 +1,10 @@ | |
| 1 1 | 
             
            module Diskman
         | 
| 2 2 | 
             
                module System
         | 
| 3 | 
            -
                    # If sudo prompts for the password when a pipeline with pv has already
         | 
| 4 | 
            -
                    # started then we're unable to enter the password. Run sudo --validate
         | 
| 5 | 
            -
                    # first to ensure that we are preauthenticated.
         | 
| 6 | 
            -
                    def self.prepare_sudo_session!
         | 
| 7 | 
            -
                        system('sudo --validate')
         | 
| 8 | 
            -
                    end
         | 
| 9 | 
            -
             | 
| 10 3 | 
             
                    # Execute a command.
         | 
| 11 | 
            -
                    # | 
| 12 | 
            -
                    # If safe is true, ensures the user definitely wants to run the command
         | 
| 13 | 
            -
                     | 
| 14 | 
            -
                    def self.exec!(cmd, safe: true, sudo: true)
         | 
| 4 | 
            +
                    #
         | 
| 5 | 
            +
                    # If safe is true, ensures the user definitely wants to run the command before running it.
         | 
| 6 | 
            +
                    def self.exec!(cmd, safe: true)
         | 
| 15 7 | 
             
                        Confirmer.check! if safe
         | 
| 16 | 
            -
                        prepare_sudo_session! if sudo
         | 
| 17 8 | 
             
                        puts
         | 
| 18 9 | 
             
                        exec(cmd)
         | 
| 19 10 | 
             
                    end
         | 
| @@ -22,8 +13,7 @@ module Diskman | |
| 22 13 | 
             
                    def self.bytes2human(b)
         | 
| 23 14 | 
             
                        return '0B' if b <= 0
         | 
| 24 15 |  | 
| 25 | 
            -
                        # Use 1000 to match the misleading way disk capacities are
         | 
| 26 | 
            -
                        # advertised.
         | 
| 16 | 
            +
                        # Use 1000 to match the misleading way disk capacities are advertised.
         | 
| 27 17 | 
             
                        k = 1000
         | 
| 28 18 |  | 
| 29 19 | 
             
                        suffixes = %w[T G M K B]
         | 
    
        data/lib/diskman/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: diskman
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0 | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - crdx
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-12-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: colorize
         | 
| @@ -104,6 +104,7 @@ files: | |
| 104 104 | 
             
            - bin/diskman
         | 
| 105 105 | 
             
            - lib/diskman.rb
         | 
| 106 106 | 
             
            - lib/diskman/chooser.rb
         | 
| 107 | 
            +
            - lib/diskman/commands/clone.rb
         | 
| 107 108 | 
             
            - lib/diskman/commands/fdisk.rb
         | 
| 108 109 | 
             
            - lib/diskman/commands/mkfs.rb
         | 
| 109 110 | 
             
            - lib/diskman/commands/write.rb
         | 
| @@ -115,8 +116,9 @@ files: | |
| 115 116 | 
             
            - lib/diskman/version.rb
         | 
| 116 117 | 
             
            homepage: https://github.com/crdx/diskman
         | 
| 117 118 | 
             
            licenses:
         | 
| 118 | 
            -
            -  | 
| 119 | 
            -
            metadata: | 
| 119 | 
            +
            - GPLv3
         | 
| 120 | 
            +
            metadata:
         | 
| 121 | 
            +
              rubygems_mfa_required: 'true'
         | 
| 120 122 | 
             
            post_install_message:
         | 
| 121 123 | 
             
            rdoc_options: []
         | 
| 122 124 | 
             
            require_paths:
         | 
| @@ -132,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 132 134 | 
             
                - !ruby/object:Gem::Version
         | 
| 133 135 | 
             
                  version: '0'
         | 
| 134 136 | 
             
            requirements: []
         | 
| 135 | 
            -
            rubygems_version: 3. | 
| 137 | 
            +
            rubygems_version: 3.3.25
         | 
| 136 138 | 
             
            signing_key:
         | 
| 137 139 | 
             
            specification_version: 4
         | 
| 138 140 | 
             
            summary: Interactive command line interface for safely managing disks
         |