Empty folders in backup and restore, a full disk stops a restore, progress in the Bin
- Record folders without files in the meta record of a snapshot and restore them (#27) - Errors writing to the restore directory stop the restore, also with --salvage - Resume: check the folder before skipping, clean temporaries in folders that are complete - Clean only read-ahead folders of our own; refresh the lease on skipped files - Drop tables a failed database restore created; keep --salvage from calling a restored database fresh - Retry a pack that fails to open on the storage (SMB) - Without cron, running backups take turns from the open page - Bin: read in parts with a counter and progress bar, show read errors, refresh when a run ends
This commit is contained in:
@@ -28,6 +28,28 @@ class TreeWalkerTest extends TestCase {
|
||||
$this->assertSame(['Z', 'a', 'a-b', 'a.txt', 'b', 'skip'], array_values(array_unique(array_map(fn ($p) => explode('/', $p)[0], $paths))));
|
||||
}
|
||||
|
||||
public function testEmptyDirectoriesAreYieldedInOrderAndOnResume(): void {
|
||||
$d = $this->tree();
|
||||
mkdir("$d/a/empty");
|
||||
mkdir("$d/a-hollow/inner", 0700, true);
|
||||
symlink("$d/a.txt", "$d/skip/link");
|
||||
mkdir("$d/only-link");
|
||||
symlink("$d/a.txt", "$d/only-link/link");
|
||||
$w = new TreeWalker(['' => $d]);
|
||||
$all = array_keys(iterator_to_array($w->walk()));
|
||||
$this->assertContains('a/empty', $all);
|
||||
$this->assertContains('a-hollow/inner', $all);
|
||||
$this->assertNotContains('a-hollow', $all, 'only the deepest');
|
||||
$this->assertContains('only-link', $all, 'a link is not walked');
|
||||
$this->assertNotContains('skip', $all);
|
||||
$sorted = $all;
|
||||
usort($sorted, [TreeWalker::class, 'compare']);
|
||||
$this->assertSame($sorted, $all);
|
||||
foreach ($all as $i => $cursor) {
|
||||
$this->assertSame(array_slice($all, $i + 1), array_keys(iterator_to_array($w->walk($cursor))), "after $cursor");
|
||||
}
|
||||
}
|
||||
|
||||
public function testResumeAfterCursorYieldsTheRest(): void {
|
||||
$w = new TreeWalker(['' => $this->tree()]);
|
||||
$all = array_keys(iterator_to_array($w->walk()));
|
||||
|
||||
Reference in New Issue
Block a user