diff --git a/app/models/ability.rb b/app/models/ability.rb index cf7862c3b..cd07368d6 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -142,6 +142,7 @@ class Ability can(:read, Product, read_relations_for('products', 'platforms')) {|product| product.platform.main?} can([:create, :update, :destroy, :clone], Product) {|product| local_admin? product.platform and product.platform.main?} + can([:create, :cancel], ProductBuildList) {|pbl| can?(:write, pbl.project)} can([:create, :cancel, :update], ProductBuildList) {|pbl| can?(:update, pbl.product)} can(:destroy, ProductBuildList) {|pbl| can?(:destroy, pbl.product)} diff --git a/app/models/product_build_list.rb b/app/models/product_build_list.rb index 130f4248c..df66186a0 100644 --- a/app/models/product_build_list.rb +++ b/app/models/product_build_list.rb @@ -85,6 +85,8 @@ class ProductBuildList < ActiveRecord::Base Time.now - LIVE_TIME, Time.now - MAX_LIVE_TIME) } + after_initialize :init_project, if: :new_record? + after_create :add_job_to_abf_worker_queue before_destroy :can_destroy? @@ -158,6 +160,10 @@ class ProductBuildList < ActiveRecord::Base protected + def init_project + self.project ||= product.try(:project) + end + def abf_worker_priority '' end diff --git a/app/views/api/v1/build_lists/show.json.jbuilder b/app/views/api/v1/build_lists/show.json.jbuilder index 794f92e0f..b4cb8a726 100644 --- a/app/views/api/v1/build_lists/show.json.jbuilder +++ b/app/views/api/v1/build_lists/show.json.jbuilder @@ -1,7 +1,6 @@ json.build_list do json.(@build_list, :id, :container_status, :status, :duration) json.(@build_list, :update_type, :priority, :new_core) - json.(@build_list, :advisory, :mass_build) json.(@build_list, :auto_publish_status, :package_version, :commit_hash, :last_published_commit_hash, :auto_create_container, :use_cached_chroot, :use_extra_tests) json.build_log_url log_build_list_path(@build_list) @@ -63,14 +62,22 @@ json.build_list do json.extra_params @build_list.extra_params - json.advisory do - json.name @build_list.advisory.advisory_id - json.(@build_list.advisory, :description) - end if @build_list.advisory + if @build_list.advisory + json.advisory do + json.name @build_list.advisory.advisory_id + json.(@build_list.advisory, :description) + end + else + json.advisory nil + end - json.mass_build do - json.(@build_list.mass_build, :id, :name) - end if @build_list.mass_build + if @build_list.mass_build + json.mass_build do + json.(@build_list.mass_build, :id, :name) + end + else + json.mass_build nil + end json.logs (@build_list.results || []) do |result| json.file_name result['file_name'] diff --git a/app/views/api/v1/maintainers/_package.json.jbuilder b/app/views/api/v1/maintainers/_package.json.jbuilder index 9940da2ce..29294ffff 100644 --- a/app/views/api/v1/maintainers/_package.json.jbuilder +++ b/app/views/api/v1/maintainers/_package.json.jbuilder @@ -1,4 +1,9 @@ json.(package, :id, :name, :version, :release, :epoch) json.type package.package_type json.updated_at package.updated_at.to_i -json.url (package.sha1 ? "#{APP_CONFIG['file_store_url']}/api/v1/file_stores/#{package.sha1}" : '' ) \ No newline at end of file +json.url (package.sha1 ? "#{APP_CONFIG['file_store_url']}/api/v1/file_stores/#{package.sha1}" : '' ) + +json.dependent_projects dependent_projects(package) do |project, packages| + json.partial! 'api/v1/projects/project', project: project + json.dependent_packages packages +end if package.build_list.save_to_platform.main? \ No newline at end of file diff --git a/lib/ext/git/grit.rb b/lib/ext/git/grit.rb index 5e67c2d26..62ca5dc6a 100644 --- a/lib/ext/git/grit.rb +++ b/lib/ext/git/grit.rb @@ -83,7 +83,7 @@ module Grit def diff_stats(a,b) stats = [] Dir.chdir(path) do - lines = self.git.native(:diff, {numstat: true, M: true}, "#{a}...#{b}").split("\n") + lines = self.git.native(:diff, {numstat: true}, "#{a}...#{b}").split("\n") while !lines.empty? files = [] while lines.first =~ /^([-\d]+)\s+([-\d]+)\s+(.+)/ diff --git a/spec/controllers/api/v1/product_build_lists_controller.rb b/spec/controllers/api/v1/product_build_lists_controller.rb index 35ee395a3..38810b276 100644 --- a/spec/controllers/api/v1/product_build_lists_controller.rb +++ b/spec/controllers/api/v1/product_build_lists_controller.rb @@ -115,6 +115,7 @@ end describe Api::V1::ProductBuildListsController do before(:each) do stub_symlink_methods + FactoryGirl.create(:arch, name: 'x86_64') @product_build_list = FactoryGirl.create(:product_build_list) @another_user = FactoryGirl.create(:user) diff --git a/spec/models/cancan_spec.rb b/spec/models/cancan_spec.rb index 867010e1f..4aa674e98 100644 --- a/spec/models/cancan_spec.rb +++ b/spec/models/cancan_spec.rb @@ -318,5 +318,43 @@ describe CanCan do end end end # 'repository relations' + + context 'product build list relations' do + let(:product_build_list) { FactoryGirl.create(:product_build_list) } + + before { FactoryGirl.create(:arch, name: 'x86_64') } + + context 'with platform admin rights' do + before do + product_build_list.product.platform.owner = @user + product_build_list.product.platform.save + end + + [:read, :create, :update, :destroy, :log, :cancel].each do |action| + it "should be able to #{action} product build list" do + @ability.should be_able_to(action, product_build_list) + end + end + end + + context 'with project writer rights' do + before do + create_relation(product_build_list.project, @user, 'writer') + end + + [:read, :create, :log, :cancel].each do |action| + it "should be able to #{action} product build list" do + @ability.should be_able_to(action, product_build_list) + end + end + + [:update, :destroy].each do |action| + it "should not be able to #{action} product build list" do + @ability.should_not be_able_to(action, product_build_list) + end + end + end + end # 'product build list relations' + end # 'Site user' end