Skip to content

Commit

Permalink
[api] fix enforced package deletion ignoring devel defintion
Browse files Browse the repository at this point in the history
issue#1256
  • Loading branch information
adrianschroeter committed Oct 21, 2015
1 parent fa4bf52 commit 47d151e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
4 changes: 1 addition & 3 deletions src/api/app/controllers/source_controller.rb
Expand Up @@ -298,9 +298,7 @@ def delete_package
end

# deny deleting if other packages use this as develpackage
# Shall we offer a --force option here as well ?
# Shall we ask the other package owner accepting to be a devel package ?
tpkg.can_be_deleted?
tpkg.can_be_deleted? unless params[:force]

logger.info "destroying package object #{tpkg.name}"
tpkg.commit_opts = { comment: params[:comment] }
Expand Down
9 changes: 9 additions & 0 deletions src/api/app/models/package.rb
Expand Up @@ -76,6 +76,7 @@ class PutFileNoPermission < APIException; setup 403; end
before_destroy :revoke_requests
before_destroy :update_project_for_product
before_destroy :remove_linked_packages
before_destroy :remove_devel_packages
before_destroy :delete_cache_lines

after_save :write_to_backend
Expand Down Expand Up @@ -1066,6 +1067,14 @@ def remove_linked_packages
BackendPackage.where(links_to_id: self.id).delete_all
end

def remove_devel_packages
Package.where(develpackage: self).each do |devel_package|
devel_package.develpackage = nil
devel_package.store
devel_package.reset_cache
end
end

def revoke_requests
# Find open requests with this package as source and revoke them.
rel = BsRequest.where(state: [:new, :review, :declined]).joins(:bs_request_actions)
Expand Down
14 changes: 14 additions & 0 deletions src/api/test/functional/source_controller_test.rb
Expand Up @@ -1168,6 +1168,20 @@ def test_delete_project_with_local_devel_packages
assert_response :success
put '/source/home:tom:project/C/_meta', "<package name='C' project='home:tom:project'> <title/> <description/> <devel package='B'/> </package>"
assert_response :success
# delete a package which is used as devel package
get '/source/home:tom:project/B/_meta'
assert_response :success
assert_xml_tag tag: "devel"
delete '/source/home:tom:project/A'
assert_response 400
assert_select "status", code: "delete_error" do
assert_select "summary", "Package is used by following packages as devel package: home:tom:project/B"
end
delete '/source/home:tom:project/A?force=1'
assert_response :success
get '/source/home:tom:project/B/_meta'
assert_response :success
assert_no_xml_tag tag: "devel"
# delete the project including the packages
delete '/source/home:tom:project'
assert_response :success
Expand Down

0 comments on commit 47d151e

Please sign in to comment.