annotate src/luan/host/Backup.luan @ 1376:ba1b4583c2d5

enable restore
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 11 Jul 2019 23:30:55 -0600
parents 72b699bad1a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1374
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 local Luan = require "luan:Luan.luan"
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2 local error = Luan.error
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 local ipairs = Luan.ipairs or error()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 local Io = require "luan:Io.luan"
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 local uri = Io.uri or error()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 local Thread = require "luan:Thread.luan"
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 local run_in_lock = Thread.run_in_lock or error()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 local backup_write_lock = Thread.backup_write_lock or error()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 local Backup = {}
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 local function backup_nonlocal(from,to)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 to.mkdir()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 for _, from_child in ipairs(from.children()) do
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 local name = from_child.name()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 local to_child = to.child(name)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 if from_child.is_directory() then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 if name ~= "local" then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 backup_nonlocal( from_child, to_child )
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 elseif from_child.is_file() then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 to_child.link_to(from_child)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 else
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 error(from_child.to_string().." isn't dir or file")
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 local function backup_all(from,to)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 to.mkdir()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 for _, from_child in ipairs(from.children()) do
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 local name = from_child.name()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 local to_child = to.child(name)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 if from_child.is_directory() then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 backup_all( from_child, to_child )
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 elseif from_child.is_file() then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 to_child.link_to(from_child)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 else
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 error(from_child.to_string().." isn't dir or file")
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 local function backup_local(from,to)
1376
ba1b4583c2d5 enable restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 1374
diff changeset
46 local dir = "site/private/local/"
ba1b4583c2d5 enable restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 1374
diff changeset
47 from = from.child(dir.."backup")
ba1b4583c2d5 enable restore
Franklin Schmidt <fschmidt@gmail.com>
parents: 1374
diff changeset
48 to = to.child(dir.."restore")
1374
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 if from.exists() then
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 from.is_directory() or error(from.to_string().." isn't dir")
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 backup_all(from,to)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 local function backup(backup_dir)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
56 local sites_dir = uri "file:sites"
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
57 backup_dir.mkdir()
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
58 for _, site_dir in ipairs(sites_dir.children()) do
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
59 local to = backup_dir.child(site_dir.name())
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
60 backup_nonlocal( site_dir, to )
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
61 backup_local( site_dir, to )
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
62 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
63 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
64
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 function Backup.backup(backup_dir)
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
66 run_in_lock( backup_write_lock, backup, backup_dir )
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
67 end
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
68
72b699bad1a4 add Backup.luan
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
69 return Backup