Skip to content

Commit

Permalink
[webui] query the database directly for packages
Browse files Browse the repository at this point in the history
  • Loading branch information
coolo committed Oct 22, 2013
1 parent 54ff155 commit fdc4ff9
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 39 deletions.
16 changes: 1 addition & 15 deletions src/api/app/controllers/test_controller.rb
@@ -1,10 +1,5 @@
require 'obsapi/test_sphinx'

if Rails.env.test? || Rails.env.development?
require 'database_cleaner'
DatabaseCleaner.strategy = :transaction
end

class TestController < ApplicationController
skip_before_action :extract_user
before_action do
Expand All @@ -29,7 +24,6 @@ def startme
return
end
@@started = true
@@test_running = false
WebMock.disable_net_connect!(allow_localhost: true)
CONFIG['global_write_through'] = true
backend.direct_http(URI("/"))
Expand All @@ -43,16 +37,8 @@ def prepare_search
end

def test_start
if @@test_running == true
test_end
end
@@test_running = true
Rails.cache.clear
render_ok
end


def test_end
@@test_running = false
Rails.cache.clear
end
end
2 changes: 1 addition & 1 deletion src/api/app/models/project.rb
Expand Up @@ -234,7 +234,7 @@ def find_remote_project(name, skip_access=false)
local_project = String.new
remote_project = nil

while fragments.length > 1
while !fragments.nil? && fragments.length > 1
remote_project = [fragments.pop, remote_project].compact.join ':'
local_project = fragments.join ':'
logger.debug "checking local project #{local_project}, remote_project #{remote_project}"
Expand Down
1 change: 0 additions & 1 deletion src/api/test/functional/webui/users_test.rb
Expand Up @@ -75,7 +75,6 @@ def delete_user user
@userspath = webui_engine.package_users_path(project: @project, package: @package)
visit @userspath


