diff options
author | Eric Wong <e@80x24.org> | 2021-09-17 11:00:23 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-09-17 21:49:41 +0000 |
commit | 876e74283ff36462607626dec2105e28f2db9bb7 (patch) | |
tree | b18140d56f7acc429c2ccf684a79046f5094a80c /t | |
parent | fe1b11bf5a752743167018f77e2826304ba0aa0e (diff) | |
download | public-inbox-876e74283ff36462607626dec2105e28f2db9bb7.tar.gz |
This will eventually be useful for maintaing partial mirrors. Keeping inline with the original public-inbox-fetch philosophy, there are no additional config files to manage: the user merely needs to remove write permissions to an $N.git directory to prevent it from being updated. Re-enabling updates just requires restoring write permission.
Diffstat (limited to 't')
-rw-r--r-- | t/v2mirror.t | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/t/v2mirror.t b/t/v2mirror.t index 3df5d053..665a4d59 100644 --- a/t/v2mirror.t +++ b/t/v2mirror.t @@ -3,7 +3,7 @@ use strict; use v5.10.1; use PublicInbox::TestCommon; -use File::Path qw(remove_tree); +use File::Path qw(remove_tree make_path); use Cwd qw(abs_path); require_git(2.6); require_cmd('curl'); @@ -235,6 +235,34 @@ for my $d (@new_epochs) { 'include.path set'); } +if ('test read-only epoch dirs') { + my @git = ('git', "--git-dir=$new_epochs[0]"); + my $get_objs = [@git, + qw(cat-file --buffer --batch-check --batch-all-objects)]; + my $before = [sort xqx($get_objs)]; + + remove_tree(map { "$new_epochs[0]/$_" } qw(objects refs/heads)); + chmod(0555, $new_epochs[0]) or xbail "chmod: $!"; + + # force a refetch + unlink("$tmpdir/m/manifest.js.gz") or xbail "unlink: $!"; + + run_script([qw(-fetch -q)], undef, {-C => "$tmpdir/m"}) or + xbail '-fetch failed'; + + ok(!-d "$new_epochs[0]/objects", 'no objects after fetch to R/O dir'); + + chmod(0755, $new_epochs[0]) or xbail "chmod: $!"; + mkdir("$new_epochs[0]/objects") or xbail "mkdir: $!"; + mkdir("$new_epochs[0]/refs/heads") or xbail "mkdir: $!"; + + my $err = ''; + run_script([qw(-fetch -q)], undef, {-C => "$tmpdir/m", 2 => \$err}) or + xbail '-fetch failed '.$err; + is_deeply([ sort xqx($get_objs) ], $before, + 'fetch restored objects once GIT_DIR became writable'); +} + ok($td->kill, 'killed httpd'); $td->join; |