qdumpfs 0.6.0 → 0.7.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: 606cd6d5f9de57b340a1ac41d5e621d2f947cff5e1fce3a9ec510be72e0f0d4d
4
- data.tar.gz: 073da696b6e73cd8059a246fbe18b51f09050f100bb9f7a454954921d4e5d228
3
+ metadata.gz: 3d4d28c42fc54a4ba9ba806aa57c056774889663cfa011d1cb8ff6d259a3368b
4
+ data.tar.gz: fcfa95f0abdbaf1a8b571cf088fa83811e1984f4bd7bcd1283e68bdad3ce894b
5
5
  SHA512:
6
- metadata.gz: 34c7c309574b3cbd00175b0e327d1df5687fa2acb84fcb3d29ff5d77adeaacfddc5f91a28de702d0aaa06e0b694ea722d00d43ed50d7b7f74d80d2f754b1027c
7
- data.tar.gz: f5702a62c4b9ab44364df7c697c5d503ddccce6b946f2e7702de6783521aa05afa358df218686a90934a80af64906105068bb5cd0a77aa8fcacf597e56541436
6
+ metadata.gz: d1af10ef6521b9f775a538dc666e06f4cc4222131413144c8eacd59d795242890db306411e34076b041ac356b0a2e6a0c74c50cf221e01550caf0b18260bd738
7
+ data.tar.gz: 68351bac00ffe057beb25433f5d158c74814a2a20efa43cd15a8a608cc800f5655b6f41be2b1292e8ebc1b7b63e43f01add315daaa3503d047f4139e7dbf4848
data/.gitignore CHANGED
@@ -12,4 +12,7 @@ log.txt
12
12
  *test.cmd
13
13
  test*.cmd
14
14
  *.log
