storazzo 0.4.10 → 0.5.2

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.
@@ -4,54 +4,52 @@
4
4
  require 'digest'
5
5
 
6
6
  module Storazzo
7
- class Storazzo::RicDisk
8
-
7
+ class Storazzo::RicDisk
9
8
  include Hashify
10
- include Storazzo::Common
11
- extend Storazzo::Common
9
+ include Storazzo::Common
10
+ extend Storazzo::Common
12
11
  extend Storazzo::Colors
13
12
  require 'socket'
14
13
 
15
-
16
- ## Instance variables
14
+ ## Instance variables
17
15
 
18
16
  # in order of finding, so the first will be the one we actually READ and use. I could looknat the date but cmon...
19
17
  # These are the files I do accept.
20
- ConfigFiles = %W{ ricdisk.yaml .ricdisk storazzo.yaml }
21
- DefaultConfigFile = "storazzo.yaml" # .ricdisk }
18
+ ConfigFiles = %W{ricdisk.yaml .ricdisk storazzo.yaml}
19
+ DefaultConfigFile = "storazzo.yaml" # .ricdisk }
22
20
  RicdiskVersion = '2.1'
23
21
  RicdiskHistory = [
24
22
  '2022-07-29 2.1 Added timestamp',
25
23
  '2022-07-28 2.0 Added tags, siz, unique_hash, computation_hostname, wr, ...',
26
- ]
24
+ ]
27
25
  DefaultGemfileTestDiskFolder = Storazzo.root + "/var/test/disks/" # was: @@default_gemfile_test_disks_folder
28
26
  # Immutable
29
- DefaultMediaFolders = %w{
30
- /Volumes/
31
- /mnt/
32
- }.append(DefaultGemfileTestDiskFolder ).append("/media/#{ENV["USER"]}/" )
33
-
34
- # # todo substitute with protobuf..
35
- attr_accessor :name, :description, :ricdisk_file, :ricdisk_file_full, :local_mountpoint, :wr, :path,
36
- :ricdisk_file_empty, :size, :active_dirs, :ricdisk_version,
27
+ DefaultMediaFolders = %w{
28
+ /Volumes/
29
+ /mnt/
30
+ }.append(DefaultGemfileTestDiskFolder).append("/media/#{ENV["USER"]}/")
31
+
32
+ # # todo substitute with protobuf..
33
+ attr_accessor :name, :description, :ricdisk_file, :ricdisk_file_full, :local_mountpoint, :wr, :path,
34
+ :ricdisk_file_empty, :size, :active_dirs, :ricdisk_version,
37
35
  :unique_hash # new 202207
38
36
 
37
+ ################################
38
+ ## INSTANCE methods
39
+ ################################
39
40
 
40
- ################################
41
- ## INSTANCE methods
42
- ################################
43
-
44
- def initialize_old_way(path, opts={})
41
+ def initialize_old_way(path, opts = {})
45
42
  raise "Now I dont want a string in input, I want an OBJECT < Storazzo::Media::AbstractRicDisk"
46
43
  end
47
44
 
48
-
49
- def initialize(ric_disk_object, opts={})
50
- verbose = opts.fetch :verbose, true
51
- pverbose verbose, "This needs an object of type Storazzo::Media::AbstractRicDisk now (this case: #{ric_disk_object.class})"
45
+ def initialize(ric_disk_object, opts = {})
46
+ verbose = opts.fetch :verbose, true
47
+ pverbose verbose,
48
+ "This needs an object of type Storazzo::Media::AbstractRicDisk now (this case: #{ric_disk_object.class})"
52
49
  raise "Woopsie, not a Storazzo::Media::AbstractRicDisk! Intead its a #{ric_disk_object.class}" unless ric_disk_object.class.superclass == Storazzo::Media::AbstractRicDisk
50
+
53
51
  # ok back to business, now path is a String :)
