Skip to content

Commit

Permalink
[webui] move common code into mixins
Browse files Browse the repository at this point in the history
  • Loading branch information
coolo committed Nov 3, 2013
1 parent 89a5a70 commit 5e917f9
Show file tree
Hide file tree
Showing 9 changed files with 324 additions and 448 deletions.
43 changes: 5 additions & 38 deletions src/api/app/models/buildresult.rb
@@ -1,16 +1,16 @@
class Buildresult < ActiveXML::Node

Avail_status_values =
['succeeded', 'failed', 'unresolvable', 'broken',
'blocked', 'dispatching', 'scheduled', 'building', 'finished', 'signing',
'disabled', 'excluded', 'locked', 'deleting', 'unknown']
['succeeded', 'failed', 'unresolvable', 'broken',
'blocked', 'dispatching', 'scheduled', 'building', 'finished', 'signing',
'disabled', 'excluded', 'locked', 'deleting', 'unknown']
@@status_hash = nil

def self.avail_status_values
return Avail_status_values
end

def code2index(code)
def self.code2index(code)
unless @@status_hash
index = 0
@@status_hash = Hash.new
Expand All @@ -23,41 +23,8 @@ def code2index(code)
return @@status_hash[code]
end

def index2code(index)
def self.index2code(index)
return Avail_status_values[index]
end

def to_a
myarray = Array.new
to_hash.elements("result") do |result|
result["summary"].elements("statuscount") do |sc|
myarray << [result["repository"], result["arch"], code2index(sc["code"]), sc["count"]]
end
end
myarray.sort!
repos = Array.new
orepo = nil
oarch = nil
archs = nil
counts = nil
myarray.each do |repo, arch, code, count|
if orepo != repo
archs << [oarch, counts] if oarch
oarch = nil
repos << [orepo, archs] if orepo
archs = Array.new
end
orepo = repo
if oarch != arch
archs << [oarch, counts] if oarch
counts = Array.new
end
oarch = arch
counts << [index2code(code), count]
end
archs << [oarch, counts] if oarch
repos << [orepo, archs] if orepo
repos ||= Array.new
end

end
11 changes: 6 additions & 5 deletions src/api/test/unit/code_quality_test.rb
Expand Up @@ -150,8 +150,8 @@ def setup
'WizardController#package_wizard' => 135.16,
'Webui::PatchinfoController#save' => 248.01,
'Webui::BsRequest::make_stub' => 233.83,
'Webui::ProjectController#status_check_package' => 187.14,
'Webui::ProjectController#monitor' => 154.83,
'Webui::ProjectController#status_check_package' => 90.29,
'Webui::ProjectController#monitor' => 55.26,
'Webui::PackageController#save_new_link' => 132.05,
'Webui::WebuiHelper#flag_status' => 93.0,
'Webui::ProjectController#save_targets' => 127.29,
Expand All @@ -166,18 +166,19 @@ def setup
'Webui::ProjectController#repository_state' => 92.78,
'Webui::BsRequest::prepare_list_path' => 88.77,
'Webui::WebuiController#mobile_request?' => 84.33,
'Webui::PackageController#fill_status_cache' => 81.3,
'Webui::PackageController#require_package' => 80.11,
'Webui::WebuiController#validate_xhtml' => 78.83,
'Webui::RequestController#show' => 72.45,
'Webui::PackageController#save_new' => 77.0,
'Webui::PatchinfoController#new_tracker' => 68.43,
'Webui::ProjectController#status' => 67.37,
'Webui::ProjectController#check_devel_package_status' => 81.95,
'Webui::ProjectController#monitor_set_filter' => 59.38,
'Webui::MonitorController#events' => 59.75,
'Webui::ProjectHelper#show_status_comment' => 64.97,
'Webui::RequestController#set_bugowner_request' => 64.93,
'Webui::UserController#do_login' => 62.12,
'Webui::PackageController#show' => 61.72,
'Webui::PackageController#show' => 54.39,
'Webui::HomeController#requests' => 59.67,
'Webui::PatchinfoController#get_issue_sum' => 56.69,
'Webui::AttributeController#edit' => 55.09,
Expand All @@ -191,7 +192,7 @@ def setup
test "code complexity" do
require "flog_cli"
flog = Flog.new :continue => true
dirs = %w(app/controllers app/views app/models app/mixins app/indices app/helpers app/jobs webui/app/controllers webui/app/models webui/app/helpers)
dirs = %w(app/controllers app/views app/models app/mixins app/indices app/helpers app/jobs webui/app/controllers webui/app/models webui/app/helpers webui/app/mixins)
files = FlogCLI.expand_dirs_to_files(*dirs)
flog.flog(*files)

