[Collab-qa-commits] r1125 - in svnbuildstat/trunk/lib/SvnBuildStat: Controller Vcs

goneri at alioth.debian.org goneri at alioth.debian.org
Fri Aug 22 22:18:15 UTC 2008


Author: goneri
Date: 2008-08-22 22:18:14 +0000 (Fri, 22 Aug 2008)
New Revision: 1125

Modified:
   svnbuildstat/trunk/lib/SvnBuildStat/Controller/Logs.pm
   svnbuildstat/trunk/lib/SvnBuildStat/Controller/Packages.pm
   svnbuildstat/trunk/lib/SvnBuildStat/Controller/Repositorys.pm
   svnbuildstat/trunk/lib/SvnBuildStat/Controller/Root.pm
   svnbuildstat/trunk/lib/SvnBuildStat/Vcs/Svn.pm
Log:
save the current changes

Modified: svnbuildstat/trunk/lib/SvnBuildStat/Controller/Logs.pm
===================================================================
--- svnbuildstat/trunk/lib/SvnBuildStat/Controller/Logs.pm	2008-08-21 21:04:06 UTC (rev 1124)
+++ svnbuildstat/trunk/lib/SvnBuildStat/Controller/Logs.pm	2008-08-22 22:18:14 UTC (rev 1125)
@@ -61,7 +61,7 @@
   $c->stash->{'log'} = {
     'package' => $build->package_id->name,
     'arch' => $build->arch_id->name,
-    'buildisok' => $build->buildisok,
+    'isbuildok' => $build->isbuildok,
     'log' => $htmllog 
   };
 
@@ -103,7 +103,7 @@
   $c->stash->{'log'} = {
     'package' => $build->package_id->name,
     'arch' => $build->arch_id->name,
-    'buildisok' => $build->buildisok,
+    'isbuildok' => $build->isbuildok,
     'log' => $htmllog, 
     piuparts_release => $build->piuparts_release
   };

Modified: svnbuildstat/trunk/lib/SvnBuildStat/Controller/Packages.pm
===================================================================
--- svnbuildstat/trunk/lib/SvnBuildStat/Controller/Packages.pm	2008-08-21 21:04:06 UTC (rev 1124)
+++ svnbuildstat/trunk/lib/SvnBuildStat/Controller/Packages.pm	2008-08-22 22:18:14 UTC (rev 1125)
@@ -32,57 +32,220 @@
 #  $$package->name.'_'.$majorrelease.".orig.tar.gz";
 #}
 
+
 sub index : Private {
-  my ( $self, $c ) = @_;
+    my ( $self, $c ) = @_;
 
-  $c->response->redirect($c->uri_for('/'));
+    $c->response->redirect($c->uri_for('/'));
 }
 
