Add option -r for executing restic

The new option -r allows executing any restic command with the
repository and password settings specified in the configuration file.
This commit is contained in:
Martin Puppe 2020-03-25 23:27:00 +01:00
parent fa451cb664
commit c400af5ed4

View file

@ -37,17 +37,18 @@ unset_restic_vars
options = {}
options[:config_names] = []
options[:prune] = false
options[:run_restic] = false
OptionParser.new do |parser|
parser.on("-c NAME", "--configuration-name NAME", "Name of the configuration to use") do |v|
options[:config_names] << v
end
parser.on("-f CONFIG_FILE", "--config-file CONFIG_FILE", "Path to the configuration file") do |v|
parser.on("-f CONFIG_FILE", "--config-file CONFIG_FILE", "Path to the configuration file.") do |v|
options[:config_file] = v
end
parser.on("-h", "--help", "Print this help") do
parser.on("-h", "--help", "Print this help.") do
puts parser
exit
end
@ -56,7 +57,14 @@ OptionParser.new do |parser|
options[:prune] = v
end
parser.on('--version', "Print version number") do
parser.on('-r', '--run-restic', 'Set environment variables '\
'RESTIC_REPOSITORY and RESTIC_PASSWORD, execute restic (while passing '\
'all following command line arguments to restic).') do |v|
options[:run_restic] = v
parser.terminate
end
parser.on('--version', "Print version number.") do
puts "#{NAME}, #{VERSION}"
exit
end
@ -83,9 +91,6 @@ def check
end
def backup(config)
puts "Applying configuration #{config['name']} …"
set_restic_vars(config)
puts "Backing up with restic …"
# https://restic.readthedocs.io/en/latest/040_backup.html#including-and-excluding-files
exclude = config.dig('backup', 'exclude')&.flat_map{|e| ['--exclude', e]} || []
@ -117,9 +122,6 @@ def backup(config)
end
def prune(config)
puts "Applying configuration #{config['name']} …"
set_restic_vars(config)
puts 'Pruning restic repo …'
prune_command = ['restic', 'prune']
puts("Command: #{prune_command.join(' ')}")
@ -131,17 +133,32 @@ def prune(config)
check
end
def run_restic(config)
puts 'Executing restic with the following arguments …'
puts "ARGV: #{ARGV}"
exec('restic', *ARGV)
end
def act(config, options)
puts "Applying configuration #{config['name']} …"
set_restic_vars(config)
if options[:prune]
prune config
elsif options[:run_restic]
run_restic config
else
backup config
end
unset_restic_vars
end
puts "Using config file #{config_file} …"
configs = YAML.load_stream(File.open(config_file))
config_names = options[:config_names]
if config_names.empty?
puts "No configuration name has been given. Will use the first "\
"configuration from the file (#{configs.dig(0, 'name')})."
if options[:prune]
prune configs[0]
else
backup configs[0]
end
act(configs[0], options)
else
config_hash = configs.map {|c| [c['name'], c]}.to_h
config_names.each do |name|
@ -150,11 +167,6 @@ else
end
end
config_names.each do |config_name|
config = config_hash[config_name]
if options[:prune]
prune config
else
backup config
end
act(config_hash[config_name], options)
end
end