Skip to content

Commit

Permalink
[api] delete projects with username and comment for the history. Fix …
Browse files Browse the repository at this point in the history
…showing the history of deleted projects.
  • Loading branch information
adrianschroeter committed Apr 17, 2012
1 parent 80745f9 commit 3108435
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 24 deletions.
51 changes: 28 additions & 23 deletions src/api/app/controllers/source_controller.rb
Expand Up @@ -190,7 +190,7 @@ def index_project
params[:user] = @http_user.login
path = "/source/#{pro.name}"
path << build_query_from_hash(params, [:user, :comment])
Suse::Backend.delete "/source/#{pro.name}"
Suse::Backend.delete path
logger.debug "delete request to backend: #{path}"
end

Expand Down Expand Up @@ -1018,39 +1018,44 @@ def file
return unless @http_user
params[:user] = @http_user.login

if params.has_key?(:deleted) and request.get?
if DbProject.exists_by_name(project_name)
validate_read_access_of_deleted_package(project_name, package_name)
pass_to_backend
return
elsif package_name == "_project"
validate_visibility_of_deleted_project(project_name)
pass_to_backend
return
end
end

prj = DbProject.get_by_name(project_name)
pack = nil
allowed = false

if package_name == "_project" or package_name == "_pattern"
allowed = permissions.project_change? prj
else
if params.has_key? :deleted
validate_read_access_of_deleted_package(project_name, package_name)
pass_to_backend
return
else
if request.get?
# a readable package, even on remote instance is enough here
begin
pack = DbPackage.get_by_project_and_name(project_name, package_name)
rescue DbPackage::UnknownObjectError
end
else
# we need a local package here in any case for modifications
if request.get?
# a readable package, even on remote instance is enough here
begin
pack = DbPackage.get_by_project_and_name(project_name, package_name)
allowed = permissions.package_change? pack
rescue DbPackage::UnknownObjectError
end
else
# we need a local package here in any case for modifications
pack = DbPackage.get_by_project_and_name(project_name, package_name)
allowed = permissions.package_change? pack
end

if pack.nil? and request.get?
# Check if this is a package on a remote OBS instance
answer = Suse::Backend.get(request.path)
if answer
pass_to_backend
return
end
if pack.nil? and request.get?
# Check if this is a package on a remote OBS instance
answer = Suse::Backend.get(request.path)
if answer
pass_to_backend
return
end

end
end

Expand Down
12 changes: 11 additions & 1 deletion src/api/test/functional/source_controller_test.rb
Expand Up @@ -1440,7 +1440,7 @@ def test_remove_and_undelete_operations
assert_response :success

# delete entire project
delete "/source/kde4"
delete "/source/kde4?user=illegal&comment=drop%20project"
assert_response :success

get "/source/kde4"
Expand All @@ -1464,6 +1464,16 @@ def test_remove_and_undelete_operations
assert_response 403
assert_match(/only admins can see deleted projects/, @response.body)

# check history
get "/source/kde4/_project/_history?deleted=1"
assert_response :success
assert_xml_tag( :parent => { :tag => "revision" }, :tag => "user", :content => "fredlibs" )
assert_xml_tag( :parent => { :tag => "revision" }, :tag => "comment", :content => "drop project" )
get "/source/kde4/_project/_history?meta=1&deleted=1"
assert_xml_tag( :parent => { :tag => "revision" }, :tag => "user", :content => "fredlibs" )
assert_xml_tag( :parent => { :tag => "revision" }, :tag => "comment", :content => "drop project" )
assert_response :success

prepare_request_with_user "fredlibs", "geröllheimer"
# undelete project
post "/source/kde4", :cmd => :undelete
Expand Down

0 comments on commit 3108435

Please sign in to comment.