54
- path = ric_disk_object.path
52
+ path = ric_disk_object.path
55
53
  deb "RicDisk initialize.. path=#{path}"
56
54
  deb "RicDisk initialize.. path=#{path}"
57
55
  @local_mountpoint = File.expand_path(path)
@@ -62,16 +60,16 @@ module Storazzo
62
60
  @ricdisk_file_full = "#{@local_mountpoint}/#{@ricdisk_file}"
63
61
  @label = path.split("/").last
64
62
  @name = path.split("/").last
65
- #@wr = File.writable?("#{path}/#{ricdisk_file}" ) # .writeable?
66
- #@wr = writeable?
63
+ # @wr = File.writable?("#{path}/#{ricdisk_file}" ) # .writeable?
64
+ # @wr = writeable?
67
65
  @tags = ['ricdisk', 'storazzo']
68
- @size = RicDisk._compute_size_could_take_long(path)
66
+ @size = RicDisk._compute_size_could_take_long(path)
69
67
  @unique_hash = "MD5::" + Digest::MD5.hexdigest(File.expand_path(path)) # hash = Digest::MD5.hexdigest(File.expand_path(get_local_mountpoint))
70
68
  @computation_hostname = Socket.gethostname
71
69
  @created_at = Time.now
72
70
 
73
71
  @ricdisk_file_empty = ricdisk_file_empty?
74
-
72
+
75
73
  # @config = RicDiskConfig.instance.get_config
76
74
  # #puts @config if @config
77
75
  # find_info_from_mount(path)
@@ -89,7 +87,6 @@ module Storazzo
89
87
  not ricdisk_file.nil?
90
88
  end
91
89
 
92
-
93
90
  def analyze_local_system()
94
91
  puts "TODO This should analyzze the WHOLE system. TODO(ricc): move to another object which has to do with the system/computer."
95
92
  puts "1. Interesting Mounts: #{green interesting_mount_points}"
@@ -98,45 +95,47 @@ module Storazzo
98
95
  # find_info_from_df()
99
96
  end
100
97
 
101
- def path
98
+ def path
102
99
  local_mountpoint
103
100
  end
104
101
 
105
- def to_s
102
+ def to_s
106
103
  "RicDisk(paz=#{path}, r/w=#{writeable?}, size=#{size}B, f=#{ricdisk_file}, v#{ricdisk_version}, ard=#{@ard})"
107
104
  end
108
105
 
109
106
  # could take long..
110
- # def size
107
+ # def size
111
108
  # `du -s '#{path}'`.split(/\s/)[0]
112
109
  # end
113
- def self._compute_size_could_take_long(my_path)
110
+ def self._compute_size_could_take_long(my_path)
114
111
  deb "Could take long. TODO(ricc): add some sort of cutoff/timeout to 5 seconds."
115
112
  puts azure('could take long. Please take precautions like forking with timeout of 5sec')
116
113
  `du -s '#{my_path}' 2>/dev/null`.chomp.split(/\s/)[0] # self.size
117
114
  end
118
115
 
119
- def writeable?()
120
- #memoize
121
- return @wr unless @wr.nil?
116
+ def writeable?()
117
+ # memoize
118
+ return @wr unless @wr.nil?
119
+
122
120
  # NOW: CALCULATE it
123
121
  # Now I can do ONCE an EXPENSIVE calculation
124
122
  puts yellow("[RicDisk.writeable] TODO(ricc): Do expensive calculation if this FS is writeable: #{path} and write/memoize it on @wr once and for all")
125
123
  puts yellow("[RicDisk.writeable] I have a feeling this should be delegated to praecipuus Storazzo::Media::Object we refer to (WR is different on GCS vs Local):") # infinite loop dammit #{self.to_verbose_s}")
126
- puts("Dir: #{ azure path}")
124
+ puts("Dir: #{azure path}")
127
125
  puts("absolute_path: #{azure absolute_path}")
