local helpers = require('helpers')
local recovery = require('recovery')
local paths = require('paths')
local tar = require('ltar')
local lfs = require('lfs')
local backup = {}
-- Match only files with '.db' extensions and omit such files inside subdirectories
local match_db_files = '^[^%/]*%.db$'
backup.script_name = "backup.lua"
backup.img_in_progress = "assets/gui_image_backup_in_progress.bin"
backup.img_success = "assets/gui_image_backup_success.bin"
backup.img_failure = "assets/gui_image_backup_failed.bin"
local function check_available_space()
local db_size = helpers.dir_size_filtered(paths.db_dir, match_db_files)
local version_size = lfs.attributes(paths.version_file, 'size')
local available_space = recovery.sys.free_space(recovery.sys.user())
-- Multiply the result by two due to the internal padding inside tar
local required_space = (db_size + version_size) * 2
print(string.format("Checking disk space:\nNeeded space: %d bytes, available space: %d bytes", required_space,
available_space))
assert(available_space > required_space, "Not enough free space on user disk")
end
local function create_temp_dir()
if not helpers.exists(paths.temp_dir) then
print(string.format("'%s' does not exist, creating", paths.temp_dir))
lfs.mkdir(paths.temp_dir)
end
end
local function create_backup_package()
print(string.format("Creating backup package from the contents of '%s' directory and saving it into '%s'",
paths.db_dir, paths.backup_file))
tar.create_from_path_regex(paths.db_dir, paths.backup_file, match_db_files)
tar.append_file(paths.version_file, paths.backup_file)
end
function backup.execute()
check_available_space()
create_temp_dir()
create_backup_package()
end
return backup