qdumpfs 0.5.1 → 0.6.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: 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