X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t%2Fclone-coderepo.t;h=1f33a6d723df66fe571ed2920c8520f2c94715a0;hb=402234aa4eaf4732e5e1636099115465ec6e5c15;hp=eb8f8b377bcfc91c46a07a518ee89bf1a1f409f7;hpb=5d6724a6a024f1c8ac96a485c1682be28373dc50;p=public-inbox.git diff --git a/t/clone-coderepo.t b/t/clone-coderepo.t index eb8f8b37..1f33a6d7 100644 --- a/t/clone-coderepo.t +++ b/t/clone-coderepo.t @@ -5,7 +5,8 @@ use v5.12; use PublicInbox::TestCommon; use PublicInbox::Import; use File::Temp; -use Digest::SHA qw(sha1_hex); +use File::Path qw(remove_tree); +use PublicInbox::SHA qw(sha1_hex); require_mods(qw(json Plack::Builder HTTP::Date HTTP::Status)); require_git '1.8.5'; require_ok 'PublicInbox::LeiMirror'; @@ -85,7 +86,7 @@ EOM } my $cmd = [qw(-clone --inbox-config=never --manifest= --project-list= - --objstore= -p -q), $url, "$tmpdir/dst"]; + --objstore= -p -q), $url, "$tmpdir/dst", '--exit-code']; ok(run_script($cmd), 'clone'); is(xqx([qw(git config gitweb.owner)], { GIT_DIR => "$tmpdir/dst/a.git" }), "Alice\n", 'a.git gitweb.owner set'); @@ -126,5 +127,40 @@ is(PublicInbox::Git::try_cat($dst_pl), "a.git\nb.git\n", like($err, qr/no longer exist.*\bgone\.git\b/s, 'gone.git noted'); } +my $test_puh = sub { + my (@clone_arg) = @_; + my $x = [qw(-clone --inbox-config=never --manifest= --project-list= + -q -p), $url, "$tmpdir/dst", @clone_arg, + '--post-update-hook=./t/clone-coderepo-puh1.sh', + '--post-update-hook=./t/clone-coderepo-puh2.sh' ]; + my $log = "$tmpdir/puh.log"; + my $env = { CLONE_CODEREPO_TEST_OUT => $log }; + remove_tree("$tmpdir/dst"); + ok(run_script($x, $env), "fresh clone @clone_arg w/ post-update-hook"); + ok(-e $log, "hooks run on fresh clone @clone_arg"); + open my $lh, '<', $log or xbail "open $log: $!"; + chomp(my @l = readline($lh)); + is(scalar(@l), 4, "4 lines written by hooks on @clone_arg"); + for my $r (qw(a b)) { + is_xdeeply(['uno', 'dos'], + [ (map { s/ .+//; $_ } grep(m!/$r\.git\z!, @l)) ], + "$r.git hooks ran in order") or diag explain(\@l); + } + unlink($log) or xbail "unlink: $!"; + ok(run_script($x, $env), "no-op clone @clone_arg w/ post-update-hook"); + ok(!-e $log, "hooks not run on no-op @clone_arg"); + + push @$x, '--exit-code'; + ok(!run_script($x, $env), 'no-op clone w/ --exit-code fails'); + is($? >> 8, 127, '--exit-code gave 127'); +}; +$test_puh->(); +ok(!-e "$tmpdir/dst/objstore", 'no objstore, yet'); + +my $fgrp = 'fgrp'; +$m->{'/a.git'}->{forkgroup} = $m->{'/b.git'}->{forkgroup} = $fgrp; +$set_manifest->($m); +$test_puh->('--objstore='); +ok(-e "$tmpdir/dst/objstore", 'objstore created'); done_testing;