[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