Author: rob
Date: Thu Aug 25 14:50:31 2011
New Revision: 28814
URL: https://svn.nixos.org/websvn/nix/?rev=28814&sc=1

Log:
hydra: when no external url is given for diff's of git/hg input, revert to a 
diff done on a local available clone

Modified:
   hydra/trunk/src/lib/Hydra/Controller/API.pm
   hydra/trunk/src/lib/Hydra/Controller/Root.pm
   hydra/trunk/src/lib/Hydra/Helper/AddBuilds.pm
   hydra/trunk/src/root/common.tt

Modified: hydra/trunk/src/lib/Hydra/Controller/API.pm
==============================================================================
--- hydra/trunk/src/lib/Hydra/Controller/API.pm Thu Aug 25 11:12:32 2011        
(r28813)
+++ hydra/trunk/src/lib/Hydra/Controller/API.pm Thu Aug 25 14:50:31 2011        
(r28814)
@@ -4,10 +4,12 @@
 use warnings;
 use base 'Catalyst::Controller';
 use Hydra::Helper::Nix;
+use Hydra::Helper::AddBuilds;
 use Hydra::Helper::CatalystUtils;
 use Hydra::Controller::Project;
 use JSON::Any;
 use DateTime;
+use Digest::SHA qw(sha256_hex);
 
 sub api : Chained('/') PathPart('api') CaptureArgs(0) {
     my ($self, $c) = @_;
@@ -206,4 +208,30 @@
     $c->forward('Hydra::View::Plain');
 }
 
+sub scmdiff : Chained('api') PathPart('scmdiff') Args(0) {
+    my ($self, $c) = @_;
+
+    my $uri = $c->request->params->{uri} ;
+    my $type = $c->request->params->{type} ;
+    my $branch = $c->request->params->{branch} ;
+    my $rev1 = $c->request->params->{rev1} ;
+    my $rev2 = $c->request->params->{rev2} ;
+
+    my $diff = "";
+    if($type eq "hg") {
+        my $clonePath = scmPath . "/" . sha256_hex($uri);
+        die if ! -d $clonePath;
+       $diff .= `(cd $clonePath ; hg log -r $rev1:$rev2)`;
+       $diff .= `(cd $clonePath ; hg diff -r $rev1:$rev2)`;
+    } elsif ($type eq "git") {
+        my $clonePath = scmPath . "/" . sha256_hex($uri.$branch);
+        die if ! -d $clonePath;
+       $diff .= `(cd $clonePath ; git log $rev1..$rev2)`;
+       $diff .= `(cd $clonePath ; git diff $rev1..$rev2)`;
+    }
+
+    $c->stash->{'plain'} = { data => (scalar $diff) || " " };
+    $c->forward('Hydra::View::Plain');
+}
+
 1;

Modified: hydra/trunk/src/lib/Hydra/Controller/Root.pm
==============================================================================
--- hydra/trunk/src/lib/Hydra/Controller/Root.pm        Thu Aug 25 11:12:32 
2011        (r28813)
+++ hydra/trunk/src/lib/Hydra/Controller/Root.pm        Thu Aug 25 14:50:31 
2011        (r28814)
@@ -150,6 +150,7 @@
         , uri_for('Root', 'nar', [], "*")
         , uri_for('Root', 'status', [])
         , uri_for('Root', 'all', [])
+        , uri_for('API', 'scmdiff', [])
         , uri_for('Project', 'all', ["*"])
         , channelUris('Root', ["*"])
         , channelUris('Project', ["*", "*"])

Modified: hydra/trunk/src/lib/Hydra/Helper/AddBuilds.pm
==============================================================================
--- hydra/trunk/src/lib/Hydra/Helper/AddBuilds.pm       Thu Aug 25 11:12:32 
2011        (r28813)
+++ hydra/trunk/src/lib/Hydra/Helper/AddBuilds.pm       Thu Aug 25 14:50:31 
2011        (r28814)
@@ -12,7 +12,7 @@
 use File::Path;
 
 our @ISA = qw(Exporter);
-our @EXPORT = qw(fetchInput evalJobs checkBuild inputsToArgs 
captureStdoutStderr getReleaseName getBuildLog addBuildProducts restartBuild);
+our @EXPORT = qw(fetchInput evalJobs checkBuild inputsToArgs 
captureStdoutStderr getReleaseName getBuildLog addBuildProducts restartBuild 
scmPath);
 
 sub scmPath {
     return getHydraPath . "/scm" ;

Modified: hydra/trunk/src/root/common.tt
==============================================================================
--- hydra/trunk/src/root/common.tt      Thu Aug 25 11:12:32 2011        (r28813)
+++ hydra/trunk/src/root/common.tt      Thu Aug 25 14:50:31 2011        (r28814)
@@ -308,7 +308,14 @@
         [% END %]
     [% END %]
     [% IF nouri %]
-      [% contents %]
+      [% res = bi1.uri.split(' ') %]
+      [% url = res.0 %]
+      [% branch = res.1 %]
+      [% IF bi1.type == "hg" || bi1.type == "git" %]
+          <a target="_new" href="/api/scmdiff?uri=[% url %]&rev1=[% 
bi1.revision %]&rev2=[% bi2.revision %]&type=[% bi1.type %]&branch=[% branch 
%]">[% contents %]</a>
+      [% ELSE %]
+        [% contents %]
+      [% END %]
     [% END %]
 [% END %]
 
_______________________________________________
nix-commits mailing list
[email protected]
http://mail.cs.uu.nl/mailman/listinfo/nix-commits

Reply via email to