Mercurial Hosting > luan
view src/luan/host/Backup.luan @ 1398:67c0e47b5be3
more lucene
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 11 Sep 2019 15:48:49 -0600 |
parents | ba1b4583c2d5 |
children |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local ipairs = Luan.ipairs or error() local Io = require "luan:Io.luan" local uri = Io.uri or error() local Thread = require "luan:Thread.luan" local run_in_lock = Thread.run_in_lock or error() local backup_write_lock = Thread.backup_write_lock or error() local Backup = {} local function backup_nonlocal(from,to) to.mkdir() for _, from_child in ipairs(from.children()) do local name = from_child.name() local to_child = to.child(name) if from_child.is_directory() then if name ~= "local" then backup_nonlocal( from_child, to_child ) end elseif from_child.is_file() then to_child.link_to(from_child) else error(from_child.to_string().." isn't dir or file") end end end local function backup_all(from,to) to.mkdir() for _, from_child in ipairs(from.children()) do local name = from_child.name() local to_child = to.child(name) if from_child.is_directory() then backup_all( from_child, to_child ) elseif from_child.is_file() then to_child.link_to(from_child) else error(from_child.to_string().." isn't dir or file") end end end local function backup_local(from,to) local dir = "site/private/local/" from = from.child(dir.."backup") to = to.child(dir.."restore") if from.exists() then from.is_directory() or error(from.to_string().." isn't dir") backup_all(from,to) end end local function backup(backup_dir) local sites_dir = uri "file:sites" backup_dir.mkdir() for _, site_dir in ipairs(sites_dir.children()) do local to = backup_dir.child(site_dir.name()) backup_nonlocal( site_dir, to ) backup_local( site_dir, to ) end end function Backup.backup(backup_dir) run_in_lock( backup_write_lock, backup, backup_dir ) end return Backup