128
126
  puts("File.writable?(absolute_path): #{azure File.writable?(absolute_path)}")
129
127
  bash_output = `if [ -w "#{absolute_path}" ]; then echo "WRITABLE"; else echo "NOT WRITABLE"; fi`
130
128
  puts("bash_output: #{azure bash_output}")
131
- #@wr = File.writable?(File.expand_path(@ricdisk_file)) # rescue false
129
+ # @wr = File.writable?(File.expand_path(@ricdisk_file)) # rescue false
132
130
  raise "for some reason an important info (ricdisk_file='#{absolute_path}') is missing!" if ricdisk_file.nil?
131
+
133
132
  @wr = File.writable?(absolute_path) # rescue false
134
133
  return @wr
135
- #:boh_todo_fix_me_and_compute
136
- #false
134
+ # :boh_todo_fix_me_and_compute
135
+ # false
137
136
  end
138
137
 
139
- def to_verbose_s
138
+ def to_verbose_s
140
139
  h = {}
141
140
  h[:to_s] = self.to_s
142
141
  h[:wr] = self.wr
@@ -146,60 +145,58 @@ module Storazzo
146
145
  return h
147
146
  end
148
147
 
149
- ################################
150
- ## CLASS methods
151
- ################################
152
-
148
+ ################################
149
+ ## CLASS methods
150
+ ################################
153
151
 
154
152
  # All places where to find for something :)
155
153
  def self.default_media_folders
156
154
  DefaultMediaFolders # was DEFAULT_MEDIA_FOLDERS
157
155
  end
158
156
 
159
-
160
157
  def self.test # _localgem_disks
161
- d = RicDisk.new( DefaultGemfileTestDiskFolder)
158
+ d = RicDisk.new(DefaultGemfileTestDiskFolder)
162
159
  puts (d)
163
160
  puts "do something with it: #{d}"
164
- #d.find_active_dirs()
161
+ # d.find_active_dirs()
165
162
  end
166
163
 
167
164
  def absolute_path
168
- #@local_mountpoint + "/" + @ricdisk_file
165
+ # @local_mountpoint + "/" + @ricdisk_file
169
166
  "#{local_mountpoint}/#{ricdisk_file}"
170
167
  end
171
-
172
- def self.find_active_dirs(base_dirs=nil, also_mountpoints=true)
168
+
169
+ def self.find_active_dirs(base_dirs = nil, also_mountpoints = true)
173
170
  if base_dirs.nil?
174
- base_dirs = default_media_folders
171
+ base_dirs = default_media_folders
175
172
  puts "find_active_dirs with empty input -> using default_media_folders: #{yellow default_media_folders}"
176
173
  end
177
174
  active_dirs = []
178
- base_dirs.each do |ugly_dir|
175
+ base_dirs.each do |ugly_dir|
179
176
  # https://stackoverflow.com/questions/1899072/getting-a-list-of-folders-in-a-directory#:~:text=Dir.chdir(%27/destination_directory%27)%0ADir.glob(%27*%27).select%20%7B%7Cf%7C%20File.directory%3F%20f%7D
180
177
  dir = File.expand_path(ugly_dir)
181
178
  begin
182
- x=[]
183
- # puts "TEST2 DIR EXISTS: #{dir} -> #{Dir.exists?(dir)}"
179
+ x = []
180
+ # puts "TEST2 DIR EXISTS: #{dir} -> #{Dir.exists?(dir)}"
184
181
  unless Dir.exists?(dir)
185
182
  deb "Dir doesnt exist, skipping: #{dir}"
186
- next
183
+ next
187
184
  end
188
185
  Dir.chdir(dir)