15
+ /data/to
16
+ /data/to2
17
+
15
18
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qdumpfs (0.6.0)
4
+ qdumpfs (0.7.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -0,0 +1 @@
1
+ 0
@@ -0,0 +1 @@
1
+ 1
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+ require "qdumpfs"
5
+
6
+ from = "./data/from"
7
+ to = "./data/to"
8
+ to2 = "./data/to2"
9
+
10
+ def create_dir(dir)
11
+ if FileTest.directory?(dir)
12
+ FileUtils.rm_rf(dir)
13
+ end
14
+ FileUtils.mkpath(dir)
15
+ end
16
+
17
+ create_dir(to)
18
+ create_dir(to2)
19
+
20
+
21
+ arg = ["--backup-at=20210119", from, to]
22
+ Qdumpfs::Command.run(arg)
23
+ arg = ["--backup-at=20210121", from, to]
24
+ Qdumpfs::Command.run(arg)
25
+ arg = ["--backup-at=20210122", from, to]
26
+ Qdumpfs::Command.run(arg)
27
+ arg = ["--backup-at=20210123", from, to]
28
+ Qdumpfs::Command.run(arg)
29
+ arg = ["--backup-at=20210124", from, to]
30
+ Qdumpfs::Command.run(arg)
31
+
32
+
33
+ arg = ["--backup-at=20210122", from, to2]
34
+ Qdumpfs::Command.run(arg)
35
+ arg = ["--backup-at=20210123", from, to2]
36
+
37
+ arg = ["--command=delete", "--delete-from=20210122", "--delete-to=20210123", "--limit=1", to, to2]
38
+ Qdumpfs::Command.run(arg)
39
+
40
+
@@ -38,15 +38,18 @@ module Qdumpfs
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
- opt.on('--logdir LOGDIR', 'logdir') {|v| opts[:logdir] = v}
42
- opt.on('--delete-from YYYYMMDD', 'delete backup from YYYY/MM/DD') {|v|
41
+ opt.on('--logdir=LOGDIR', 'logdir') {|v| opts[:logdir] = v}
42
+ opt.on('--delete-from=YYYYMMDD', 'delete backup from YYYY/MM/DD') {|v|
43
43
  opts[:delete_from] = Date.parse(v)
44
44
  }
45
- opt.on('--delete-to YYYYMMDD', 'delete backup to YYYY/MM/DD') {|v|
45
+ opt.on('--delete-to=YYYYMMDD', 'delete backup to YYYY/MM/DD') {|v|
46
46
  opts[:delete_to] = Date.parse(v)
47
- }
47
+ }
48
+ opt.on('--backup-at=YYYYMMDD', 'backup at YYYY/MM/DD') {|v|
49
+ opts[:backup_at] = Date.parse(v)
50
+ }
48
51
  opt.parse!(argv)
49
- option = Option.new(opts, ARGV)
52
+ option = Option.new(opts, argv)
50
53
  if opts[:v]
51
54
  puts "<<<<< qdumpfs options >>>>> "
52
55
  puts "logdir: #{option.logdir}"
@@ -146,28 +149,28 @@ module Qdumpfs
146
149
  return src_count, dst_count
147
150
  end
148
151
 
149
- def get_snapshots(target_dir)
150
- # 指定したディレクトリに含まれるバックアップフォルダ(日付つき)を全て取得
151
- dd = "[0-9][0-9]"
152
- dddd = dd + dd
153
- # FIXME: Y10K problem.
154
- dirs = []
155
- glob_path = File.join(target_dir, dddd, dd, dd)
156
- Dir.glob(glob_path).sort.find {|dir|
157
- day, month, year = File.split_all(dir).reverse.map {|x| x.to_i }
158
- path = dir
159
- if File.directory?(path) and Date.valid_date?(year, month, day) and
160
- dirs << path
161
- end
162
- }
163
- dirs
164
- end
152
+ # def get_snapshots(target_dir)
153
+ # # 指定したディレクトリに含まれるバックアップフォルダ(日付つき)を全て取得
154
+ # dd = "[0-9][0-9]"
155
+ # dddd = dd + dd
156
+ # # FIXME: Y10K problem.
157
+ # dirs = []
158
+ # glob_path = File.join(target_dir, dddd, dd, dd)
159
+ # Dir.glob(glob_path).sort.find {|dir|
160
+ # day, month, year = File.split_all(dir).reverse.map {|x| x.to_i }
161
+ # path = diro
162
+ # if File.directory?(path) and Date.valid_date?(year, month, day) and
163
+ # dirs << path
164
+ # end
165
+ # }
166
+ # dirs
167
+ # end
165
168
 
166
- def get_snapshot_date(snapshot)
167
- # バックアップディレクトリのパス(日付つき)から日付を取得して返す
168
- day, month, year = File.split_all(snapshot).reverse.map {|x| x.to_i }
169
- Time.new(year, month, day)
170
- end
169
+ # def get_snapshot_date(snapshot)
170
+ # # バックアップディレクトリのパス(日付つき)から日付を取得して返す
171
+ # day, month, year = File.split_all(snapshot).reverse.map {|x| x.to_i }
172
+ # Time.new(year, month, day)
173
+ # end
171
174
 
172
175
  def update_snapshot(src, latest, today)
173
176
  # バックアップの差分コピーを実行
@@ -306,6 +309,9 @@ module Qdumpfs
306
309
 
307
310
  @written_bytes = 0
308
311
  start_time = Time.now
312
+ if @opt.backup_at
313
+ start_time = to_time(@opt.backup_at)
314
+ end
309
315
  src = @opt.src
310
316
  dst = @opt.dst
311
317
 
@@ -453,9 +459,9 @@ module Qdumpfs
453
459
  @opt.validate_directories(1)
454
460
 
455
461
  start_time = Time.now
462
+ p @opt.limit_sec
456
463
  limit_time = start_time + (@opt.limit_sec)
457
- log("##### #{cmd} start #{fmt(start_time)} => limit_time=#{fmt(limit_time)} #####")
458
-
464
+ log("##### #{cmd} delete-from=#{@opt.delete_from} delete-to=#{@opt.delete_to} start #{fmt(start_time)} => limit_time=#{fmt(limit_time)} #####")
459
465
  @opt.dirs.each do |target_dir|
460
466
 
461
467
  target_start = Time.now
@@ -140,14 +140,15 @@ module Qdumpfs
140
140
  @keep_week = $1.to_i if keep =~ /(\d+)W/
141
141
  @keep_day = $1.to_i if keep =~ /(\d+)D/
142
142
  @delete_from = @opts[:delete_from]
143
- @delete_to = @opts[:delete_to]
143
+ @delete_to = @opts[:delete_to]
144
+ @backup_at = @opts[:backup_at]
144
145
  @today = Date.today
145
146
  end
146
147
  attr_reader :dirs, :src, :dst, :cmd
147
148
  attr_reader :keep_year, :keep_month, :keep_week, :keep_day
148
149
  attr_reader :logdir, :logpath, :verifypath
149
150
  attr_reader :logger, :matcher, :reporter, :interval_proc
150
- attr_reader :delete_from, :delete_to
151
+ attr_reader :delete_from, :delete_to, :backup_at
151
152
 
152
153
  def report(type, filename)
153
154
  if @opts[:v]
@@ -217,14 +218,21 @@ module Qdumpfs
217
218
  end
218
219
 
219
220
  def detect_delete_dirs(backup_dirs, delete_from, delete_to)
221
+
220
222
  backup_dirs.each do |backup_dir|
221
223
  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
224
+ if delete_from && delete_to
225
+ if backup_dir.date >= delete_from && backup_dir.date <= delete_to
226
+ backup_dir.keep = false
227
+ end
228
+ elsif delete_from
229
+ if backup_dir.date >= delete_from
230
+ backup_dir.keep = false
231
+ end
232
+ elsif delete_to
233
+ if backup_dir.date <= delete_to
234
+ backup_dir.keep = false
235
+ end
228
236
  end
229
237
  end
230
238
  end
@@ -1,3 +1,4 @@
1
+ # coding: utf-8
1
2
  def wprintf(format, *args)
2
3
  STDERR.printf("pdumpfs: " + format + "\n", *args)
3
4
  end
@@ -278,6 +279,10 @@ module QdumpfsUtils
278
279
 
279
280
  def to_unix_path(path)
280
281
  path.gsub(/\\/, '/')
281
- end
282
+ end
283
+
284
+ def to_time(date)
285
+ Time.local(date.year, date.month, date.day)
286
+ end
282
287
  end
283
288
 
@@ -1,3 +1,3 @@
1
1
  module Qdumpfs
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -0,0 +1,5 @@
1
+ #!/bin/sh
2
+
3
+ curdir=$(dirname $0)
4
+ bundle exec ruby $curdir/exe/sample
5
+
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.6.0
4
+ version: 0.7.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-18 00:00:00.000000000 Z
11
+ date: 2021-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,6 +57,7 @@ email:
57
57
  - src@srcw.net
58
58
  executables:
59
59
  - qdumpfs
60
+ - sample
60
61
  extensions: []
61
62
  extra_rdoc_files: []
62
63
  files:
@@ -73,7 +74,10 @@ files:
73
74
  - bin/setup
74
75
  - build.cmd
75
76
  - build.sh
77
+ - data/from/0.txt
78
+ - data/from/a/1.txt
76
79
  - exe/qdumpfs
80
+ - exe/sample
77
81
  - lib/qdumpfs.rb
78
82
  - lib/qdumpfs/option.rb
79
83
  - lib/qdumpfs/util.rb
@@ -85,6 +89,7 @@ files:
85
89
  - run_qdumpfs.cmd
86
90
  - run_qdumpfs.sh
87
91
  - run_sync.cmd
92
+ - sample.sh
88
93
  - test_pdumpfs/data/bar
89
94
  - test_pdumpfs/data/baz/quux
90
95
  - test_pdumpfs/data/file