From f39959d00a1358ba7d73ebeaccb827738c8151ba Mon Sep 17 00:00:00 2001
From: Tomasz Maczukin <tomasz@maczukin.pl>
Date: Mon, 28 Dec 2015 13:09:51 +0100
Subject: [PATCH] Add some fixes to builds API

---
 lib/api/builds.rb   | 27 +++++++++------------------
 lib/api/entities.rb | 20 ++++++++++++++++++--
 2 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index 0ddb9e98de6..863be0d5e40 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -15,23 +15,15 @@ module API
       #   GET /projects/:id/builds
       get ':id/builds' do
         all_builds = user_project.builds
-        builds = all_builds.order('created_at DESC')
+        builds = all_builds.order('id DESC')
         builds =
           case params[:scope]
-          when 'all'
-            builds
           when 'finished'
             builds.finished
           when 'running'
             builds.running
-          when 'pending'
-            builds.pending
-          when 'success'
-            builds.success
-          when 'failed'
-            builds.failed
           else
-            builds.running_or_pending.reverse_order
+            builds
           end
 
         page = (params[:page] || 1).to_i
@@ -59,15 +51,14 @@ module API
       # Example Request:
       #   GET /projects/:id/build/:build_id/trace
       get ':id/builds/:build_id/trace' do
-        trace = get_build(params[:build_id]).trace
-        trace =
-          unless trace.nil?
-            trace.split("\n")
-          else
-            []
-          end
+        build = get_build(params[:build_id])
+
+        header 'Content-Disposition', "infile; filename=\"#{build.id}.log\""
+        content_type 'text/plain'
+        env['api.format'] = :binary
 
-        present trace
+        trace = build.trace
+        body trace
       end
     end
 
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 0bf50490eac..76b5d14f202 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -367,14 +367,30 @@ module API
       expose :id, :variables
     end
 
+    class CiCommit < Grape::Entity
+      expose :id
+      expose :ref
+      expose :sha
+      expose :committed_at
+    end
+
+    class CiRunner < Grape::Entity
+      expose :id
+      expose :token
+      expose :description
+      expose :active
+      expose :is_shared
+      expose :name
+    end
+
     class Build < Grape::Entity
       expose :id
       expose :status
       expose :stage
       expose :name
       expose :ref
-      expose :commit
-      expose :runner
+      expose :commit, with: CiCommit
+      expose :runner, with: CiRunner
       expose :created_at
       expose :started_at
       expose :finished_at
-- 
GitLab