Expand Down
166 changes: 19 additions & 147 deletions src/api/webui/app/controllers/webui/package_controller.rb
Expand Up @@ -8,6 +8,9 @@ class Webui::PackageController < Webui::WebuiController
include Webui::WebuiHelper
include Webui::PackageHelper
include Escaper
include LoadBuildresults
include RequiresProject
include ManageRelationships

before_filter :require_project, :except => [:submit_request, :devel_project]
before_filter :require_package, :except => [:submit_request, :save_new_link, :save_new, :devel_project ]
Expand All @@ -24,19 +27,14 @@ def show
@srcmd5 = params[:srcmd5]
@revision_parameter = params[:rev]

begin
@buildresult = Buildresult.find_hashed(:project => @project, :package => @package, :view => 'status' ) unless @spider_bot
rescue => e
logger.error "No buildresult found for #{@project} / #{@package} : #{e.message}"
end
@bugowners_mail = []
(@package.bugowners + @project.bugowners).uniq.each do |bugowner|
mail = bugowner.email if bugowner
@bugowners_mail.push(mail.to_s) if mail
end unless @spider_bot
@revision = params[:rev]
@failures = 0
fill_status_cache unless @buildresult.blank?
load_buildresults
set_linking_packages
@expand = 1
@expand = begin Integer(params[:expand]) rescue 1 end if params[:expand]
Expand All @@ -61,8 +59,8 @@ def show
#BsRequest.list({:states => %w(new), :roles => %w(target), :project => @project.name, :package => @package.name})
end

def comment_object
@package # used by HasComments mixin
def main_object
@package # used by mixins
end

def set_linking_packages
Expand Down Expand Up @@ -94,8 +92,7 @@ def statistics
@repository = params[:repository]
@statistics = nil
begin
@statistics = Statistic.find( project: @project, package: @package, repository: @repository, arch: @arch )
@statistics = @statistics.to_hash if @statistics
@statistics = Statistic.find_hashed( project: @project, package: @package, repository: @repository, arch: @arch )
rescue ActiveXML::Transport::ForbiddenError
end
logger.debug "Statis #{@statistics.inspect}"
Expand Down Expand Up @@ -665,72 +662,6 @@ def remove_file
redirect_to :action => :show, :project => @project, :package => @package
end

def load_obj
if login = params[:userid]
return User.find_by_login!(login)
elsif title = params[:groupid]
return ::Group.find_by_title!(title)
else
raise MissingParameterError, 'Neither user nor group given'
end
end

def save_person
begin
@package.api_obj.add_role(load_obj, Role.find_by_title!(params[:role]))
@package.free_cache
rescue User::NotFound, ::Group::NotFound => e
flash[:error] = e.to_s
redirect_to action: :add_person, project: @project, package: @package, role: params[:role], userid: params[:userid]
return
end
respond_to do |format|
format.js { render json: { status: 'ok' } }
format.html do
flash[:notice] = "Added user #{params[:userid]} with role #{params[:role]}"
redirect_to action: :users, package: @package, project: @project
end
end
end

