diskman 1.0.9 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 356141ac045d586f1d8dec632762474496de583c2cd1f9199b392ad273baf123
4
- data.tar.gz: '09057fecdaa82c8fddac9a7ed21c2d172f0cc1e342331d226967f908e0330906'
3
+ metadata.gz: 43341f349eb41e671944d772c80251464f79466e80a25adc30e03a26c2815d90
4
+ data.tar.gz: 86c14d2131fb7b85890630ee23a7030d9577929aebd9eb3b09f69a89097845b0
5
5
  SHA512:
6
- metadata.gz: 1c5c298f9849ef5e25d952b8bc782749c2b98075ef9289f2379f708932c4041bb301cb22dcbe0fa90337fae41103af8b8f9c0079ba7a414935222094b621ffc7
7
- data.tar.gz: e840f6c4bb49c3a6f8559494986c082515d3ff8f8c9b705d9d4f9a32bd9794308e21d6044296a03c5dd8305f34a626ce10d2aeb7cfb488491c1931bc9da9d4cb
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
- #{File.basename($0)} write <file>
57
- #{File.basename($0)} fdisk
58
- #{File.basename($0)} mkfs [--list]
59
- #{File.basename($0)} ( --version | --help )
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 this help
81
+ -h, --help Show help
64
82
  EOF
65
83
 
66
84
  begin
@@ -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 '%6d. %s' % [i + 1, device]
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,7 @@
1
+ module Command
2
+ class ChooseDevice
3
+ def run
4
+ puts RootDevice.choose.path
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Command
2
+ class ChoosePartition
3
+ def run
4
+ puts RootDevice.choose.choose_with_partitions.path
5
+ end
6
+ end
7
+ end
@@ -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
@@ -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=%dK status=progress'
21
- dd % [path, @path, 4096]
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
@@ -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
- # If sudo is true, ensures sudo is ready before running the command.
12
- # If safe is true, ensures the user definitely wants to run the command
13
- # before running it.
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]
@@ -1,3 +1,3 @@
1
1
  module Diskman
2
- VERSION = '1.0.9'
2
+ VERSION = '1.3.0'
3
3
  end
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.9
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: 2021-11-17 00:00:00.000000000 Z
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
- - MIT
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.2.29
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