]> git.donarmstrong.com Git - wannabuild.git/blobdiff - bin/wanna-build
use ~/.wanna-build.yaml if it exists
[wannabuild.git] / bin / wanna-build
index f6634a22583afa189ba9c8a8d100a1df6e6c8619..1d87779ebea538a579f5c962c8369d4c63ff6501 100755 (executable)
@@ -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";
        }