add_user "user2", "maintainer"
add_user "user3", "bugowner"
add_user "user4", "reviewer"
Expand Down
2 changes: 1 addition & 1 deletion src/api/test/test_helper.rb
Expand Up @@ -199,7 +199,7 @@ def current_user
olddriver = Capybara.current_driver
Capybara.current_driver = :rack_test
self.class.start_test_api
#ActiveXML::api.http_do :post, "/test/test_start"
ActiveXML::api.http_do :post, "/test/test_start"
Capybara.current_driver = olddriver
@starttime = Time.now
WebMock.disable_net_connect!(allow_localhost: true)
Expand Down
8 changes: 4 additions & 4 deletions src/api/webui/app/controllers/webui/package_controller.rb
Expand Up @@ -91,7 +91,7 @@ def dependency
@drepository = params[:drepository]
@dproject = params[:dproject]
@filename = params[:filename]
@fileinfo = find_cached(Fileinfo, :project => params[:dproject], :package => '_repository', :repository => params[:drepository], :arch => @arch,
@fileinfo = Fileinfo.find(:project => params[:dproject], :package => '_repository', :repository => params[:drepository], :arch => @arch,
:filename => params[:dname], :view => 'fileinfo_ext')
@durl = nil
unless @fileinfo # avoid displaying an error for non-existing packages
Expand Down Expand Up @@ -124,7 +124,7 @@ def binary
@repository = params[:repository]
@filename = params[:filename]
begin
@fileinfo = find_cached(Fileinfo, :project => @project, :package => @package, :repository => @repository, :arch => @arch,
@fileinfo = Fileinfo.find(:project => @project, :package => @package, :repository => @repository, :arch => @arch,
:filename => @filename, :view => 'fileinfo_ext')
rescue ActiveXML::Transport::ForbiddenError => e
flash[:error] = "File #{@filename} can not be downloaded from #{@project}: #{e.summary}"
Expand Down Expand Up @@ -287,7 +287,7 @@ def set_file_details
@spec_count += 1 if file[:ext] == "spec"
if file[:name] == "_link"
begin
@link = find_cached(Link, :project => @project, :package => @package, :rev => @revision )
@link = Link.find(:project => @project, :package => @package, :rev => @revision )
rescue RuntimeError
# possibly thrown on bad link files
end
Expand Down Expand Up @@ -584,7 +584,7 @@ def save_file
end
elsif not file_url.blank?
# we have a remote file uri
@services = find_cached(Service, :project => @project, :package => @package )
@services = Service.find(:project => @project, :package => @package )
unless @services
@services = Service.new( :project => @project, :package => @package )
end
Expand Down
6 changes: 1 addition & 5 deletions src/api/webui/app/controllers/webui/patchinfo_controller.rb
Expand Up @@ -49,11 +49,7 @@ def edit_patchinfo

def show
read_patchinfo
@pkg_names = Array.new
packages = Webui::Package.find(:all, :project => @project.name, :expires_in => 30.seconds )
packages.each do |pkg|
@pkg_names << pkg.value(:name)
end
@pkg_names = @project.api_project.packages.pluck(:name)
@pkg_names.delete('patchinfo')
@packager = Webui::Person.find(:login => @packager)
end
Expand Down
18 changes: 9 additions & 9 deletions src/api/webui/app/controllers/webui/project_controller.rb
Expand Up @@ -138,15 +138,15 @@ def subprojects
@subprojects = Hash.new
sub_names = Collection.find :id, :what => 'project', :predicate => "starts-with(@name,'#{@project}:')"
sub_names.each do |sub|
@subprojects[sub.name] = find_cached( WebuiProject, sub.name )
@subprojects[sub.name] = WebuiProject.find( sub.name )
end
@subprojects = @subprojects.sort # Sort by hash key for better display
@parentprojects = Hash.new
parent_names = @project.name.split ':'
parent_names.each_with_index do |parent, idx|
parent_name = parent_names.slice(0, idx+1).join(':')
unless [@project.name, 'home'].include?( parent_name )
parent_project = find_cached(WebuiProject, parent_name )
parent_project = WebuiProject.find( parent_name )
@parentprojects[parent_name] = parent_project unless parent_project.blank?
end
end
Expand All @@ -166,7 +166,7 @@ def new
@project_name = params[:project]
if @namespace
begin
@project = find_cached(WebuiProject, @namespace)
@project = WebuiProject.find(@namespace)
if @namespace == "home:#{session[:login]}" and not @project
@pagetitle = "Your home project doesn't exist yet. You can create it now"
@project_name = @namespace
Expand Down Expand Up @@ -326,7 +326,7 @@ def show
@has_patchinfo = false
@packages.each do |pkg_element|
if pkg_element == 'patchinfo'
Webui::Package.find_cached(pkg_element, :project => @project).files.each do |pkg_file|
Webui::Package.find(pkg_element, :project => @project).files.each do |pkg_file|
@has_patchinfo = true if pkg_file[:name] == '_patchinfo'
end
end
Expand Down Expand Up @@ -357,7 +357,7 @@ def linking_projects

# TODO we need the architectures in api/distributions
def add_repository_from_default_list
@distributions = find_cached(Distribution, :all)
@distributions = Distribution.find(:all)
if @distributions.all_vendors.length < 1
if @user and @user.is_admin?
flash.now[:notice] = "There are no distributions configured! Check out <a href=\"/configuration/connect_instance\">Configuration > Interconnect</a>"
Expand Down Expand Up @@ -385,7 +385,7 @@ def load_buildresult(cache = true)
Buildresult.free_cache( :project => params[:project], :view => 'summary' )
end
unless @spider_bot
@buildresult = find_cached(Buildresult, :project => params[:project], :view => 'summary', :expires_in => 3.minutes )
@buildresult = Buildresult.find(:project => params[:project], :view => 'summary')
end

@repohash = Hash.new
Expand Down Expand Up @@ -530,7 +530,7 @@ def repository_state
repository.each_arch do |arch|
cycles = Array.new
# skip all packages via package=- to speed up the api call, we only parse the cycles anyway
deps = find_cached(BuilddepInfo, :project => @project.name, :package => '-', :repository => repository.name, :arch => arch)
deps = BuilddepInfo.find(:project => @project.name, :package => '-', :repository => repository.name, :arch => arch)
nr_cycles = 0
if deps and deps.has_element? :cycle
packages = Hash.new
Expand Down Expand Up @@ -581,8 +581,8 @@ def rebuild_time
redirect_to :action => :show, :project => @project
return
end
bdep = find_cached(BuilddepInfo, :project => @project.name, :repository => @repository, :arch => @arch)
jobs = find_cached(Jobhislist , :project => @project.name, :repository => @repository, :arch => @arch,
bdep = BuilddepInfo.find(:project => @project.name, :repository => @repository, :arch => @arch)
jobs = Jobhislist.find(:project => @project.name, :repository => @repository, :arch => @arch,
:limit => @packages.size * 3, :code => ['succeeded', 'unchanged'])
unless bdep and jobs
flash[:error] = "Could not collect infos about repository #{@repository}/#{@arch}"
Expand Down
22 changes: 19 additions & 3 deletions src/api/webui/app/models/webui/package.rb
Expand Up @@ -39,7 +39,7 @@ def save_file(opt = {})

put_opt = Hash.new
put_opt[:package] = self.name
put_opt[:project] = @init_options[:project]
put_opt[:project] = self.project
put_opt[:filename] = opt[:filename]
put_opt[:comment] = opt[:comment]
put_opt[:keeplink] = opt[:expand] if opt[:expand]
Expand Down Expand Up @@ -301,7 +301,7 @@ def developed_packages
end

def self.exists?(project, package)
if Package.find_cached(package, :project => project)
if ::Package.find_by_project_and_name project.to_param, package.to_param
return true
else
return false
Expand Down Expand Up @@ -339,8 +339,24 @@ def linkdiff
end
end

def self.find(name, opts)
raise "UU" if name == :all
project = opts[:project].to_param
name = name.to_param
begin
ap = ::Package.get_by_project_and_name(project, name, use_source: false)
rescue ::Package::UnknownObjectError, Project::UnknownObjectError
return nil
end
p = Webui::Package.new(ap.render_xml(opts[:view]))
p.api_package = ap
p.instance_variable_set('@init_options', project: project, name: name)
p
end

attr_writer :api_package
def api_package
::Package.find_by_project_and_name(project, name)
@api_package ||= ::Package.find_by_project_and_name(project, name)
end

end
Expand Down

0 comments on commit fdc4ff9

Please sign in to comment.