Skip to content

Commit

Permalink
[api] fix forking of scmsync projects
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianschroeter committed Jan 22, 2025
1 parent 4a0f57d commit c96423f
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 6 deletions.
14 changes: 9 additions & 5 deletions src/api/app/models/branch_package.rb
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,12 @@ def check_for_update_project(package_hash)
# would be just the cosmetic parts like title and description. Other elemnts should
# not be used anyway for scmsync packages.
def create_fork(project)
package = project.packages.find_or_initialize_by(name: params[:package])
package.scmsync = @scmsync
package.store
package = nil
unless params[:package] == '_project'
package = project.packages.find_or_initialize_by(name: params[:package])
package.scmsync = @scmsync
package.store
end

# add repositories
opts = {}
Expand All @@ -152,9 +155,10 @@ def create_fork(project)
source_project = Project.get_by_name(params[:project])
project.branch_to_repositories_from(source_project, package, opts)
project.sync_repository_pathes

project.scmsync = @scmsync if params[:package] == '_project'
project.store
{ targetproject: package.project.name, targetpackage: package.name, sourceproject: params[:project], sourcepackage: params[:package] }
return { targetproject: project.name, sourceproject: params[:project] } if params[:package] == '_project'
{ targetproject: project.name, targetpackage: package.name, sourceproject: params[:project], sourcepackage: params[:package] }
end

def create_branch_packages(tprj)
Expand Down
2 changes: 1 addition & 1 deletion src/api/app/models/project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -938,7 +938,7 @@ def branch_local_repositories(project, pkg_to_enable, opts = {})

branch_copy_flags(project)

return unless pkg_to_enable.is_channel?
return unless pkg_to_enable && pkg_to_enable.is_channel?

# explicit call for a channel package, so create the repos for it
pkg_to_enable.channels.each do |channel|
Expand Down
44 changes: 44 additions & 0 deletions src/api/test/functional/source_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2801,6 +2801,50 @@ def test_fork_simple_package
assert_response :success
end

def test_fork_project
login_adrian
put '/source/home:adrian:IMAGES/_meta', params: "<project name='home:adrian:IMAGES'> <title/> <description/>
<scmsync>http://localhost</scmsync>
<repository name='images'>
<arch>i586</arch>
<arch>x86_64</arch>
</repository>
</project>"
assert_response :success

login_tom
post '/source/home:adrian:IMAGES/_project', params: { cmd: 'fork' }
assert_response :bad_request
assert_xml_tag(tag: 'status', attributes: { code: 'missing_parameter' })

post '/source/home:adrian:IMAGES/_project', params: { cmd: 'fork', scmsync: 'http://127.0.0.1' }
assert_response :success

post '/source/home:adrian:IMAGES/_project', params: { cmd: 'fork', scmsync: 'http://127.0.0.1',
target_project: 'home:adrian:SOMEWHERE' }
assert_response :forbidden

get '/source/home:tom:branches:home:adrian:IMAGES/_project/_history'
assert_response :success

get '/source/home:tom:branches:home:adrian:IMAGES/_meta'
assert_response :success
assert_xml_tag(tag: 'repository', attributes: { name: 'images' })
assert_xml_tag(tag: 'scmsync', content: 'http://127.0.0.1')
assert_no_xml_tag(tag: 'path')

get '/source/home:tom:branches:home:adrian:IMAGES/_project/_meta'
assert_response :success
assert_xml_tag(tag: 'scmsync', content: 'http://127.0.0.1')

# cleanup
delete '/source/home:tom:branches:home:adrian:IMAGES'
assert_response :success
login_adrian
delete '/source/home:adrian:IMAGES'
assert_response :success
end

def test_release_package
login_adrian
# define manual release target
Expand Down

0 comments on commit c96423f

Please sign in to comment.