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 +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
|