qdumpfs 1.8.1 → 1.9.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: 84137d9c47fc2201cb2bfc18f8faaa470a3e019d0c17b88990c80e16964f0cbd
4
- data.tar.gz: abf643910675dca1d31b37eb621db10ba16b612cb3f8626c13a94d0c9b958519
3
+ metadata.gz: 7ceb1f25cb5025a606c5507c7184eb17464f38b21878cb233719348bd5aab369
4
+ data.tar.gz: 31370e10bda2e023e862b5e06d41f93c4c738a69c4146f3dfa3f2022ba4bd69c
5
5
  SHA512:
6
- metadata.gz: cec209e60e35e2d8f791b3fd7de687b148d53f3a17a7ffac0c6802b8808f3c3cbd1aa00b59e3d4951766e76f878bd6c7cef25587d1131485c1e9f7388e9f1b46
7
- data.tar.gz: 26f587244ecefe4198e52d6ebe6e2c33905dedf1d9df95a4e7a553aed9d1f725adce8337c40b9c7db52d263cf7a152c57e803fe8f65c1eeaea19f23b2947c7bf
6
+ metadata.gz: c5510e2e47588c732850e65a1dad47d6f90583d8ca946a0ce0b5318bf4941b753941d3d84cffcd1db3ee7d62de751dc05601165830618432101bcfe653df837c
7
+ data.tar.gz: 646d986c74e35668d1910405726acf19efd323a9c1f468f32bd2488e854a14904672cfd20306dc09f4f7e980f23fa76b26b2182dd22601b205e0da40ea39df85
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qdumpfs (1.8.1)
4
+ qdumpfs (1.9.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -68,6 +68,13 @@ qdumpfs --command=sync --limit=1 /backup1 /backup2
68
68
  qdumpfs --command=sync --limit=1 --keep=5Y6M7W10D backup1 /backup2
69
69
  ```
70
70
 
71
+ バックアップの同期は、コピー先の最新の日付より新しいコピー元を選択して実行されます。これはバックアップの同期が途中で中断された場合、再開することができるようにするためです。
72
+ 例えばコピー先に2024/11/01のバックアップが存在する場合、コピー元の2024/11/01より後のバックアップデータ(例えば2024/11/02)があれば、それが同期されます(同じ日付は同期されません)。
73
+
74
+
75
+ ```
76
+
77
+
71
78
  ### バックアップフォルダの削除
72
79
 
73
80
  "--command expire"で、"--keep="パターンに該当しないバックアップを削除できます。
@@ -121,11 +121,17 @@ module Qdumpfs
121
121
  @cmd = @opts[:c] || 'backup'
122
122
 
123
123
  # @logger = NullLogger.new
124
- logfile = 'qdumpfs.log'
125
- #ログディレクトリの作成
126
- @logdir = @opts[:logdir] || Dir.pwd
124
+ if @opts[:logpath]
125
+ @logpath = @opts[:logpath]
126
+ @logdir = File.dirname(@logpath)
127
+ else
128
+ logname = @opts[:logname] || 'qdumpfs.log'
129
+ #ログディレクトリの作成
130
+ @logdir = @opts[:logdir] || Dir.pwd
131
+ @logpath = File.join(@logdir, logname)
132
+ end
133
+
127
134
  Dir.mkdir(@logdir) unless FileTest.directory?(@logdir)
128
- @logpath = File.join(@logdir, logfile)
129
135
  @logger = SimpleLogger.new(@logpath)
130
136
 
131
137
  verifyfile = 'verify.txt'
@@ -184,18 +190,24 @@ module Qdumpfs
184
190
  end
185
191
  else
186
192
  # 何も指定されていない場合
187
- if type == 'new_file' || type == 'symlink'
193
+ if type == 'new_file'
188
194
  stat = File.stat(filename)
189
195
  size = stat.size
190
196
  msg = format_report(type, filename, size)
197
+ elsif type == 'symlink'
198
+ # symlinkの場合File.statでエラーが発生する場合があるので使わない。
199
+ msg = format_report(type, filename, 0)
191
200
  end
192
201
  end
193
202
  log(msg)
194
203
  end
195
204
 
196
- def report_error(filename, reason)
197
- msg = sprintf("err_file\t%s\t%s\n", filename, reason)
205
+ def report_error(filename, ex)
206
+ msg = sprintf("err_file\t%s\t%s\n", filename, ex.message)
198
207
  log(msg)
208
+ ex.backtrace.each do |line|
209
+ log(line)
210
+ end
199
211
  end
200
212
 
201
213
  def log(msg, console = true)
data/lib/qdumpfs/util.rb CHANGED
@@ -133,6 +133,8 @@ module QdumpfsUtils
133
133
  FileUtils.cp(src, dest)
134
134
  unless FileTest.file?(dest)
135
135
  raise "copy_file fails #{dest}"
136
+ else
137
+ @write_bytes += block.size
136
138
  end
137
139
  end
138
140
 
@@ -1,4 +1,4 @@
1
1
  module Qdumpfs
2
- VERSION = "1.8.1"
2
+ VERSION = "1.9.0"
3
3
  end
4
4
 
data/lib/qdumpfs.rb CHANGED
@@ -40,6 +40,8 @@ module Qdumpfs
40
40
  opt.on('-l HOURS', '--limit=HOURS', 'limit hours') {|v| opts[:limit] = v}
41
41
  opt.on('-k KEEPARG', '--keep=KEEPARG', 'ex: --keep 100Y12M12W30D (100years, 12months, 12weeks, 30days, default)') {|v| opts[:keep] = v}
42
42
  opt.on('--logdir=LOGDIR', 'logdir') {|v| opts[:logdir] = v}
43
+ opt.on('--logname=LOGNAME', 'logname') {|v| opts[:logname] = v}
44
+ opt.on('--logpath=LOGPATH', 'logpath') {|v| opts[:logpath] = v}
43
45
  opt.on('--delete-from=YYYYMMDD', 'delete backup from YYYY/MM/DD') {|v|
44
46
  opts[:delete_from] = Date.parse(v)
45
47
  }
@@ -125,8 +127,8 @@ module Qdumpfs
125
127
  @opt.report(type, file_name)
126
128
  end
127
129
 
128
- def report_error(file_name, reason)
129
- @opt.report_error(file_name, reason)
130
+ def report_error(file_name, exception)
131
+ @opt.report_error(file_name, exception)
130
132
  end
131
133
 
132
134
  def update_file(src, latest, today)
@@ -197,7 +199,7 @@ module Qdumpfs
197
199
  update_file(s, l, t)
198
200
  dirs[t] = File.stat(s) if File.ftype(s) == "directory"
199
201
  rescue => e
200
- report_error(s, e.message)
202
+ report_error(s, e)
201
203
  @error_files << [s, e.message]
202
204
  next
203
205
  end
@@ -234,7 +236,7 @@ module Qdumpfs
234
236
  chown_if_root(type, s, t)
235
237
  dirs[t] = File.stat(s) if File.ftype(s) == "directory"
236
238
  rescue => e
237
- report_error(s, e.message)
239
+ report_error(s, e)
238
240
  @error_files << [s, e.message]
239
241
  next
240
242
  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: 1.8.1
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - src
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-06 00:00:00.000000000 Z
11
+ date: 2024-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler