Skip to content

Commit

Permalink
[webui] don't ask the API for project _meta
Browse files Browse the repository at this point in the history
  • Loading branch information
coolo committed Oct 24, 2013
1 parent 5c8fe19 commit fe5903a
Show file tree
Hide file tree
Showing 14 changed files with 324 additions and 294 deletions.
18 changes: 18 additions & 0 deletions src/api/app/models/project.rb
Expand Up @@ -1134,4 +1134,22 @@ def update_packages_if_dirty
p.update_if_dirty
end
end

# Returns a list of pairs (full name, short name) for each parent
def self.parent_projects(project_name)
atoms = project_name.split(':')
projects = []
unused = 0

for i in 1..atoms.length do
p = atoms.slice(0, i).join(':')
r = atoms.slice(unused, i - unused).join(':')
if Project.where(name: p).exists? # ignore remote projects here
projects << [p, r]
unused = i
end
end
projects
end

end
3 changes: 3 additions & 0 deletions src/api/app/models/repository.rb
Expand Up @@ -93,4 +93,7 @@ def to_axml_id
return "<repository project='#{::Builder::XChar.encode(project.name)}' name='#{::Builder::XChar.encode(name)}'/>"
end

def to_s
name
end
end
6 changes: 2 additions & 4 deletions src/api/webui/app/controllers/webui/package_controller.rb
Expand Up @@ -169,8 +169,6 @@ def binaries
flash[:error] = "Package \"#{@package}\" has no build result for repository #{@repository}"
redirect_to :controller => 'package', :action => :show, :project => @project, :package => @package, :nextstatus => 404 and return
end
# load the flag details to disable links for forbidden binary downloads
@package = Webui::Package.find( @package.name, :project => @project, :view => :flagdetails )
end

def users
Expand Down Expand Up @@ -1096,14 +1094,14 @@ def edit
end

def repositories
@package = Webui::Package.find( params[:package], :project => params[:project], :view => :flagdetails )
@flags = @package.api_obj.expand_flags
end

def change_flag
check_ajax
required_parameters :cmd, :flag
frontend.source_cmd params[:cmd], project: @project, package: @package, repository: params[:repository], arch: params[:arch], flag: params[:flag], status: params[:status]
@package = Package.find( params[:package], project: @project.name, view: :flagdetails )
@flags = @package.api_obj.expand_flags[params[:flag]]
end

private
Expand Down
42 changes: 29 additions & 13 deletions src/api/webui/app/controllers/webui/project_controller.rb
Expand Up @@ -342,9 +342,16 @@ def comment_object

def load_releasetargets
@releasetargets = []
@project.each_repository do |repo|
@releasetargets.push(repo.releasetarget.value('project') + '/' + repo.releasetarget.value('repository')) if repo.has_element?('releasetarget')
Rails.logger.debug "load_releasetargets"
rts = ReleaseTarget.where(repository_id: @project.api_obj.repositories)
unless rts.empty?
Rails.logger.debug rts.inspect
@project.each_repository do |repo|
@releasetargets.push(repo.releasetarget.value('project') + '/' + repo.releasetarget.value('repository')) if repo.has_element?('releasetarget')
end
end
Rails.logger.debug @releasetargets.inspect
Rails.logger.debug "done"
end

def linking_projects
Expand Down Expand Up @@ -443,7 +450,7 @@ def delete
flash[:error] = e.summary
end
if @project.project_type != 'maintenance'
parent_projects = @project.parent_projects()
parent_projects = Project.parent_projects(@project.name)
if parent_projects.present?
redirect_to :action => 'show', :project => parent_projects[parent_projects.length - 1][0]
else
Expand Down Expand Up @@ -471,8 +478,9 @@ def edit_repository
# to keep currently non-working arches in the project meta.

# Prepare a list of recommended architectures
@recommended_arch_list = @available_architectures.each.map{|arch| arch.name if arch.recommended == 'true'
}
@recommended_arch_list = @available_architectures.each.map do |arch|
arch.name if arch.recommended == 'true'
end

@repository_arch_hash = Hash.new
@available_architectures.each {|arch| @repository_arch_hash[arch.name] = false }
Expand Down Expand Up @@ -508,9 +516,8 @@ def repositories
redirect_to :action => :show, :project => params[:project]
return
end
# overwrite @project with different view
# TODO to get this cached we need to make sure it gets purged on repo updates
@project = WebuiProject.find( params[:project], :view => :flagdetails )
@flags = @project.api_obj.expand_flags
Rails.logger.debug "FLAG #{@flags['build'].inspect}"
end

def repository_state
Expand Down Expand Up @@ -1155,7 +1162,7 @@ def change_flag
check_ajax
required_parameters :cmd, :flag
frontend.source_cmd params[:cmd], :project => @project, :repository => params[:repository], :arch => params[:arch], :flag => params[:flag], :status => params[:status]
@project = WebuiProject.find( :name => params[:project], :view => :flagdetails )
@flags = @project.api_obj.expand_flags[params[:flag]]
end

def clear_failed_comment
Expand Down Expand Up @@ -1455,21 +1462,31 @@ def status
end
end

before_filter :require_maintenance_project, only: [:maintained_projects,
:add_maintained_project_dialog,
:add_maintained_project,
:remove_maintained_project]

def require_maintenance_project
unless @is_maintenance_project
redirect_back_or_to :action => 'show', :project => @project
return false
end
return true
end

def maintained_projects
@maintained_projects = []
@project.each('maintenance/maintains') do |maintained_project_name|
@maintained_projects << maintained_project_name.value(:project)
end
redirect_back_or_to :action => 'show', :project => @project and return unless @is_maintenance_project
end

def add_maintained_project_dialog
redirect_back_or_to :action => 'show', :project => @project and return unless @is_maintenance_project
render_dialog
end

def add_maintained_project
redirect_back_or_to :action => 'show', :project => @project and return unless @is_maintenance_project
if params[:maintained_project].nil? or params[:maintained_project].empty?
flash[:error] = 'Please provide a valid project name'
redirect_back_or_to(:action => 'maintained_projects', :project => @project) and return
Expand All @@ -1486,7 +1503,6 @@ def add_maintained_project
end

def remove_maintained_project
redirect_back_or_to :action => 'show', :project => @project and return unless @is_maintenance_project
if params[:maintained_project].blank?
flash[:error] = 'Please provide a valid project name'
redirect_back_or_to(:action => 'maintained_projects', :project => @project) and return
Expand Down
4 changes: 2 additions & 2 deletions src/api/webui/app/helpers/webui/project_helper.rb
Expand Up @@ -55,10 +55,10 @@ def project_bread_crumb(*args)
unless @project.nil? || @project.is_remote?
prj_parents = nil
if @namespace # corner case where no project object is available (i.e. 'new' action)
prj_parents = WebuiProject.parent_projects(@namespace)
prj_parents = Project.parent_projects(@namespace)
else
#FIXME: Some controller's @project is a Project object whereas other's @project is a String object.
prj_parents = WebuiProject.parent_projects(@project.to_s)
prj_parents = Project.parent_projects(@project.to_s)
end
project_list = []
prj_parents.each do |name, short_name|
Expand Down

0 comments on commit fe5903a

Please sign in to comment.