sub reject ($) {
my ($why) = @_;
- debug " rejecting $why";
+ my $w = $ENV{'DGIT_DRS_WORK'}; # we are in stunthook
+ if (defined $w) {
+ open REJ, ">", "$w/drs-reject" or die $!;
+ print REJ $why, "\n" or die $!;
+ close REJ or die $!;
+ }
die "dgit-repos-server: reject: $why\n";
}
-sub runcmd {
+sub debugcmd {
if ($debug) {
use Data::Dumper;
local $Data::Dumper::Indent = 0;
local $Data::Dumper::Terse = 1;
debug "|".Dumper(\@_);
}
+}
+
+sub runcmd {
+ debugcmd @_;
$!=0; $?=0;
my $r = system @_;
die "@_ $? $!" if $r;
mkrepotmp();
$destrepo = "$dgitrepos/_tmp/${package}_prospective";
acquiretree($destrepo, 1);
- my $r = system qw(cp -a --), "$dgitrepos/_template", "$destrepo";
+ my $template = "$dgitrepos/_template";
+ debug "fixmissing copy tempalate $template -> $destrepo";
+ my $r = system qw(cp -a --), $template, $destrepo;
!$r or die "create new repo failed failed: $r $!";
}
sub maybeinstallprospective () {
return if $destrepo eq $realdestrepo;
- debug " show-ref ...";
+ if (open REJ, "<", "$workrepo/drs-reject") {
+ $!=0; my $why = <REJ>;
+ chomp $why or die $!;
+ reject $why;
+ } else {
+ $!==&ENOENT or die $!;
+ }
+
+ debug " show-ref ($destrepo) ...";
my $child = open SR, "-|";
defined $child or die $!;
die;
die if $got{$wh}++;
}
- die if grep { !$_ } values %got;
- $!=0; $?=0; close SR or die "$? $!";
+ $!=0; $?=0; close SR or $?==256 or die "$? $!";
+
+ debug "installprospective ?";
+ die Dumper(\%got)." -- missing refs in new repo"
+ if grep { !$_ } values %got;
+ debug "install $destrepo => $realdestrepo";
rename $destrepo, $realdestrepo or die $!;
remove "$destrepo.lock" or die $!;
}
}
}
$!=0; $_=<T>; defined or die $!;
- m/^($package_re) release (\S+) for (\S+) \[dgit\]$/ or die;
+ m/^($package_re) release (\S+) for (\S+) \[dgit\]$/ or
+ reject "tag message not in expected format";
die unless $1 eq $package;
$version = $2;
}
sub onwardpush () {
+ my @cmd = (qw(git send-pack), $destrepo,
+ "$commit:refs/dgit/$suite",
+ "$tagval:refs/tags/$tagname");
+ debugcmd @cmd;
$!=0;
- my $r = system (qw(git send-pack),
- $destrepo,
- "$commit:refs/dgit/$suite",
- "$tagval:refs/tags/$tagname");
+ my $r = system @cmd;
!$r or die "onward push failed: $r $!";
}
sub stunthook () {
debug "stunthook";
+ print Dumper(\$ENV{GIT_DIR});
chdir $workrepo or die "chdir $workrepo: $!";
mkdir "dgit-tmp" or $!==EEXIST or die $!;
readupdates();
verifytag();
checks();
onwardpush();
+ debug "stunthook done.";
}
#----- git-upload-pack -----