Skip to content

Commit

Permalink
[api] refactor devel package definition checks
Browse files Browse the repository at this point in the history
Do not ignore project local devel package definitions if just a package gets removed
  • Loading branch information
adrianschroeter committed Oct 28, 2015
1 parent aca1ed8 commit 434e764
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 26 deletions.
4 changes: 2 additions & 2 deletions src/api/app/controllers/source_controller.rb
Expand Up @@ -175,7 +175,7 @@ def delete_project
:message => "Permission denied (delete project #{project})"
return
end
project.can_be_deleted?
project.check_weak_dependencies!
check_and_remove_repositories!(project.repositories, !params[:remove_linking_repositories].blank?, !params[:force].blank?)

logger.info "destroying project object #{project.name}"
Expand Down Expand Up @@ -298,7 +298,7 @@ def delete_package
end

# deny deleting if other packages use this as develpackage
tpkg.can_be_deleted? unless params[:force]
tpkg.check_weak_dependencies! unless params[:force]

logger.info "destroying package object #{tpkg.name}"
tpkg.commit_opts = { comment: params[:comment] }
Expand Down
2 changes: 1 addition & 1 deletion src/api/app/models/bs_request_action.rb
Expand Up @@ -734,7 +734,7 @@ def check_action_permission_source!
end
if self.source_package
spkg = Package.get_by_project_and_name(self.source_project, self.source_package, use_source: true, follow_project_links: true)
spkg.can_be_deleted? if spkg && self.sourceupdate == 'cleanup'
spkg.check_weak_dependencies! if spkg && self.sourceupdate == 'cleanup'
end

sprj
Expand Down
4 changes: 2 additions & 2 deletions src/api/app/models/bs_request_permission_check.rb
Expand Up @@ -91,7 +91,7 @@ def check_accepted_action(action)

def check_delete_accept(action)
if @target_package
@target_package.can_be_deleted?
@target_package.check_weak_dependencies!
else
if action.target_repository
r=Repository.find_by_project_and_name(@target_project.name, action.target_repository)
Expand All @@ -100,7 +100,7 @@ def check_delete_accept(action)
end
else
# remove entire project
@target_project.can_be_deleted?
@target_project.check_weak_dependencies!
end
end
end
Expand Down
13 changes: 6 additions & 7 deletions src/api/app/models/package.rb
Expand Up @@ -308,20 +308,19 @@ def check_write_access!(ignoreLock = nil)
end
end

def check_devel_packages(ignore_local = false)
def check_weak_dependencies?
develpackages.each do |package|
if !ignore_local && package.project.name != self.project.name
self.errors.add(:base, "used as devel package by #{package.project.name}/#{package.name}")
end
self.errors.add(:base, "used as devel package by #{package.project.name}/#{package.name}")
end
return false if self.errors.any?
true
end

# NOTE: this is no permission check, should it be added ?
def can_be_deleted?
def check_weak_dependencies!(ignore_local = false)
# check if other packages have me as devel package
packs = self.develpackages.to_a
packs = self.develpackages
packs = packs.where.not(project: self.project) if ignore_local
packs = packs.to_a
unless packs.empty?
msg = packs.map { |p| p.project.name + '/' + p.name }.join(', ')
de = DeleteError.new "Package is used by following packages as devel package: #{msg}"
Expand Down
17 changes: 4 additions & 13 deletions src/api/app/models/project.rb
Expand Up @@ -468,9 +468,9 @@ def can_free_repositories?
return true
end

def can_be_really_deleted?
def check_weak_dependencies?
begin
can_be_deleted?
check_weak_dependencies! (true) # ignore project local devel packages
rescue DeleteError
false
end
Expand All @@ -479,19 +479,10 @@ def can_be_really_deleted?
can_free_repositories?
end

# NOTE: this is no permission check, should it be added ?
def can_be_deleted?
def check_weak_dependencies!
# check all packages
self.packages.each do |pkg|
begin
pkg.can_be_deleted? # throws
rescue Package::DeleteError => e
e.packages.each do |p|
if p.project != self
raise DeleteError.new "Package #{self.name}/#{pkg.name} can not be deleted as it's the devel package of #{p.project.name}/#{p.name}"
end
end
end
pkg.check_weak_dependencies! (true) # ignore project local devel packages
end

# do not allow to remove maintenance master projects if there are incident projects
Expand Down
2 changes: 1 addition & 1 deletion src/api/test/unit/package_test.rb
Expand Up @@ -137,7 +137,7 @@ def test_render
end

def test_can_be_deleted
assert !packages(:kde4_kdelibs).can_be_deleted?
assert !packages(:kde4_kdelibs).check_weak_dependencies!
end

def test_store
Expand Down

0 comments on commit 434e764

Please sign in to comment.