qdumpfs 0.6.0 → 0.7.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 +4 -4
- data/.gitignore +3 -0
- data/Gemfile.lock +1 -1
- data/data/from/0.txt +1 -0
- data/data/from/a/1.txt +1 -0
- data/exe/sample +40 -0
- data/lib/qdumpfs.rb +34 -28
- data/lib/qdumpfs/option.rb +16 -8
- data/lib/qdumpfs/util.rb +6 -1
- data/lib/qdumpfs/version.rb +1 -1
- data/sample.sh +5 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d4d28c42fc54a4ba9ba806aa57c056774889663cfa011d1cb8ff6d259a3368b
|
4
|
+
data.tar.gz: fcfa95f0abdbaf1a8b571cf088fa83811e1984f4bd7bcd1283e68bdad3ce894b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1af10ef6521b9f775a538dc666e06f4cc4222131413144c8eacd59d795242890db306411e34076b041ac356b0a2e6a0c74c50cf221e01550caf0b18260bd738
|
7
|
+
data.tar.gz: 68351bac00ffe057beb25433f5d158c74814a2a20efa43cd15a8a608cc800f5655b6f41be2b1292e8ebc1b7b63e43f01add315daaa3503d047f4139e7dbf4848
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
data/data/from/0.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0
|
data/data/from/a/1.txt
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1
|
data/exe/sample
ADDED
@@ -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
|
+
|
data/lib/qdumpfs.rb
CHANGED
@@ -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
|
42
|
-
opt.on('--delete-from
|
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
|
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,
|
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 =
|
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
|
data/lib/qdumpfs/option.rb
CHANGED
@@ -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 &&
|
223
|
-
backup_dir.
|
224
|
-
|
225
|
-
|
226
|
-
elsif
|
227
|
-
backup_dir.
|
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
|
data/lib/qdumpfs/util.rb
CHANGED
@@ -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
|
|
data/lib/qdumpfs/version.rb
CHANGED
data/sample.sh
ADDED
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.
|
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:
|
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
|