From ae15e3b04fb7b14fa307e0f0667a4a9f9ca2c9a5 Mon Sep 17 00:00:00 2001 From: Stephan Kulow Date: Tue, 16 Apr 2013 14:46:22 +0200 Subject: [PATCH] [api] support lastsuccess on /build/$prj/_results This code may move later to the backend, so we high-jack a backend route to do API code If lastsuccess is given, it expects a package to check if it build against a pathproject with a specific md5sum --- .../app/controllers/application_controller.rb | 2 +- src/api/app/controllers/build_controller.rb | 36 ++++++++++++++++--- src/api/app/models/package.rb | 11 ++++-- src/api/lib/api_exception.rb | 8 ++--- .../test/functional/build_controller_test.rb | 4 +++ .../test/functional/status_controller_test.rb | 5 ++- src/api/test/unit/code_quality_test.rb | 3 +- 7 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/api/app/controllers/application_controller.rb b/src/api/app/controllers/application_controller.rb index 53526cdb64d..9a4ad0d7369 100644 --- a/src/api/app/controllers/application_controller.rb +++ b/src/api/app/controllers/application_controller.rb @@ -424,7 +424,7 @@ def pass_to_backend( path = nil ) rescue_from APIException do |exception| logger.debug "#{exception.class.name} #{exception.message}" message = exception.message - if message.blank? + if message.blank? || message == exception.class.name message = exception.default_message end render_error message: message, status: exception.status, errorcode: exception.errorcode diff --git a/src/api/app/controllers/build_controller.rb b/src/api/app/controllers/build_controller.rb index c1b4f305653..737c7b68373 100644 --- a/src/api/app/controllers/build_controller.rb +++ b/src/api/app/controllers/build_controller.rb @@ -238,21 +238,49 @@ def logfile # for permission check pkg = Package.get_by_project_and_name params[:project], params[:package], use_source: true, follow_project_links: true - if pkg.class == Package and pkg.project.disabled_for?('binarydownload', params[:repository], params[:arch]) and not @http_user.can_download_binaries?(pkg.project) - render_error :status => 403, :errorcode => "download_binary_no_permission", - :message => "No permission to download binaries from package #{params[:package]}, project #{params[:project]}" + if pkg.class == Package and pkg.project.disabled_for?('binarydownload', params[:repository], params[:arch]) and + not @http_user.can_download_binaries?(pkg.project) + render_error status: 403, errorcode: "download_binary_no_permission", + message: "No permission to download binaries from package #{params[:package]}, project #{params[:project]}" return end pass_to_backend end + def result valid_http_methods :get + required_parameters :project # for permission check Project.get_by_name params[:project] + if params.has_key? :lastsuccess + required_parameters :package + + outputxml = "\n" + pkg = Package.get_by_project_and_name params[:project], params[:package], + use_source: false, follow_project_links: false + + # might be nil + tprj = Project.find_by_name params[:pathproject] + result = pkg.buildstatus(target_project: tprj, srcmd5: params[:srcmd5]) + result.each do |repo, status| + outputxml << " \n" + status.each do |arch, archstat| + outputxml << " \n" + end + outputxml << " \n" + + end + outputxml << "\n" + render text: outputxml + return + end + pass_to_backend end -end +end \ No newline at end of file diff --git a/src/api/app/models/package.rb b/src/api/app/models/package.rb index b8e983f083e..f0ecc5b7154 100644 --- a/src/api/app/models/package.rb +++ b/src/api/app/models/package.rb @@ -996,7 +996,7 @@ def valid_name end class NoRepositoriesFound < APIException - setup "No repositories build against target", 404 + setup 404, "No repositories build against target" end class FailedToRetrieveBuildInfo < APIException @@ -1018,7 +1018,12 @@ def buildstatus(opts) csrcmd5 = nil end - tocheck_repos = self.project.repositories_linking_project(tproj, ActiveXML.transport) + if tproj + tocheck_repos = self.project.repositories_linking_project(tproj, ActiveXML.transport) + else + tocheck_repos = self.project.repositories + end + raise NoRepositoriesFound.new if tocheck_repos.empty? output = {} @@ -1135,4 +1140,4 @@ def buildstatus(opts) output end -end \ No newline at end of file +end diff --git a/src/api/lib/api_exception.rb b/src/api/lib/api_exception.rb index aa5f6d43da0..2cef2e739bc 100644 --- a/src/api/lib/api_exception.rb +++ b/src/api/lib/api_exception.rb @@ -3,20 +3,20 @@ class APIException < Exception def self.abstract_class? true end - + class << self @errorcode = nil @status = 400 @default_message = nil - def setup(setvalue, status = nil, message = nil) + def setup(setvalue, _status = nil, message = nil) if setvalue.is_a? String @errorcode = setvalue - @status = status || 400 + @status = _status || 400 @default_message = message else # support having the status first @status = setvalue - @default_message = status + @default_message = _status end end end diff --git a/src/api/test/functional/build_controller_test.rb b/src/api/test/functional/build_controller_test.rb index c45337dc0f0..387bcfa90eb 100644 --- a/src/api/test/functional/build_controller_test.rb +++ b/src/api/test/functional/build_controller_test.rb @@ -270,6 +270,10 @@ def test_result get "/build/home:Iggy/_result" assert_response :success assert_xml_tag :tag => "resultlist", :children => { :count => 2 } + + get "/build/home:Iggy/_result?lastsuccess&pathproject=kde4&package=TestPack" + assert_response 404 + assert_xml_tag(:tag => "status", :attributes => { :code => 'no_repositories_found' }) end def test_read_access_hidden_result_prj diff --git a/src/api/test/functional/status_controller_test.rb b/src/api/test/functional/status_controller_test.rb index 0bacb4895d5..26bdc00e428 100644 --- a/src/api/test/functional/status_controller_test.rb +++ b/src/api/test/functional/status_controller_test.rb @@ -59,9 +59,8 @@ def test_project_status def test_bsrequest get "/status/bsrequest?id=997" - assert_match(%r{Can't find project NotExisitingk}, @response.body) - assert_response :success - + assert_xml_tag(:tag => "status", :attributes => {:code => 'not_found'}) + assert_response 404 end def test_history diff --git a/src/api/test/unit/code_quality_test.rb b/src/api/test/unit/code_quality_test.rb index 27ff93233d2..51034b89df5 100644 --- a/src/api/test/unit/code_quality_test.rb +++ b/src/api/test/unit/code_quality_test.rb @@ -25,6 +25,7 @@ def test_static_ruby_syntax lines = File.open(ruby_file).read begin io.write(lines) + io.write("\n") rescue Errno::EPIPE end end @@ -33,7 +34,7 @@ def test_static_ruby_syntax line = tmpfile.read tmpfile.close return if line.empty? - puts "ruby -cv gave output: testing syntax of each ruby file..." + puts "ruby -cv gave output: testing syntax of each ruby file... #{line}" @ruby_files.each do |ruby_file| IO.popen("ruby -cv #{ruby_file} 2>&1 > /dev/null | grep #{Rails.root}") do |io| line = io.read