qdumpfs 0.5.1 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5a18d42979f9ddc74bca2e274dc76b38ab50377398497b244399e9997a693da
4
- data.tar.gz: 017acf5a04a798a3eefab1626b2262a8a8fcfe5a10350b4dd8b2ac7003810c03
3
+ metadata.gz: 606cd6d5f9de57b340a1ac41d5e621d2f947cff5e1fce3a9ec510be72e0f0d4d
4
+ data.tar.gz: 073da696b6e73cd8059a246fbe18b51f09050f100bb9f7a454954921d4e5d228
5
5
  SHA512:
6
- metadata.gz: 1dc38b92a65d33b0ebcf52e9db1ba9a6c0940ac7dc1e2270e86ee8f329fbceb466a490dad1f763f0caeaa72e97bfc3156873e6fd5402606e9eb5a2858c82c29f
7
- data.tar.gz: 948fd22961accdd955cdb6c66b73c11548be2e6a8bc99fc41fbec23b8ba3cd82ae70df1c21d4653e4ee9cc28b5ec34b53a50b1caf227bd2240d0bef2176edab7
6
+ metadata.gz: 34c7c309574b3cbd00175b0e327d1df5687fa2acb84fcb3d29ff5d77adeaacfddc5f91a28de702d0aaa06e0b694ea722d00d43ed50d7b7f74d80d2f754b1027c
7
+ data.tar.gz: f5702a62c4b9ab44364df7c697c5d503ddccce6b946f2e7702de6783521aa05afa358df218686a90934a80af64906105068bb5cd0a77aa8fcacf597e56541436
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qdumpfs (0.5.1)
4
+ qdumpfs (0.6.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -34,11 +34,17 @@ module Qdumpfs
34
34
  }
35
35
  opt.on('-s SIZE', '--exclude-by-size=SIZE', 'exclude files larger than SIZE') {|v| opts[:es] = v }
36
36
  opt.on('-w GLOB', '--exclude-by-glob=GLOB', 'exclude files matching GLOB') {|v| opts[:ep] = v }
37
- commands = ['backup', 'sync', 'list', 'expire', 'verify']
37
+ commands = ['backup', 'sync', 'list', 'expire', 'verify', 'delete']
38
38
  opt.on('-c COMMAND', '--command=COMMAND', commands, commands.join('|')) {|v| opts[:c] = v}
39
39
  opt.on('-l HOURS', '--limit=HOURS', 'limit hours') {|v| opts[:limit] = v}
40
40
  opt.on('-k KEEPARG', '--keep=KEEPARG', 'ex: --keep 100Y12M12W30D (100years, 12months, 12weeks, 30days, default)') {|v| opts[:keep] = v}
41
41
  opt.on('--logdir LOGDIR', 'logdir') {|v| opts[:logdir] = v}
42
+ opt.on('--delete-from YYYYMMDD', 'delete backup from YYYY/MM/DD') {|v|
43
+ opts[:delete_from] = Date.parse(v)
44
+ }
45
+ opt.on('--delete-to YYYYMMDD', 'delete backup to YYYY/MM/DD') {|v|
46
+ opts[:delete_to] = Date.parse(v)
47
+ }
42
48
  opt.parse!(argv)
43
49
  option = Option.new(opts, ARGV)
44
50
  if opts[:v]
@@ -52,6 +58,8 @@ module Qdumpfs
52
58
  command = Command.new(option)
53
59
  command.run
54
60
  rescue => e
61
+ # p e.message
62
+ # p e.backtrace
55
63
  puts opt.help
56
64
  exit
57
65
  end
@@ -69,13 +77,15 @@ module Qdumpfs
69
77
  elsif @opt.cmd == 'list'
70
78
  list
71
79
  elsif @opt.cmd == 'expire'
72
- expire
80
+ delete('expire')
73
81
  elsif @opt.cmd == 'verify'
74
82
  verify
83
+ elsif @opt.cmd == 'delete'
84
+ delete('delete')
75
85
  # elsif @opt.cmd == 'test'
76
86
  # test
77
- # else
78
- raise RuntimeError, "unknown command: #{cmd}"
87
+ else
88
+ raise RuntimeError, "unknown command: #{@opt.cmd}"
79
89
  end
80
90
  end
81
91
 
@@ -439,40 +449,45 @@ module Qdumpfs
439
449
  file.close
440
450
  end
441
451
 
442
- def expire
452
+ def delete(cmd)
443
453
  @opt.validate_directories(1)
444
454
 
445
455
  start_time = Time.now
446
456
  limit_time = start_time + (@opt.limit_sec)
447
- log("##### expire start #{fmt(start_time)} => limit_time=#{fmt(limit_time)} #####")
457
+ log("##### #{cmd} start #{fmt(start_time)} => limit_time=#{fmt(limit_time)} #####")
448
458
 
449
459
  @opt.dirs.each do |target_dir|
450
460
 
451
461
  target_start = Time.now
452
- expire_target_dir(target_dir)
462
+ delete_target_dir(cmd, target_dir)
453
463
  target_end = Time.now
454
464
 
455
465
  # 次回expireにかかる時間を最終expire時間の半分と予想
456
466
  next_expire = (target_end - target_start) / 2
457
467
 
458
468
  cur_time = Time.now
459
- in_imit = (cur_time + next_expire) < limit_time
469
+ in_limit = (cur_time + next_expire) < limit_time
460
470
 
461
471
  log("## cur_time=#{fmt(cur_time)} + next_expire=#{next_expire} < limit_time=#{fmt(limit_time)} in_limit=#{in_limit} ## ")
462
472
  unless in_limit
463
473
  break
464
474
  end
465
475
  end
466
-
467
- log("##### expire end #####")
476
+ log("##### #{cmd} end #####")
468
477
  end
