X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=bin%2Fwanna-build;h=1d87779ebea538a579f5c962c8369d4c63ff6501;hb=09f13aba8cee37e89ff5df9ca10e72c9073d91d4;hp=f6634a22583afa189ba9c8a8d100a1df6e6c8619;hpb=020d69a01d2f6bad3c813bf73550389409846c4f;p=wannabuild.git diff --git a/bin/wanna-build b/bin/wanna-build index f6634a2..1d87779 100755 --- a/bin/wanna-build +++ b/bin/wanna-build @@ -55,7 +55,7 @@ our ($verbose, $mail_logs, $list_order, $list_state, $category, %catval, %short_category, $short_date, $list_min_age, $dbbase, @curr_time, $build_priority, %new_vers, $binNMUver, %merge_srcvers, %merge_binsrc, - $printformat + $printformat, $ownprintformat ); # global vars @@ -190,6 +190,7 @@ my %options = $list_min_age *= -1; } }, "format" => { arg => \$printformat }, + "own-format" => { arg => \$ownprintformat }, # special actions export => { arg => \$export_to, mode => "export" }, import => { arg => \$import_from, mode => "import" }, @@ -304,13 +305,15 @@ if (!$fail_reason) { my $yamlmap = (); my $yamldir = "/org/wanna-build/etc/yaml"; my @files = ('wanna-build.yaml'); +if ((getpwuid($>))[7]) { push (@files, ((getpwuid($>))[7])."/.wanna-build.yaml"); } if ($user =~ /(buildd.*)-/) { push (@files, "$1.yaml") }; -push ( @files, "$user.yaml"); +if ($user) { push ( @files, "$user.yaml"); } foreach my $file (@files) { - if ($verbose >= 2) { print "Trying to read $file ...\n"; } - next unless -f $yamldir."/".$file; - if ($verbose >= 2) { print "Read $file ...\n"; } - my $m = YAML::Tiny->read( $yamldir."/".$file )->[0]; + my $cfile = File::Spec->rel2abs( $file, $yamldir ); + if ($verbose >= 2) { print "Trying to read $file ($cfile) ...\n"; } + next unless -f $cfile; + if ($verbose >= 2) { print "Read $file ($cfile) ...\n"; } + my $m = YAML::Tiny->read( $cfile )->[0]; $yamlmap = merge($m, $yamlmap); } if (not $yamlmap) { @@ -1850,19 +1853,21 @@ Within an format string, the following values are allowed (need to be preceded b This can be combined to e.g. wanna-build --format='wanna-build -A %a --give-back %p_%v' -A mipsel --list=failed -p Package name a Architecture -s Time in this state in full seconds since epoch -v Package version -S Package state -u Builder (e.g. buildd_mipsel-rem) -X the string normally between [], e.g. optional:out-of-date:calprio{61}:days{25} c section (e.g. libs or utils) -P previous state -E in case of Dep-Wait the packages being waited on, in case of Needs-Build the number in the queue D in case of BD-Uninstallable the reason for the uninstallability d distribution +E in case of Dep-Wait the packages being waited on, in case of Needs-Build the number in the queue +F in case of Failed the fail reason +P previous state +p Package name +S Package state +s Time in this state in full seconds since epoch t time of state change +u Builder (e.g. buildd_mipsel-rem) +v Package version +V full Package version (i.e. with +b.., = %v%{+b}B%B +X the string normally between [], e.g. optional:out-of-date:calprio{61}:days{25} %{Text}? print Text in case ? is not empty; ? is never printed %{!Text}? print Text in case ? is empty; ? is never printed @@ -1874,6 +1879,7 @@ Text could contain further %. To start with !, use %! 'a' => make_fmt( $arch, $pkg, $var), 's' => make_fmt( sub { return floor(str2time($pkg->{'state_change'})); }, $pkg, $var), 'v' => make_fmt( $pkg->{'version'}, $pkg, $var), + 'V' => make_fmt( sub { $pkg->{'binary_nmu_version'} ? $pkg->{'version'}."+b".$pkg->{'binary_nmu_version'} : $pkg->{'version'} }, $pkg, $var), 'S' => make_fmt( $pkg->{'state'}, $pkg, $var), 'u' => make_fmt( $pkg->{'builder'}, $pkg, $var), 'X' => make_fmt( sub { @@ -1890,6 +1896,11 @@ Text could contain further %. To start with !, use %! 'E' => make_fmt( sub { return $pkg->{'depends'} if $pkg->{'state'} eq "Dep-Wait"; return $var->{scnt}{'Needs-Build'} + 1 if $pkg->{'state'} eq 'Needs-Build'; return ""; }, $pkg, $var), + 'F' => make_fmt( sub { return "" unless $pkg->{'failed'}; + my $failed = $pkg->{'failed'}; + $failed =~ s/\\/\\\\/g; + return $pkg->{'package'}."#".$arch."-failure\n ". + join("\\0a",split("\n",$failed))."\\0a\n"; }, $pkg, $var), 'D' => make_fmt( sub { return "" unless $pkg->{'bd_problem'}; return $pkg->{'package'}."#".$arch."-bd-problem\n". join("\\0a",split("\n",$pkg->{'bd_problem'}))."\\0a\n"; }, $pkg, $var), @@ -1915,6 +1926,12 @@ sub list_packages { # filter components @list = grep { my $i = $_->{'component'}; grep { $i eq $_ } split /[, ]+/, $yamlmap->{"restrict"}{'component'} } @list; + # first adjust ownprintformat, then set printformat accordingly + $printformat ||= $yamlmap->{"format"}{$ownprintformat}; + $printformat ||= $yamlmap->{"format"}{"default"}{$state}; + $printformat ||= $yamlmap->{"format"}{"default"}{"default"}; + undef $printformat if ($ownprintformat eq 'none'); + foreach $pkg (sort sort_list_func @list) { if ($printformat) { print print_format($printformat, $pkg, {'cnt' => $cnt, 'scnt' => \%scnt})."\n"; @@ -1922,21 +1939,12 @@ sub list_packages { $scnt{$pkg->{'state'}}++; next; } - print "$pkg->{'section'}/$pkg->{'package'}_$pkg->{'version'}"; - print ": $pkg->{'state'}" + print print_format("%c/%p_%v", $pkg, {}); + print print_format(": %S", $pkg, {}) if $state eq "all"; - print " by $pkg->{'builder'}" - if $pkg->{'state'} ne "Needs-Build" && $pkg->{'builder'}; - print " [$pkg->{'priority'}:$pkg->{'notes'}"; - print ":PREV-FAILED" - if $pkg->{'previous_state'} =~ /^Failed/; - print ":bp{" . $pkg->{'buildpri'} . "}" - if defined $pkg->{'buildpri'}; - print ":binNMU{" . $pkg->{'binary_nmu_version'} . "}" - if defined $pkg->{'binary_nmu_version'}; - print ":calprio{". $pkg->{'calprio'}."}"; - print ":days{". $pkg->{'state_days'}."}"; - print "]\n"; + print print_format("%{ by }u%u", $pkg, {}) + if $pkg->{'state'} ne "Needs-Build"; + print print_format(" [%X]\n", $pkg, {}); print " Reasons for failing:\n", " [Category: ", defined $pkg->{'failed_category'} ? $pkg->{'failed_category'} : "none", @@ -2463,7 +2471,7 @@ sub transactions_table_name { sub get_readonly_source_info { my $name = shift; # SELECT FLOOR(EXTRACT('epoch' FROM age(localtimestamp, '2010-01-22 23:45')) / 86400) -- change to that? - my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change::timestamp)) as state_days FROM ' . + my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change)) as state_days FROM ' . table_name() . ' WHERE package = ? AND distribution = ?', undef, $name, $distribution); return $pkg; @@ -2471,7 +2479,7 @@ sub get_readonly_source_info { sub get_source_info { my $name = shift; - my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change::timestamp)) as state_days FROM ' . + my $pkg = $dbh->selectrow_hashref('SELECT *, extract(days from date_trunc(\'days\', now() - state_change)) as state_days FROM ' . table_name() . ' WHERE package = ? AND distribution = ?' . ' FOR UPDATE', undef, $name, $distribution); @@ -2482,8 +2490,8 @@ sub get_all_source_info { my %options = @_; my $q = 'SELECT *, '. - 'extract(days from date_trunc(\'days\', now() - state_change::timestamp)) as state_days, '. - 'date_trunc(\'seconds\', now() - state_change::timestamp) as state_time'. + 'extract(days from date_trunc(\'days\', now() - state_change)) as state_days, '. + 'date_trunc(\'seconds\', now() - state_change) as state_time'. ' FROM ' . table_name() . ' WHERE distribution = ? '; my @args = ($distribution); @@ -2506,12 +2514,12 @@ sub get_all_source_info { } if ($options{list_min_age} > 0) { - $q .= ' AND age(state_change::timestamp) > ? '; + $q .= ' AND age(state_change) > ? '; push @args, $options{list_min_age} . " days"; } if ($options{list_min_age} < 0) { - $q .= ' AND age(state_change::timestamp) < ? '; + $q .= ' AND age(state_change) < ? '; push @args, -$options{list_min_age} . " days"; }