rustic 0.3.0 → 0.3.3
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/.github/workflows/main.yml +0 -1
- data/Gemfile.lock +5 -5
- data/{rustic.rb → examples/rustic.rb} +24 -1
- data/lib/rustic/application.rb +2 -3
- data/lib/rustic/command_builder.rb +6 -5
- data/lib/rustic/command_builders/backup.rb +10 -7
- data/lib/rustic/command_builders/check.rb +12 -9
- data/lib/rustic/command_builders/forget.rb +8 -7
- data/lib/rustic/command_builders/prune.rb +3 -3
- data/lib/rustic/command_builders/snapshots.rb +3 -3
- data/lib/rustic/configs/backup.rb +6 -1
- data/lib/rustic/evaluator.rb +10 -10
- data/lib/rustic/hooks.rb +3 -3
- data/lib/rustic/version.rb +1 -1
- data/lib/rustic.rb +1 -1
- data/rustic.gemspec +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 749ff9e10d60fb610892f8c1984fcc5badf605eb5ef7dbe954d71f70aaf6e335
|
4
|
+
data.tar.gz: 0c499c7d0fd8536f464a8c9410099c9d0d9e587895f53fd50e8aff406dc20344
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d806e658a7aedb406195cf6eeb87579c891a2e4c71db159685a5bcfe8ad94375e9ecdb9dcf9d56c06ed1e2164376f565793e55854b1d222fdf0fd2ada5bdcae
|
7
|
+
data.tar.gz: 1f592a8a4e737873ede871bc1877bf0da4f5959a8e384835f7412950456d6db38fb55ce691b71cd75a2f0a22144cc80730a873bbf77026db4b12bb1a990fef2a
|
data/.github/workflows/main.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rustic (0.3.
|
4
|
+
rustic (0.3.3)
|
5
5
|
async-process (~> 1.3)
|
6
6
|
ptools (~> 1.4)
|
7
7
|
zeitwerk (~> 2.5)
|
@@ -10,11 +10,11 @@ GEM
|
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
12
|
ast (2.4.2)
|
13
|
-
async (1.30.
|
13
|
+
async (1.30.3)
|
14
14
|
console (~> 1.10)
|
15
15
|
nio4r (~> 2.3)
|
16
16
|
timers (~> 4.1)
|
17
|
-
async-io (1.
|
17
|
+
async-io (1.33.0)
|
18
18
|
async
|
19
19
|
async-process (1.3.1)
|
20
20
|
async
|
@@ -25,7 +25,7 @@ GEM
|
|
25
25
|
rspec-memory (~> 1.0)
|
26
26
|
backport (1.2.0)
|
27
27
|
benchmark (0.2.0)
|
28
|
-
console (1.
|
28
|
+
console (1.15.3)
|
29
29
|
fiber-local
|
30
30
|
diff-lcs (1.4.4)
|
31
31
|
docile (1.4.0)
|
@@ -110,7 +110,7 @@ GEM
|
|
110
110
|
timers (4.3.3)
|
111
111
|
unicode-display_width (2.1.0)
|
112
112
|
yard (0.9.26)
|
113
|
-
zeitwerk (2.
|
113
|
+
zeitwerk (2.6.0)
|
114
114
|
|
115
115
|
PLATFORMS
|
116
116
|
x86_64-linux
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
require "rustic"
|
5
5
|
|
6
|
-
Rustic.define do
|
6
|
+
Rustic.define do # rubocop:disable Metrics/BlockLength
|
7
7
|
repository "tmp/repository"
|
8
8
|
|
9
9
|
password "password"
|
@@ -27,6 +27,29 @@ Rustic.define do
|
|
27
27
|
exclude "lib/rustic"
|
28
28
|
end
|
29
29
|
|
30
|
+
check do
|
31
|
+
before do
|
32
|
+
logger.info(self, "BEFORE CHECK")
|
33
|
+
end
|
34
|
+
|
35
|
+
after do
|
36
|
+
logger.info(self, "AFTER CHECK")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
forget do
|
41
|
+
before do
|
42
|
+
logger.info(self, "BEFORE FORGET")
|
43
|
+
end
|
44
|
+
|
45
|
+
after do
|
46
|
+
logger.info(self, "AFTER FORGET")
|
47
|
+
end
|
48
|
+
|
49
|
+
prune!
|
50
|
+
keep(last: 2, weekly: 2, monthly: 2)
|
51
|
+
end
|
52
|
+
|
30
53
|
after do
|
31
54
|
logger.info(self, "AFTER")
|
32
55
|
end
|
data/lib/rustic/application.rb
CHANGED
@@ -7,9 +7,8 @@ class Rustic::Application
|
|
7
7
|
@config = config
|
8
8
|
end
|
9
9
|
|
10
|
-
def run(argv)
|
10
|
+
def run(*argv)
|
11
11
|
command = argv.first || "backup"
|
12
|
-
|
13
|
-
Rustic::Wrapper.new(command, env).run
|
12
|
+
Rustic::Evaluator.new(command, @config).evaluate
|
14
13
|
end
|
15
14
|
end
|
@@ -18,14 +18,14 @@ class Rustic::CommandBuilder
|
|
18
18
|
add_repository_path!
|
19
19
|
add_password!
|
20
20
|
|
21
|
-
add_command!
|
21
|
+
config = add_command!
|
22
22
|
|
23
|
-
[[@config.restic_path, *@args], @env_variables] # TODO: properly handle spaces in paths
|
23
|
+
[[@config.restic_path, *@args], @env_variables, config] # TODO: properly handle spaces in paths
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def add_repository_path! = @args
|
28
|
+
def add_repository_path! = @args.concat(["-r", @config.repository])
|
29
29
|
|
30
30
|
def add_password!
|
31
31
|
return @env_variables.merge!("RESTIC_PASSWORD" => @config.password) if @config.password
|
@@ -35,8 +35,9 @@ class Rustic::CommandBuilder
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def add_command!
|
38
|
-
|
39
|
-
@args.concat(
|
38
|
+
command_builder = Rustic::CommandBuilders.const_get(@command.capitalize).new(@config)
|
39
|
+
@args.concat(command_builder.build)
|
40
|
+
command_builder.config
|
40
41
|
rescue NameError
|
41
42
|
raise UnknownCommandError, "Unknown command #{@command}"
|
42
43
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Rustic::CommandBuilders::Backup
|
4
|
+
attr_reader :config
|
5
|
+
|
4
6
|
def initialize(config)
|
5
|
-
@config = config
|
7
|
+
@config = config.backup_config
|
6
8
|
end
|
7
9
|
|
8
10
|
def build
|
9
|
-
|
10
|
-
raise Rustic::CommandBuilder::
|
11
|
-
raise Rustic::CommandBuilder::MalformedConfigError, "Backup paths cannot be empty" if config.paths.empty?
|
11
|
+
raise Rustic::CommandBuilder::MissingConfigError, "Command `backup` misses it's configuration" if @config.nil?
|
12
|
+
raise Rustic::CommandBuilder::MalformedConfigError, "Backup paths cannot be empty" if @config.paths.empty?
|
12
13
|
|
13
14
|
[
|
15
|
+
"--compression",
|
16
|
+
@config.compression_mode,
|
14
17
|
"backup",
|
15
|
-
config.one_fs ? "-x" : nil,
|
16
|
-
|
18
|
+
@config.one_fs ? "-x" : nil,
|
19
|
+
*@config.paths,
|
17
20
|
*excludes
|
18
21
|
].compact
|
19
22
|
end
|
20
23
|
|
21
24
|
private
|
22
25
|
|
23
|
-
def excludes = ["--exclude"].product(@config.
|
26
|
+
def excludes = ["--exclude"].product(@config.excluded_paths).flatten
|
24
27
|
end
|
@@ -1,24 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Rustic::CommandBuilders::Check
|
4
|
+
attr_reader :config
|
5
|
+
|
4
6
|
def initialize(config)
|
5
|
-
@config = config
|
7
|
+
@config = config.check_config
|
6
8
|
end
|
7
9
|
|
8
10
|
def build
|
9
|
-
config = @config.check_config
|
10
11
|
[
|
11
12
|
"check",
|
12
|
-
config&.check_unused ? "--check-unused" : nil,
|
13
|
-
read_data_subset
|
14
|
-
config&.with_cache ? "--with-cache" : nil
|
13
|
+
@config&.check_unused ? "--check-unused" : nil,
|
14
|
+
read_data_subset,
|
15
|
+
@config&.with_cache ? "--with-cache" : nil
|
15
16
|
].compact
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
private
|
20
|
+
|
21
|
+
def read_data_subset
|
22
|
+
return nil if @config.nil? || @config.read_data_subset.nil?
|
23
|
+
return "--read-data" if @config.read_data_subset == 100
|
21
24
|
|
22
|
-
"--read-data-subset=#{config.read_data_subset}%"
|
25
|
+
"--read-data-subset=#{@config.read_data_subset}%"
|
23
26
|
end
|
24
27
|
end
|
@@ -1,20 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
class Rustic::CommandBuilders::Forget
|
4
|
+
attr_reader :config
|
5
|
+
|
4
6
|
def initialize(config)
|
5
|
-
@config = config
|
7
|
+
@config = config.forget_config
|
6
8
|
end
|
7
9
|
|
8
10
|
def build
|
9
|
-
|
10
|
-
raise Rustic::CommandBuilder::MissingConfigError, "Command `forget` misses it's configuration" if config.nil?
|
11
|
+
raise Rustic::CommandBuilder::MissingConfigError, "Command `forget` misses it's configuration" if @config.nil?
|
11
12
|
|
12
13
|
[
|
13
14
|
"forget",
|
14
|
-
config.keep_last ? "--keep-last=#{config.keep_last}" : nil,
|
15
|
-
config.keep_weekly ? "--keep-weekly=#{config.keep_weekly}" : nil,
|
16
|
-
config.keep_monthly ? "--keep-monthly=#{config.keep_monthly}" : nil,
|
17
|
-
config.prune ? "--prune" : nil
|
15
|
+
@config.keep_last ? "--keep-last=#{@config.keep_last}" : nil,
|
16
|
+
@config.keep_weekly ? "--keep-weekly=#{@config.keep_weekly}" : nil,
|
17
|
+
@config.keep_monthly ? "--keep-monthly=#{@config.keep_monthly}" : nil,
|
18
|
+
@config.prune ? "--prune" : nil
|
18
19
|
].compact
|
19
20
|
end
|
20
21
|
end
|
@@ -3,12 +3,13 @@
|
|
3
3
|
class Rustic::Configs::Backup
|
4
4
|
include Rustic::HooksExt
|
5
5
|
|
6
|
-
attr_reader :paths, :excluded_paths, :one_fs
|
6
|
+
attr_reader :paths, :excluded_paths, :one_fs, :compression_mode
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@paths = []
|
10
10
|
@excluded_paths = []
|
11
11
|
@one_fs = false
|
12
|
+
@compression_mode = "auto"
|
12
13
|
end
|
13
14
|
|
14
15
|
def backup(*paths)
|
@@ -24,4 +25,8 @@ class Rustic::Configs::Backup
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def one_fs! = @one_fs = true
|
28
|
+
|
29
|
+
def compression(value)
|
30
|
+
@compression_mode = value
|
31
|
+
end
|
27
32
|
end
|
data/lib/rustic/evaluator.rb
CHANGED
@@ -3,11 +3,19 @@
|
|
3
3
|
class Rustic::Evaluator
|
4
4
|
include Console
|
5
5
|
|
6
|
-
def initialize(config)
|
6
|
+
def initialize(command, config)
|
7
|
+
@command = command
|
8
|
+
@config = config
|
9
|
+
end
|
7
10
|
|
8
11
|
def evaluate
|
9
12
|
with_hooks(@config) do
|
10
|
-
|
13
|
+
builder = Rustic::CommandBuilder.new(@command, @config)
|
14
|
+
command, env, config = builder.build
|
15
|
+
|
16
|
+
with_hooks(config) do
|
17
|
+
Rustic::Wrapper.new(command, env).run
|
18
|
+
end
|
11
19
|
end
|
12
20
|
rescue StandardError => e
|
13
21
|
on_error(e)
|
@@ -15,13 +23,5 @@ class Rustic::Evaluator
|
|
15
23
|
end
|
16
24
|
|
17
25
|
def on_error(error) = @config.on_error&.call(error)
|
18
|
-
|
19
|
-
def backup!
|
20
|
-
with_hooks(@config.backup_config) do
|
21
|
-
command, env = Rustic::CommandBuilder.new("backup", @config).build
|
22
|
-
Rustic::Wrapper.new(command, env).run
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
26
|
def with_hooks(config, args = nil, &block) = Rustic::Hooks.new(config).with_hooks(args, &block)
|
27
27
|
end
|
data/lib/rustic/hooks.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
class Rustic::Hooks
|
4
4
|
def initialize(config)
|
5
|
-
@before = config
|
6
|
-
@after = config
|
5
|
+
@before = config&.before
|
6
|
+
@after = config&.after
|
7
7
|
end
|
8
8
|
|
9
9
|
def with_hooks(arg = nil)
|
@@ -11,6 +11,6 @@ class Rustic::Hooks
|
|
11
11
|
|
12
12
|
@before&.call(arg)
|
13
13
|
yield
|
14
|
-
@after&.call(arg)
|
14
|
+
@after&.call(arg)
|
15
15
|
end
|
16
16
|
end
|
data/lib/rustic/version.rb
CHANGED
data/lib/rustic.rb
CHANGED
data/rustic.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
spec.description = "DSL for the restic backup tool."
|
13
13
|
spec.homepage = "https://github.com/zhulik/rustic"
|
14
14
|
spec.license = "MIT"
|
15
|
-
spec.required_ruby_version =
|
15
|
+
spec.required_ruby_version = [">= 3.0.0", "< 3.1"]
|
16
16
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
18
18
|
# spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rustic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Sinyavskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-process
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- Rakefile
|
74
74
|
- bin/console
|
75
75
|
- bin/setup
|
76
|
+
- examples/rustic.rb
|
76
77
|
- lib/rustic.rb
|
77
78
|
- lib/rustic/application.rb
|
78
79
|
- lib/rustic/command_builder.rb
|
@@ -92,7 +93,6 @@ files:
|
|
92
93
|
- lib/rustic/version.rb
|
93
94
|
- lib/rustic/wrapper.rb
|
94
95
|
- rustic.gemspec
|
95
|
-
- rustic.rb
|
96
96
|
- rustic_script.rb
|
97
97
|
homepage: https://github.com/zhulik/rustic
|
98
98
|
licenses:
|
@@ -108,6 +108,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 3.0.0
|
111
|
+
- - "<"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '3.1'
|
111
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
115
|
requirements:
|
113
116
|
- - ">="
|