469
-
470
- def expire_target_dir(target_dir)
478
+
479
+ def delete_target_dir(cmd, target_dir)
471
480
  target_dir = to_unix_path(target_dir)
472
481
  puts "<<<<< Target dir: #{target_dir} >>>>>"
473
482
 
474
483
  snapshots = BackupDir.scan_backup_dirs(target_dir)
475
- @opt.detect_keep_dirs(snapshots)
484
+ if cmd == 'expire'
485
+ @opt.detect_expire_dirs(snapshots)
486
+ elsif cmd == 'delete'
487
+ @opt.detect_delete_dirs(snapshots, @opt.delete_from, @opt.delete_to)
488
+ else
489
+ raise RuntimeError, "unknown command: #{cmd}"
490
+ end
476
491
 
477
492
  # p @opt.keep_year
478
493
  # p @opt.keep_month
@@ -527,8 +542,64 @@ module Qdumpfs
527
542
  puts "Keep dirs:"
528
543
  snapshots.each do |snapshot|
529
544
  puts snapshot.path if snapshot.keep
530
- end
531
-
545
+ end
532
546
  end
547
+
548
+ # def delete
549
+ # @opt.validate_directories(1)
550
+
551
+ # start_time = Time.now
552
+ # limit_time = start_time + (@opt.limit_sec)
553
+ # log("##### delete start #{fmt(start_time)} => limit_time=#{fmt(limit_time)} #####")
554
+ # @opt.dirs.each do |target_dir|
555
+ # target_start = Time.now
556
+ # delete_target_dir(target_dir)
557
+ # target_end = Time.now
558
+
559
+ # # 次回expireにかかる時間を最終expire時間の半分と予想
560
+ # next_expire = (target_end - target_start) / 2
561
+
562
+ # cur_time = Time.now
563
+ # in_imit = (cur_time + next_expire) < limit_time
564
+
565
+ # log("## cur_time=#{fmt(cur_time)} + next_expire=#{next_expire} < limit_time=#{fmt(limit_time)} in_limit=#{in_limit} ## ")
566
+ # unless in_limit
567
+ # break
568
+ # end
569
+ # end
570
+ # log("##### delete end #####")
571
+ # end
572
+
573
+ # def delete_target_dir(target_dir)
574
+ # target_dir = to_unix_path(target_dir)
575
+ # puts "<<<<< Target dir: #{target_dir} >>>>>"
576
+
577
+ # snapshots = BackupDir.scan_backup_dirs(target_dir)
578
+ # @opt.detect_delete_dirs(snapshots)
579
+
580
+ # snapshots.each do |snapshot|
581
+ # next if snapshot.keep
582
+ # t_start = Time.now
583
+ # print "Deleting #{snapshot.path} ..."
584
+
585
+ # unless @opt.dry_run
586
+ # if windows?
587
+ # # Windowsの場合
588
+ # win_backup_path = to_win_path(snapshot.path)
589
+ # system("rmdir /S /Q #{win_backup_path}")
590
+ # else
591
+ # # Linux/macOSの場合
592
+ # system("rm -rf #{snapshot.path}")
593
+ # end
594
+ # end
595
+ # end
596
+
597
+ # t_end = Time.now
598
+ # diff = (t_end - t_start).to_i
599
+ # diff_hours = diff / 3600
600
+ # puts " done[#{diff} seconds = #{diff_hours} hours]."
601
+ # end
602
+
533
603
  end
604
+
534
605
  end
@@ -139,12 +139,15 @@ module Qdumpfs
139
139
  @keep_month = $1.to_i if keep =~ /(\d+)M/
140
140
  @keep_week = $1.to_i if keep =~ /(\d+)W/
141
141
  @keep_day = $1.to_i if keep =~ /(\d+)D/
142
+ @delete_from = @opts[:delete_from]
143
+ @delete_to = @opts[:delete_to]
142
144
  @today = Date.today
143
145
  end
144
146
  attr_reader :dirs, :src, :dst, :cmd
145
147
  attr_reader :keep_year, :keep_month, :keep_week, :keep_day
146
148
  attr_reader :logdir, :logpath, :verifypath
147
149
  attr_reader :logger, :matcher, :reporter, :interval_proc
150
+ attr_reader :delete_from, :delete_to
148
151
 
149
152
  def report(type, filename)
150
153
  if @opts[:v]
@@ -206,12 +209,25 @@ module Qdumpfs
206
209
  end
207
210
  end
208
211
 
209
- def detect_keep_dirs(backup_dirs)
212
+ def detect_expire_dirs(backup_dirs)
210
213
  detect_year_keep_dirs(backup_dirs)
211
214
  detect_month_keep_dirs(backup_dirs)
212
215
  detect_week_keep_dirs(backup_dirs)
213
216
  detect_day_keep_dirs(backup_dirs)
214
217
  end
218
+
219
+ def detect_delete_dirs(backup_dirs, delete_from, delete_to)
220
+ backup_dirs.each do |backup_dir|
221
+ backup_dir.keep = true
222
+ if delete_from && backup_dir.date >= delete_from && delete_to && backup_dir.date <= delete_to
223
+ backup_dir.keep = false
224
+ elsif delete_from && backup_dir.date >= delete_from
225
+ backup_dir.keep = false
226
+ elsif delete_to && backup_dir.date <= delete_to
227
+ backup_dir.keep = false
228
+ end
229
+ end
230
+ end
215
231
 
216
232
  def open_verifyfile
217
233
  if FileTest.file?(@verifypath)
@@ -1,3 +1,3 @@
1
1
  module Qdumpfs
2
- VERSION = "0.5.1"
2
+ VERSION = "0.6.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qdumpfs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - src
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-17 00:00:00.000000000 Z
11
+ date: 2020-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler