diskman 1.0.9 → 1.3.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 +23 -5
- data/lib/diskman/chooser.rb +12 -12
- data/lib/diskman/commands/choose_device.rb +7 -0
- data/lib/diskman/commands/choose_partition.rb +7 -0
- 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 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 43341f349eb41e671944d772c80251464f79466e80a25adc30e03a26c2815d90
|
|
4
|
+
data.tar.gz: 86c14d2131fb7b85890630ee23a7030d9577929aebd9eb3b09f69a89097845b0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 84d64b05256f09d08f828397b2c32aaa5fb6398100bbd53bdb0d2a89f712623d3873c47869848e3a2abc82ffbb502b0f79aeb36c429e50e013644f9341375724
|
|
7
|
+
data.tar.gz: da21b4b198349178d3c0285446746f5da0b9077fc71ddd8aff272bfa8935ab5f97732d3d7b463974adf41eff05b7dd1f4212b1d6fe40e79d31d9f0c931f58602
|
data/bin/diskman
CHANGED
|
@@ -8,9 +8,13 @@ Params = Struct.new(
|
|
|
8
8
|
:version,
|
|
9
9
|
:list,
|
|
10
10
|
:write,
|
|
11
|
+
:clone,
|
|
11
12
|
:fdisk,
|
|
12
13
|
:mkfs,
|
|
13
14
|
:file,
|
|
15
|
+
:choose,
|
|
16
|
+
:device,
|
|
17
|
+
:partition,
|
|
14
18
|
keyword_init: true,
|
|
15
19
|
)
|
|
16
20
|
|
|
@@ -28,9 +32,13 @@ class Main
|
|
|
28
32
|
version: @opts['--version'],
|
|
29
33
|
list: @opts['--list'],
|
|
30
34
|
write: @opts['write'],
|
|
35
|
+
clone: @opts['clone'],
|
|
31
36
|
fdisk: @opts['fdisk'],
|
|
32
37
|
mkfs: @opts['mkfs'],
|
|
33
38
|
file: @opts['<file>'],
|
|
39
|
+
choose: @opts['choose'],
|
|
40
|
+
device: @opts['device'],
|
|
41
|
+
partition: @opts['partition'],
|
|
34
42
|
)
|
|
35
43
|
end
|
|
36
44
|
|
|
@@ -44,23 +52,33 @@ class Main
|
|
|
44
52
|
Command::Mkfs.new.run(list: params.list)
|
|
45
53
|
elsif params.write
|
|
46
54
|
Command::Write.new.run(file: params.file)
|
|
55
|
+
elsif params.clone
|
|
56
|
+
Command::Clone.new.run(file: params.file)
|
|
47
57
|
elsif params.fdisk
|
|
48
58
|
Command::Fdisk.new.run
|
|
59
|
+
elsif params.choose && params.device
|
|
60
|
+
Command::ChooseDevice.new.run
|
|
61
|
+
elsif params.choose && params.partition
|
|
62
|
+
Command::ChoosePartition.new.run
|
|
49
63
|
end
|
|
50
64
|
rescue Interrupt # rubocop:disable Lint/SuppressedException
|
|
51
65
|
end
|
|
52
66
|
end
|
|
53
67
|
|
|
68
|
+
PROGRAM_NAME = File.basename($PROGRAM_NAME)
|
|
69
|
+
|
|
54
70
|
usage = <<~EOF
|
|
55
71
|
Usage:
|
|
56
|
-
#{
|
|
57
|
-
#{
|
|
58
|
-
#{
|
|
59
|
-
#{
|
|
72
|
+
#{PROGRAM_NAME} write <file>
|
|
73
|
+
#{PROGRAM_NAME} clone <file>
|
|
74
|
+
#{PROGRAM_NAME} fdisk
|
|
75
|
+
#{PROGRAM_NAME} mkfs [--list]
|
|
76
|
+
#{PROGRAM_NAME} choose ( device | partition )
|
|
77
|
+
#{PROGRAM_NAME} ( --version | --help )
|
|
60
78
|
|
|
61
79
|
Options:
|
|
62
80
|
-v, --version Show version
|
|
63
|
-
-h, --help Show
|
|
81
|
+
-h, --help Show help
|
|
64
82
|
EOF
|
|
65
83
|
|
|
66
84
|
begin
|
data/lib/diskman/chooser.rb
CHANGED
|
@@ -17,37 +17,37 @@ module Diskman
|
|
|
17
17
|
|
|
18
18
|
def select
|
|
19
19
|
if @items.length == 0
|
|
20
|
-
puts 'No %s found'.yellow % @plural
|
|
20
|
+
$stderr.puts 'No %s found'.yellow % @plural
|
|
21
21
|
raise Interrupt
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
if @items.length == 1
|
|
25
|
-
puts 'Found the following %s.' % label
|
|
25
|
+
$stderr.puts 'Found the following %s.' % label
|
|
26
26
|
else
|
|
27
|
-
puts 'Choose from the following %s.' % @plural
|
|
27
|
+
$stderr.puts 'Choose from the following %s.' % @plural
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
puts
|
|
30
|
+
$stderr.puts
|
|
31
31
|
|
|
32
32
|
@items.each_with_index do |device, i|
|
|
33
|
-
puts '%
|
|
33
|
+
$stderr.puts '%5d. %s' % [i + 1, device]
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
puts
|
|
36
|
+
$stderr.puts
|
|
37
37
|
|
|
38
38
|
if @items.length == 1
|
|
39
|
-
puts 'Press enter to select it.'
|
|
39
|
+
$stderr.puts 'Press enter to select it.'
|
|
40
40
|
$stdin.gets
|
|
41
41
|
return @items.first
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
puts 'Enter your selection.'
|
|
45
|
-
puts
|
|
46
|
-
print '> '
|
|
44
|
+
$stderr.puts 'Enter your selection.'
|
|
45
|
+
$stderr.puts
|
|
46
|
+
$stderr.print '> '
|
|
47
47
|
|
|
48
48
|
selection = $stdin.gets.chomp
|
|
49
49
|
|
|
50
|
-
puts
|
|
50
|
+
$stderr.puts
|
|
51
51
|
|
|
52
52
|
if selection.length == 0
|
|
53
53
|
raise Interrupt
|
|
@@ -56,7 +56,7 @@ module Diskman
|
|
|
56
56
|
selection = selection.to_i
|
|
57
57
|
|
|
58
58
|
if selection <= 0 || selection > @items.length
|
|
59
|
-
puts 'Invalid selection'.red
|
|
59
|
+
$stderr.puts 'Invalid selection'.red
|
|
60
60
|
raise Interrupt
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -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.3.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-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: colorize
|
|
@@ -52,48 +52,6 @@ dependencies:
|
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '3.0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rake
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '13.0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '13.0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rspec
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.8'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.8'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: simplecov
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 0.21.0
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 0.21.0
|
|
97
55
|
description:
|
|
98
56
|
email:
|
|
99
57
|
executables:
|
|
@@ -104,6 +62,9 @@ files:
|
|
|
104
62
|
- bin/diskman
|
|
105
63
|
- lib/diskman.rb
|
|
106
64
|
- lib/diskman/chooser.rb
|
|
65
|
+
- lib/diskman/commands/choose_device.rb
|
|
66
|
+
- lib/diskman/commands/choose_partition.rb
|
|
67
|
+
- lib/diskman/commands/clone.rb
|
|
107
68
|
- lib/diskman/commands/fdisk.rb
|
|
108
69
|
- lib/diskman/commands/mkfs.rb
|
|
109
70
|
- lib/diskman/commands/write.rb
|
|
@@ -115,7 +76,7 @@ files:
|
|
|
115
76
|
- lib/diskman/version.rb
|
|
116
77
|
homepage: https://github.com/crdx/diskman
|
|
117
78
|
licenses:
|
|
118
|
-
-
|
|
79
|
+
- GPLv3
|
|
119
80
|
metadata:
|
|
120
81
|
rubygems_mfa_required: 'true'
|
|
121
82
|
post_install_message:
|
|
@@ -133,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
133
94
|
- !ruby/object:Gem::Version
|
|
134
95
|
version: '0'
|
|
135
96
|
requirements: []
|
|
136
|
-
rubygems_version: 3.
|
|
97
|
+
rubygems_version: 3.3.25
|
|
137
98
|
signing_key:
|
|
138
99
|
specification_version: 4
|
|
139
100
|
summary: Interactive command line interface for safely managing disks
|