def save_group
begin
@package.api_obj.add_role(load_obj, Role.find_by_title!(params[:role]))
@package.free_cache
rescue User::NotFound, ::Group::NotFound => e
flash[:error] = e.to_s
redirect_to action: :add_group, project: @project, package: @package, role: params[:role], groupid: params[:groupid]
return
end
respond_to do |format|
format.js { render json: { status: 'ok' } }
format.html do
flash[:notice] = "Added group #{params[:groupid]} with role #{params[:role]} to package #{@package}"
redirect_to action: :users, package: @package, project: @project
end
end
end

def remove_role
begin
@package.api_obj.remove_role(load_obj, Role.find_by_title(params[:role]))
@package.free_cache
rescue User::NotFound, ::Group::NotFound => e
flash[:error] = e.summary
end
respond_to do |format|
format.js { render json: { status: 'ok' } }
format.html do
if params[:userid]
flash[:notice] = "Removed user #{params[:userid]}"
else
flash[:notice] = "Removed group '#{params[:groupid]}'"
end
redirect_to action: :users, package: @package, project: @project
end
end
end

def view_file
@filename = params[:filename] || params[:file] || ''
if WebuiPackage.is_binary_file?(@filename) # We don't want to display binary files
Expand Down Expand Up @@ -927,9 +858,7 @@ def import_spec

def buildresult
check_ajax
# discard cache
@buildresult = Buildresult.find_hashed( :project => @project, :package => @package, :view => 'status')
fill_status_cache unless @buildresult.blank?
load_buildresults
render :partial => 'buildstatus'
end

Expand Down Expand Up @@ -1042,27 +971,6 @@ def file_available? url, max_redirects=5
end
end

def require_project
required_parameters :project
unless Project.valid_name? params[:project]
unless request.xhr?
flash[:error] = "#{params[:project]} is not a valid project name"
redirect_to :controller => 'project', :action => 'list_public', :nextstatus => 404 and return
else
render :text => "#{params[:project]} is not a valid project name", :status => 404 and return
end
end
@project = WebuiProject.find( params[:project] )
unless @project
unless request.xhr?
flash[:error] = "Project not found: #{params[:project]}"
redirect_to :controller => 'project', :action => 'list_public', :nextstatus => 404 and return
else
render :text => "Project not found: #{params[:project]}", :status => 404 and return
end
end
end

def require_package
required_parameters :package
params[:rev], params[:package] = params[:pkgrev].split('-', 2) if params[:pkgrev]
Expand Down Expand Up @@ -1098,53 +1006,9 @@ def require_package
end
end

def fill_status_cache
@repohash = Hash.new
@statushash = Hash.new
@packagenames = Array.new
@repostatushash = Hash.new
@failures = 0

@buildresult.elements('result') do |result|
@resultvalue = result
repo = result['repository']
arch = result['arch']

@repohash[repo] ||= Array.new
@repohash[repo] << arch

# package status cache
@statushash[repo] ||= Hash.new
@statushash[repo][arch] = Hash.new

stathash = @statushash[repo][arch]
result.elements('status') do |status|
stathash[status['package']] = status
if ['unresolvable', 'failed', 'broken'].include? status['code']
@failures += 1
end
end

# repository status cache
@repostatushash[repo] ||= Hash.new
@repostatushash[repo][arch] = Hash.new

if result.has_key? 'state'
if result.has_key? 'dirty'
@repostatushash[repo][arch] = 'outdated_' + result['state']
else
@repostatushash[repo][arch] = result['state']
end
end

@packagenames << stathash.keys
end

if @buildresult and !@buildresult.has_key? 'result'
@buildresult = nil
end

return unless @buildresult
def load_buildresults
@buildresult = Buildresult.find_hashed( :project => @project, :package => @package, :view => 'status')
fill_status_cache unless @buildresult.blank?

newr = Hash.new
@buildresult.elements('result').sort {|a,b| a['repository'] <=> b['repository']}.each do |result|
Expand All @@ -1161,4 +1025,12 @@ def fill_status_cache
end
end

def users_path
url_for(action: :users, project: @project, package: @package)
end

def add_path(action)
url_for(action: action, project: @project, role: params[:role], userid: params[:userid], package: @package)
end

end

0 comments on commit 5e917f9

Please sign in to comment.