189
- x = Dir.glob('*').select {|f| File.directory? f}
190
- subdirs = x.map{|subdir| "#{dir}#{subdir}"}
191
- subdirs.each{|subdir|
186
+ x = Dir.glob('*').select { |f| File.directory? f }
187
+ subdirs = x.map { |subdir| "#{dir}#{subdir}" }
188
+ subdirs.each { |subdir|
192
189
  deb "Subdir: #{subdir}"
193
190
  puts `ls -al "#{subdir}"` # TODO refactor in exec
194
191
  active_dirs << subdir if ok_dir? # self.ok_dir?(subdir)
195
192
  }
196
- #puts(white x)
193
+ # puts(white x)
197
194
  rescue Exception => e # optionally: `rescue Exception => ex`
198
195
  puts "Exception: '#{e}'"
199
196
  ensure # will always get executed
200
- #deb 'Always gets executed.'
201
- #x = []
202
- end
197
+ # deb 'Always gets executed.'
198
+ # x = []
199
+ end
203
200
  end
204
201
  end
205
202
 
@@ -210,16 +207,15 @@ module Storazzo
210
207
  end
211
208
  deb "[compute_ricdisk_file] RICC_WARNING This requires cmputation I wanna do it almost once"
212
209
  ConfigFiles.each do |papable_config_filename|
213
- #return ".ricdisk.yaml" if File.exist?("#{path}/.ricdisk.yaml") #and File.empty?( "#{path}/.ricdisk.yaml")
214
- #return ".ricdisk" if File.exist?("#{path}/.ricdisk") # and File.empty?( "#{path}/.ricdisk")
210
+ # return ".ricdisk.yaml" if File.exist?("#{path}/.ricdisk.yaml") #and File.empty?( "#{path}/.ricdisk.yaml")
211
+ # return ".ricdisk" if File.exist?("#{path}/.ricdisk") # and File.empty?( "#{path}/.ricdisk")
215
212
  return papable_config_filename if File.exist?("#{path}/#{papable_config_filename}") # and File.empty?( "#{path}/.ricdisk")
216
213
  end
217
214
  deb "File not found! Neither #{ConfigFiles} exist.."
218
- # return nil
215
+ # return nil
219
216
  return DefaultConfigFile
220
217
  end
221
218
 
222
-
223
219
  # def self.compute_ricdisk_file_by_path_once(path)
224
220
  # # unless @ricdisk_file.nil?
225
221
  # # deb "[CACHE HIT] ricdisk_file (didnt have to recompute it - yay!)"
@@ -234,7 +230,6 @@ module Storazzo
234
230
  # return nil
235
231
  # end
236
232
 
237
-
238
233
  # # new
239
234
  # def self.get_ricdisk_file_obsolete(path)
240
235
  # if @ricdisk_file
@@ -250,9 +245,8 @@ module Storazzo
250
245
  # return nil
251
246
  # end
252
247
 
253
-
254
- def self.interesting_mount_points(opts={})
255
- #https://unix.stackexchange.com/questions/177014/showing-only-interesting-mount-points-filtering-non-interesting-types
248
+ def self.interesting_mount_points(opts = {})
249
+ # https://unix.stackexchange.com/questions/177014/showing-only-interesting-mount-points-filtering-non-interesting-types
256
250
  `mount | grep -Ev 'type (proc|sysfs|tmpfs|devpts|debugfs|rpc_pipefs|nfsd|securityfs|fusectl|devtmpfs) '`.split(/\n+/)
257
251
  end
258
252
 
@@ -262,23 +256,23 @@ module Storazzo
262
256
  deb("[obsolescence_seconds] File #{file_path}: #{creation_time} - #{(Time.now - creation_time)} seconds ago")
263
257
  (Time.now - creation_time).to_i
264
258
  end
259
+
265
260
  # maybe move to a RiccFile class? Maybe even INHERIT from FILE?
266
261
  def obsolescence_days(file_path)
267
262
  return obsolescence_seconds(file_path) / 86400
268
263
  end
269
264
 
270
-
271
265
  # FORMER SBRODOLA, now write_config_yaml_to_disk
272
- #def self.write_config_yaml_to_disk(subdir, opts={}) # sbrodola_ricdisk(subdir)
273
- def write_config_yaml_to_disk(subdir, opts={}) # sbrodola_ricdisk(subdir)
266
+ # def self.write_config_yaml_to_disk(subdir, opts={}) # sbrodola_ricdisk(subdir)
267
+ def write_config_yaml_to_disk(subdir, opts = {}) # sbrodola_ricdisk(subdir)
274
268
  # given a path, if .ricdisk exists i do stuff with it..
275
269
  disk_info = nil
276
270
  unless ok_dir? # self.ok_dir?(subdir)
277
271
  warn("[write_config_yaml_to_disk] Nothing for me here: '#{subdir}'. Existing")
278
- return
272
+ return
279
273
  end
280
274
  ConfigFiles.each do |papable_configfile_name|
281
- if File.exists?( "#{subdir}/#{papable_configfile_name}") and File.empty?( "#{subdir}/#{papable_configfile_name}")
275
+ if File.exists?("#{subdir}/#{papable_configfile_name}") and File.empty?("#{subdir}/#{papable_configfile_name}")
282
276
  deb("Interesting. Empty file '#{papable_configfile_name}'! Now I write YAML with it.")
283
277
  disk_info = RicDisk.new(subdir, papable_configfile_name)
284
278
  end
@@ -314,8 +308,8 @@ module Storazzo
314
308
  puts "[write_config_yaml_to_disk] No DiskInfo found across #{ConfigFiles}. I leave this function empty-handed."
315
309
  end
316
310
 
317
- #disk_info.absolute_path
318
- #if File.exists?( "#{subdir}/.ricdisk") and ! File.empty?( "#{subdir}/.ricdisk")
311
+ # disk_info.absolute_path
312
+ # if File.exists?( "#{subdir}/.ricdisk") and ! File.empty?( "#{subdir}/.ricdisk")
319
313
  # if File.exists?(disk_info.absolute_path) and ! File.empty?(disk_info.absolute_path)
320
314
  # puts("Config File found with old-style name: '#{subdir}/.ricdisk' ! Please move it to .ricdisk.yaml!")
321
315
  # puts(white `cat "#{disk_info.absolute_path}"`)
@@ -327,42 +321,45 @@ module Storazzo
327
321
 
328
322
  # TODO obsolete this as i should NOT be calling it from clas, but from method.
329
323
  def self.ok_dir?(subdir)
330
- File.exists?( "#{subdir}/.ricdisk") or File.exists?( "#{subdir}/.ricdisk.yaml")
324
+ File.exists?("#{subdir}/.ricdisk") or File.exists?("#{subdir}/.ricdisk.yaml")
331
325
  end
332
326
 
333
- def compute_stats_files(opts={})
334
- #Storazzo::RicDisk.calculate_stats_files(path, opts)
327
+ def compute_stats_files(opts = {})
328
+ # Storazzo::RicDisk.calculate_stats_files(path, opts)
335
329
  opts_upload_to_gcs = opts.fetch :upload_to_gcs, false
336
330
  opts_force_rewrite = opts.fetch :force, false
337
331
  opts_stats_file = opts.fetch :stats_file, "ricdisk_stats_v11.rds" # default. TODO point to proper..
338
332
  dir = path
339
333
  puts azure("[compute_stats_files] TODO implement natively. Now I'm being lazy. stats_file=#{opts_stats_file} dir=#{dir}")
340
-
334
+
341
335
  full_file_path = "#{dir}/#{opts_stats_file}"
342
336
  deb "This refactor is for another day. Actually no, TODAY "
343
- pverbose true, "TODO(ricc): you should compute more SMARTLY the full_file_path (#{full_file_path}): if its R/O it should be elsewhere.."
337
+ pverbose true,
338
+ "TODO(ricc): you should compute more SMARTLY the full_file_path (#{full_file_path}): if its R/O it should be elsewhere.."
344
339
  puts azure("- full_file_path: #{full_file_path}")
345
340
  puts azure("- writeable?: #{writeable?}")
346
-
341
+
347
342
  puts("compute_stats_files(#{white dir}): #{white full_file_path}")
348
343
  deb "TEST1 DIR EXISTS: #{dir} -> #{File.directory? dir}"
349
344
  raise "Directory doesnt exist: #{dir}" unless File.directory?(dir)
345
+
350
346
  Dir.chdir(dir)
351
347
  puts azure `ls` # im curious
352
348
  if File.exists?(full_file_path)
353
349
  if opts_force_rewrite
354
- #raise "TODO implement file exists and FORCE enabled"
350
+ # raise "TODO implement file exists and FORCE enabled"
355
351
  RicDisk.compute_stats_for_dir_into_file(dir, full_file_path, "ReWrite enabled")
356
352
  else # File.exists?(full_file_path) and (opts_force)
357
353
  puts "File '#{opts_stats_file}' exists already." # - now should see if its too old, like more than 1 week old"
358
354
  # TODO check for file time...
359
- print "Lines found: #{yellow `wc -l "#{full_file_path}" `.chomp }. File obsolescence (days): #{yellow obsolescence_days(full_file_path)}."
360
- if obsolescence_days(full_file_path) > 7
361
- #puts yellow("*** ACHTUNG *** FIle is pretty old. You might consider rotating: #{yellow "mv #{full_file_path} #{full_file_path}_old"}. Or invoke with --force")
355
+ print "Lines found: #{yellow `wc -l "#{full_file_path}" `.chomp}. File obsolescence (days): #{yellow obsolescence_days(full_file_path)}."
356
+ if obsolescence_days(full_file_path) > 7
357
+ # puts yellow("*** ACHTUNG *** FIle is pretty old. You might consider rotating: #{yellow "mv #{full_file_path} #{full_file_path}_old"}. Or invoke with --force")
362
358
  puts yellow("*** ACHTUNG *** FIle is pretty old. I'll force a rewrite")
363
- RicDisk.compute_stats_for_dir_into_file(dir, full_file_path, "File older than 7 days. Indeed: #{obsolescence_days(full_file_path)}")
359
+ RicDisk.compute_stats_for_dir_into_file(dir, full_file_path,
360
+ "File older than 7 days. Indeed: #{obsolescence_days(full_file_path)}")
364
361
  end
365
- upload_to_gcs(full_file_path) if opts_upload_to_gcs
362
+ upload_to_gcs(full_file_path) if opts_upload_to_gcs
366
363
  end
367
364
  else
368
365
  deb("File doesnt exist..")
@@ -370,10 +367,10 @@ module Storazzo
370
367
  end
371
368
  end
372
369
 
373
- def self.compute_stats_for_dir_into_file(dir, full_file_path, reason, opts={})
370
+ def self.compute_stats_for_dir_into_file(dir, full_file_path, reason, opts = {})
374
371
  max_lines = opts.fetch :max_lines, 42 # todo move to nil or -1
375
- #full_file_path = "#{dir}/#{stats_file}"
376
- puts "Crunching data stats from '#{dir}' into '#{full_file_path}' ... please bear with me.. [reason: '#{reason}']"
372
+ # full_file_path = "#{dir}/#{stats_file}"
373
+ puts "Crunching data stats from '#{dir}' into '#{full_file_path}' ... please bear with me.. [reason: '#{reason}']"
377
374
  if max_lines < 0 # infinite
378
375
  command = "find . -print0 | xargs -0 stats-with-md5 --no-color | tee '#{full_file_path}'"
379
376
  else
@@ -383,7 +380,7 @@ module Storazzo
383
380
  # xargs -r0 myscript.sh
384
381
  if mac?
385
382
  puts red("Sorry head -z doesnt work on Mac :/ so this head -N will be VERY approximate. Probably you should divide by ten or so :)")
386
- spannometric_lines = (max_lines/10)
383
+ spannometric_lines = (max_lines / 10)
387
384
  command = "find . -print0 | head -n '#{spannometric_lines}' | xargs -r0 stats-with-md5 --no-color | tee '#{full_file_path}'"
388
385
  else
389
386
  command = "find . -print0 | head -z -n '#{max_lines}' | xargs -r0 stats-with-md5 --no-color | tee '#{full_file_path}'"
@@ -393,79 +390,65 @@ module Storazzo
393
390
  ret = backquote_execute(command)
394
391
  puts "Done. #{ret.split("\n").count} files processed."
395
392
  end
396
-
397
-
398
393
 
399
- def self.calculate_stats_files_DUPLICATE_STATIC(dir, opts={})
394
+ def self.calculate_stats_files_DUPLICATE_STATIC(dir, opts = {})
400
395
  raise "Please use object instead. If you cant, please move the object code to STATIC and dedupe code!"
401
- end
402
-
403
-
404
- # if also_mountpoints
405
- # =begin
406
- # Example output from mount:
407
-
408
- # devfs on /dev (devfs, local, nobrowse)
409
- # /dev/disk3s6 on /System/Volumes/VM (apfs, local, noexec, journaled, noatime, nobrowse)
410
- # /dev/disk3s2 on /System/Volumes/Preboot (apfs, local, journaled, nobrowse)
411
- # /dev/disk3s4 on /System/Volumes/Update (apfs, local, journaled, nobrowse)
412
- # /dev/disk1s2 on /System/Volumes/xarts (apfs, local, noexec, journaled, noatime, nobrowse)
413
- # /dev/disk1s1 on /System/Volumes/iSCPreboot (apfs, local, journaled, nobrowse)
414
- # /dev/disk1s3 on /System/Volumes/Hardware (apfs, local, journaled, nobrowse)
415
- # /dev/disk3s5 on /System/Volumes/Data (apfs, local, journaled, nobrowse, protect)
416
- # map auto_home on /System/Volumes/Data/home (autofs, automounted, nobrowse)
417
- # //riccardo@1.0.1.10/video on /Volumes/video (afpfs, nodev, nosuid, mounted by ricc)
418
- # //riccardo@1.0.1.10/photo on /Volumes/photo (afpfs, nodev, nosuid, mounted by ricc)
419
- # =end
420
- # # add directories from current mountpoints...
421
- # mount_table_lines = interesting_mount_points()
422
- # mount_table_lines.each{|line|
423
- # next if line =~ /^map /
424
- # dev, on, path, mode = line.split(/ /)
425
- # #puts line
426
- # #deb yellow(path)
427
- # active_dirs << path if self.ok_dir?(path)
428
- # }
429
- # end
430
- # active_dirs.uniq!
431
- # puts("find_active_dirs(): found dirs " + green(active_dirs))
432
- # return active_dirs
433
- # end
434
-
435
-
436
-
437
- end #/Class
438
- end #/Module
439
-
440
-
441
-
442
-
443
-
444
-
445
-
446
-
447
-
448
- def backquote_execute(cmd, opts={})
449
- dryrun = opts.fetch :dryrun, false
450
- # executed a command wrapped by dryrun though
451
- return "DRYRUN backquote_execute(#{cmd})" if dryrun # $opts[:dryrun]
452
- `#{cmd}`
453
396
  end
454
-
455
- def upload_to_gcs(file, opts={})
456
- deb("upload_to_gcs(#{file}). TODO(ricc) after breafast upload to GCS : #{file}")
457
- mount_name = file.split('/')[-2]
458
- filename = "#{mount_name}-#{File.basename file}"
459
- hostname = Socket.gethostname[/^[^.]+/]
460
- command = "gsutil cp '#{file}' gs://#{$gcs_bucket}/backup/ricdisk-magic/#{ hostname }-#{filename}"
461
- deb("Command: #{command}")
462
- puts azure("GCS upload disabled until I know if it works :) command='#{command}'")
463
- ret = backquote_execute(command, :dryrun => true)
464
- # if $opts[:debug] do
465
- # puts "+ Current list of files:"
466
- # ret = backquote_execute("gsutil ls -al gs://#{$gcs_bucket}/backup/ricdisk-magic/")
467
- # puts ret
468
- # end
469
- ret
470
- end
471
-
397
+
398
+ # if also_mountpoints
399
+ # =begin
400
+ # Example output from mount:
401
+
402
+ # devfs on /dev (devfs, local, nobrowse)
403
+ # /dev/disk3s6 on /System/Volumes/VM (apfs, local, noexec, journaled, noatime, nobrowse)
404
+ # /dev/disk3s2 on /System/Volumes/Preboot (apfs, local, journaled, nobrowse)
405
+ # /dev/disk3s4 on /System/Volumes/Update (apfs, local, journaled, nobrowse)
406
+ # /dev/disk1s2 on /System/Volumes/xarts (apfs, local, noexec, journaled, noatime, nobrowse)
407
+ # /dev/disk1s1 on /System/Volumes/iSCPreboot (apfs, local, journaled, nobrowse)
408
+ # /dev/disk1s3 on /System/Volumes/Hardware (apfs, local, journaled, nobrowse)
409
+ # /dev/disk3s5 on /System/Volumes/Data (apfs, local, journaled, nobrowse, protect)
410
+ # map auto_home on /System/Volumes/Data/home (autofs, automounted, nobrowse)
411
+ # //riccardo@1.0.1.10/video on /Volumes/video (afpfs, nodev, nosuid, mounted by ricc)
412
+ # //riccardo@1.0.1.10/photo on /Volumes/photo (afpfs, nodev, nosuid, mounted by ricc)
413
+ # =end
414
+ # # add directories from current mountpoints...
415
+ # mount_table_lines = interesting_mount_points()
416
+ # mount_table_lines.each{|line|
417
+ # next if line =~ /^map /
418
+ # dev, on, path, mode = line.split(/ /)
419
+ # #puts line
420
+ # #deb yellow(path)
421
+ # active_dirs << path if self.ok_dir?(path)
422
+ # }
423
+ # end
424
+ # active_dirs.uniq!
425
+ # puts("find_active_dirs(): found dirs " + green(active_dirs))
426
+ # return active_dirs
427
+ # end
428
+ end # /Class
429
+ end # /Module
430
+
431
+ def backquote_execute(cmd, opts = {})
432
+ dryrun = opts.fetch :dryrun, false
433
+ # executed a command wrapped by dryrun though
434
+ return "DRYRUN backquote_execute(#{cmd})" if dryrun # $opts[:dryrun]
435
+
436
+ `#{cmd}`
437
+ end
438
+
439
+ def upload_to_gcs(file, opts = {})
440
+ deb("upload_to_gcs(#{file}). TODO(ricc) after breafast upload to GCS : #{file}")
441
+ mount_name = file.split('/')[-2]
442
+ filename = "#{mount_name}-#{File.basename file}"
443
+ hostname = Socket.gethostname[/^[^.]+/]
444
+ command = "gsutil cp '#{file}' gs://#{$gcs_bucket}/backup/ricdisk-magic/#{hostname}-#{filename}"
445
+ deb("Command: #{command}")
446
+ puts azure("GCS upload disabled until I know if it works :) command='#{command}'")
447
+ ret = backquote_execute(command, :dryrun => true)
448
+ # if $opts[:debug] do
449
+ # puts "+ Current list of files:"
450
+ # ret = backquote_execute("gsutil ls -al gs://#{$gcs_bucket}/backup/ricdisk-magic/")
451
+ # puts ret
452
+ # end
453
+ ret
454
+ end