-sub list : Local {
-  my ( $self, $c, $param ) = @_;
+sub listByMaintainer : Local {
+    my ( $self, $c, $email ) = @_;
 
-  my $data;
+# Do not remove
+# Avoid SQL injection ...
+    die unless $email =~ /^[-\.\w\@]+$/;
 
+    my $dbh = $c->model('DB')->storage->dbh;
 
-  my $package_rs;
-  my $maintainer;
-  if (!$param) {
-    $c->response->redirect($c->uri_for('/repositorys/list'));
-    return;
-  }
+    my $package_hashref  = $dbh->selectall_hashref("
+SELECT
+  maintainer.email, maintainer.name, sourcepackage.name AS name, sourcepackage.id AS sourcepackage_id, changelogentry.id AS changelogentry_id, changelogentry.dscuri, changelogentry.isnative, changelogentry.isindebian, count(buildall.id) AS buildallcount, count(buildok.isbuildok) AS buildokcount, repositoryentry.issyncedwithupstream, repositoryentry.iswatchfilebroken
+FROM
+  sourcepackage, repositoryentry_maintainer, maintainer, changelogentry, repositoryentry
+ LEFT OUTER JOIN build AS buildall
+ ON
+  repositoryentry.changelogentry_id=buildall.changelogentry_id
+ LEFT OUTER JOIN build AS buildok
+ ON
+  repositoryentry.changelogentry_id=buildok.changelogentry_id AND buildok.isbuildok=true
+WHERE
+  repositoryentry.id=repositoryentry_maintainer.repositoryentry_id
+ AND
+  repositoryentry.changelogentry_id=changelogentry.id
+ AND
+  maintainer.id=repositoryentry_maintainer.maintainer_id
+ AND
+  repositoryentry.sourcepackage_id=sourcepackage.id
+ AND maintainer.email='$email'
+ GROUP BY sourcepackage.name, sourcepackage.id, changelogentry.id, changelogentry.dscuri, changelogentry.isnative, changelogentry.isindebian, repositoryentry.issyncedwithupstream, repositoryentry.iswatchfilebroken, maintainer.email, maintainer.name
+        
+        ", 1);
 
-  ##
-  # people view
-  if ($param =~ /\@/) {
-    $maintainer = $c->model('SvnBuildStat::Model::DB::Maintainer')->search({email => $param})->first;
-    $c->stash->{maintainer} = $maintainer;
+    $c->stash->{maintainer}->{email} = $email;
+    my $name_arrayref = $dbh->selectall_arrayref("SELECT name FROM maintainer WHERE email='$email'");
+    $c->stash->{maintainer}->{name} = $name_arrayref->[0][0];
 
-    my $repositoryentry_maintainer_rs = $c->model('SvnBuildStat::Model::DB::RepositoryentryMaintainer')->search({maintainer_id => $maintainer->id});
+    $c->stash->{packages} = preparePackages($dbh, $package_hashref);
 
-    my @repositoryentry_id;
-    while (my $repositoryentry_maintainer = $repositoryentry_maintainer_rs->next) {
-      push @repositoryentry_id, $repositoryentry_maintainer->repositoryentry_id;
+    $c->stash->{template} = 'packages/listByMaintainer.tt2';
+
+}
+
+sub listByTeam : Local {
+    my ( $self, $c, $team_id ) = @_;
+
+    die unless $team_id =~ /^\d+$/;
+    
+    my $dbh = $c->model('DB')->storage->dbh;
+
+    my $package_hashref  = $dbh->selectall_hashref("
+SELECT
+  sourcepackage.name AS name, sourcepackage.id AS sourcepackage_id, changelogentry.id AS changelogentry_id, changelogentry.dscuri, changelogentry.isnative, changelogentry.isindebian, count(buildall.id) AS buildallcount, count(buildok.isbuildok) AS buildokcount, repositoryentry.issyncedwithupstream, repositoryentry.iswatchfilebroken
+FROM
+  repository, sourcepackage, changelogentry, repositoryentry
+ LEFT OUTER JOIN build AS buildall
+ ON
+  repositoryentry.changelogentry_id=buildall.changelogentry_id
+ LEFT OUTER JOIN build AS buildok
+ ON
+  repositoryentry.changelogentry_id=buildok.changelogentry_id AND buildok.isbuildok=true
+WHERE
+  repositoryentry.repository_id=repository.id
+ AND
+  repository.team_id=4
+ AND
+  repositoryentry.changelogentry_id=changelogentry.id
+ AND
+  repositoryentry.sourcepackage_id=sourcepackage.id
+ GROUP BY sourcepackage.name, sourcepackage.id, changelogentry.id, changelogentry.dscuri, changelogentry.isnative, changelogentry.isindebian, repositoryentry.issyncedwithupstream, repositoryentry.iswatchfilebroken
+        
+        ", 1);
+
+    # TODO find a way to merge the Team view and the par Maintainer view related to the team
+    # TODO maybe by adding a team.email entry
+    my $name_arrayref = $dbh->selectall_arrayref("SELECT name FROM team WHERE id='$team_id'");
+    $c->stash->{maintainer}->{name} = $name_arrayref->[0][0];
+    
+    $c->stash->{packages} = preparePackages($dbh, $package_hashref);
+
+    $c->stash->{template} = 'packages/listByMaintainer.tt2';
+
+
     }
-#    $c->stash->{packages} = [ $c->model('SvnBuildStat::Model::DB::Viewpackage')->search({ package_id => { '-in' => \@repository_id } },{order_by=>"name"}) ];
-    ##
-    #  team view
-  } elsif ($param =~ /^\d+$/) {
-    $c->stash->{maintainer} = $c->model('SvnBuildStat::Model::DB::Repository')->search({id => $param})->first;
-    $c->stash->{packages} = [ $c->model('SvnBuildStat::Model::DB::Viewpackage')->search({ repository_id => $param },{order_by=>"name"}) ];
-  } else { # I don't want to kill my server with too much request
-#    $c->response->redirect($c->uri_for('/repositorys/list'));
-#    return;
-  }
 
 
+sub preparePackages : Private {
+    my ($dbh, $package_hashref) = @_;
 
 
-  $c->stash->{template} = 'packages/main.tt2';
+    my $packages = [];
+    foreach (keys %$package_hashref) {
 
+        # TODO prepare() the SQL request first to speed up the process
+        my $bug_hashref  = $dbh->selectall_hashref("select bug.id, bugstate.name AS state, bug.name AS desc, bugseverity.name AS severity from bug,bugstate, bugseverity where sourcepackage_id = ".$package_hashref->{$_}->{sourcepackage_id}." and bug.bugstate_id=bugstate.id and bug.bugseverity_id=bugseverity.id and bugstate.name <> 'done'", 1);
+       
+        $package_hashref->{$_}->{bugs} = [];
+        foreach my $bug_id (keys %$bug_hashref) {
+            push @{$package_hashref->{$_}->{bugs}}, $bug_hashref->{$bug_id};
+        }
+
+
+        my $lintian_hashref  = $dbh->selectall_hashref("select qaresultentry.id AS qaresultentry_id, qaseverity.letter, qatag.name AS tag, qaresultentry.text from qaseverity, qaresultentry, qatool, qajob, qatag where qajob.changelogentry_id=".$package_hashref->{$_}->{changelogentry_id}." and qaresultentry.qajob_id=qajob.id and qajob.qatool_id=qatool.id and qaresultentry.qatag_id=qatag.id and qatool.name='lintian' and qaresultentry.qaseverity_id=qaseverity.id", 1);
+       
+        $package_hashref->{$_}->{lintians} = [];
+        foreach my $qaresultentry_id (keys %$lintian_hashref) {
+            push @{$package_hashref->{$_}->{lintians}}, $lintian_hashref->{$qaresultentry_id};
+        }
+
+
+        push @$packages, $package_hashref->{$_};
+
+    }
+    # TODO provide the team name to the View.
+
+    return $packages;
+
+
+
+} 
+
+sub info : Local {
+    my ($self, $c, $name) = @_;
+
+    # Retrieve all of the book records as book model objects and store in the
+    # stash where they can be accessed by the TT template
+    my $package = $c->model('SvnBuildStat::Model::DB::Sourcepackage')->search({name => $name})->first;
+    if (!$package) {
+        $c->response->redirect($c->uri_for('/'));
+        return;
+    }
+
+    my @currentchangelogentry = split $/, $package->currentchangelogentry;
+    my @todo = split $/, $package->todo;
+    $c->stash->{package} = $package->name;
+    $c->stash->{bugpic} = $package->name;
+    $c->stash->{bugpic} =~ s!^(.)(.+)$!http://people.debian.org/~glandium/bts/$1/$1$2.png! ;
+    $c->stash->{istarballpresent} = $package->istarballpresent;
+    $c->stash->{isindebian} = $package->isindebian;
+    $c->stash->{tarballuri} = $package->tarballuri;
+    $c->stash->{svndebrelease} = $package->svndebrelease;
+    $c->stash->{iswatchfilebroken} = $package->iswatchfilebroken;
+    $c->stash->{uri} = $package->uri;
+    $c->stash->{weburi} = $package->uri;
+    $c->stash->{weburi} =~ s!svn://svn.debian.org/svn!http://svn.debian.org/wsvn!;
+    $c->stash->{isuptodate} = $package->isuptodate;
+    $c->stash->{upstreamrelease} = $package->upstreamrelease;
+    $c->stash->{currentchangelogentry} = \@currentchangelogentry;
+    $c->stash->{todo} = \@todo;
+    ############ Maintainers list
+    my $packagemaintainer_rs = $c->model('SvnBuildStat::Model::DB::PackageMaintainer')->search({package_id => $package->id});
+    $c->stash->{maintainers} = [ $packagemaintainer_rs->search_related("maintainer_id")->all ];
+
+    #############
+    my $bug_rs = $c->model('SvnBuildStat::Model::DB::Bug')->search(package_id => $package->id);
+    while (my $bug = $bug_rs->next) {
+        my $bugerror;
+        my $bugwarning;
+        $bugerror = 1 if ($bug->severity_id->name =~ /important|serious|grave|critical/);
+        $bugwarning = 1 if ($bug->severity_id->name =~ /normal/);
+        push @{$c->stash->{bugs}}, {
+        id => $bug->id,
+        name => $bug->name,
+        severity => $bug->severity_id->name,
+        error => $bugerror,
+        warning => $bugwarning }
 }
 
+##########
+my $build = $c->model('SvnBuildStat::Model::DB::Build')->search({package_id => $package->id},{order_by => "id DESC"})->first;
+if ($build) {
+    foreach (split $/, $build->lintian_log) {
+        my $error;
+        $error = 1 if /^E/;    
+        push @{$c->stash->{lintians}}, { text => $_, error => $error };
+}
 
+foreach (split $/, $build->linda_log) {
+    my $error;
+    $error = 1 if /^E/;    
+    push @{$c->stash->{lindas}}, { text => $_, error => $error } ;
+}
 
+$c->stash->{piupartsisok}  = $build->piupartsisok;
+}
+##############
+
+my $build_rs = $c->model('SvnBuildStat::Model::DB::Build')->search({package_id => $package->id},{order_by => "id DESC"});
+my $cpt;
+while (($cpt++ < 10) && (my $build = $build_rs->next)) {
+    my $failedstep;
+    if (!$build->buildisok) {
+        $failedstep = "build";
+    }
+
+    push @{$c->stash->{builds}}, {
+    id => $build->id,
+    buildisok => $build->buildisok,
+    rev => $build->rev,
+    duration => $build->duration,
+    arch => $build->arch_id->name,
+    failedstep =>  $failedstep,
+    time => $build->time, 
+}
+}
+}
+
 =head1 AUTHOR
 
 Goneri Le Bouder,,,

Modified: svnbuildstat/trunk/lib/SvnBuildStat/Controller/Repositorys.pm
===================================================================
--- svnbuildstat/trunk/lib/SvnBuildStat/Controller/Repositorys.pm	2008-08-21 21:04:06 UTC (rev 1124)
+++ svnbuildstat/trunk/lib/SvnBuildStat/Controller/Repositorys.pm	2008-08-22 22:18:14 UTC (rev 1125)
@@ -34,7 +34,13 @@
   my $repository_rs;
   my $maintainer;
 
-  $c->stash->{repositorys} = [ $c->model('SvnBuildStat::Model::DB::Repository')->search(undef,{order_by=>"name"}) ];
+  my $dbh = $c->model('DB')->storage->dbh;
+
+  my $hashref  = $dbh->selectall_hashref("SELECT repository.id AS id, repository.uri FROM repository ORDER BY uri", 1);
+  $c->stash->{repositorys} = [];
+  foreach (keys %$hashref) {
+    push @{$c->stash->{repositorys}}, $hashref->{$_};
+  }
   
   $c->stash->{template} = 'repositorys/main.tt2';
 

Modified: svnbuildstat/trunk/lib/SvnBuildStat/Controller/Root.pm
===================================================================
--- svnbuildstat/trunk/lib/SvnBuildStat/Controller/Root.pm	2008-08-21 21:04:06 UTC (rev 1124)
+++ svnbuildstat/trunk/lib/SvnBuildStat/Controller/Root.pm	2008-08-22 22:18:14 UTC (rev 1125)
@@ -35,7 +35,7 @@
     $email = '';
   }
 
-  $c->response->redirect($c->uri_for('/packages/list'));
+  $c->response->redirect($c->uri_for('/teams/list'));
 }
 
 =head2 end

Modified: svnbuildstat/trunk/lib/SvnBuildStat/Vcs/Svn.pm
===================================================================
--- svnbuildstat/trunk/lib/SvnBuildStat/Vcs/Svn.pm	2008-08-21 21:04:06 UTC (rev 1124)
+++ svnbuildstat/trunk/lib/SvnBuildStat/Vcs/Svn.pm	2008-08-22 22:18:14 UTC (rev 1125)
@@ -31,7 +31,7 @@
 
   # I need the --ignore-externals because some external repository
   # needs ssh auth and make it asking for a password...
-  my $cmd = "cd ".$self->{localdir}."; svn co -q --ignore-externals ".$self->{uri}." .";
+  my $cmd = "cd ".$self->{localdir}."; svn co -q ".$self->{uri}." .";
   `$cmd`;
 
   return $self->currentRev();




More information about the Collab-qa-commits mailing list