Skip to content

Commit

Permalink
[api][backend] support and test manual package releases with special …
Browse files Browse the repository at this point in the history
…release tags

- we need also a test case for product ftp trees...
  • Loading branch information
adrianschroeter committed Mar 5, 2014
1 parent c2e7ee8 commit 7d022ad
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 12 deletions.
4 changes: 4 additions & 0 deletions docs/api/api/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,8 @@ Parameters:
withhistory: copies sources with history on copy command
withbinaries: copies also binaries on copy command
noservice: do not run source services
setrelease: define a specific release tag when used with "release" command. Setting it to "-" strips
the release string. Note: this modifies only the filename.

=== Packages

Expand Down Expand Up @@ -752,6 +754,8 @@ Parameters:
withissues: set to get issues parsed from changelogs (for diff commands)
onlyissues: used to limit to issues (for diff commands)
noservice: do not run source services
setrelease: define a specific release tag when used with "release" command. Setting it to "-" strips
the release string.



Expand Down
2 changes: 1 addition & 1 deletion src/api/app/controllers/source_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1504,7 +1504,7 @@ def package_command_release
next if params[:repository] and params[:repository] != repo.name
repo.release_targets.each do |releasetarget|
# find md5sum and release source and binaries
release_package(pkg, releasetarget.target_repository.project.name, pkg.name, repo)
release_package(pkg, releasetarget.target_repository.project.name, pkg.name, repo, nil, params[:setrelease])
end
end

Expand Down
16 changes: 9 additions & 7 deletions src/api/app/helpers/maintenance_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def create_new_maintenance_incident( maintenanceProject, baseProject = nil, requ
end

def release_package(sourcePackage, targetProjectName, targetPackageName,
filterSourceRepository = nil, request = nil)
filterSourceRepository = nil, request = nil, setrelease = nil)
targetProject = Project.get_by_name targetProjectName

# create package container, if missing
Expand All @@ -66,7 +66,7 @@ def release_package(sourcePackage, targetProjectName, targetPackageName,
end

# copy binaries
copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targetProject)
copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targetProject, setrelease)

# create or update main package linking to incident package
unless sourcePackage.is_patchinfo?
Expand Down Expand Up @@ -154,7 +154,7 @@ def release_package_copy_sources(request, sourcePackage, targetPackageName, targ
Suse::Backend.post cp_path, nil
end

def copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targetProject)
def copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targetProject, setrelease)
sourcePackage.project.repositories.each do |sourceRepo|
next if filterSourceRepository and filterSourceRepository != sourceRepo
sourceRepo.release_targets.each do |releasetarget|
Expand All @@ -163,7 +163,8 @@ def copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targ
if releasetarget.target_repository.project == targetProject
# get updateinfo id in case the source package comes from a maintenance project
uID = get_updateinfo_id(sourcePackage, releasetarget.target_repository)
copy_single_binary(arch, releasetarget, sourcePackage, sourceRepo, targetPackageName, uID)
copy_single_binary(arch, releasetarget, sourcePackage, sourceRepo, targetPackageName, uID,
setrelease, (releasetarget.trigger == 'maintenance'))
end
end
# remove maintenance release trigger in source
Expand All @@ -176,18 +177,19 @@ def copy_binaries(filterSourceRepository, sourcePackage, targetPackageName, targ
end
end

def copy_single_binary(arch, releasetarget, sourcePackage, sourceRepo, targetPackageName, updateinfoId)
def copy_single_binary(arch, releasetarget, sourcePackage, sourceRepo, targetPackageName, updateinfoId, setrelease, resign)
cp_params = {
:cmd => 'copy',
:oproject => sourcePackage.project.name,
:opackage => sourcePackage.name,
:orepository => sourceRepo.name,
:user => User.current.login,
:resign => '1',
}
cp_params[:setupdateinfoid] = updateinfoId if updateinfoId
cp_params[:setrelease] = setrelease if setrelease
cp_params[:resign] = "1" if resign
cp_path = "/build/#{CGI.escape(releasetarget.target_repository.project.name)}/#{URI.escape(releasetarget.target_repository.name)}/#{URI.escape(arch.name)}/#{URI.escape(targetPackageName)}"
cp_path << Suse::Backend.build_query_from_hash(cp_params, [:cmd, :oproject, :opackage, :orepository, :setupdateinfoid, :resign])
cp_path << Suse::Backend.build_query_from_hash(cp_params, [:cmd, :oproject, :opackage, :orepository, :setupdateinfoid, :resign, :setrelease])
Suse::Backend.post cp_path, nil
end

Expand Down
31 changes: 31 additions & 0 deletions src/api/test/functional/source_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2165,10 +2165,41 @@ def test_release_package
get '/build/home:Iggy/10.2/i586/TestPack/'
assert_response :success
assert_xml_tag :tag => 'binarylist', :children => { :count => 4 }
assert_xml_tag :tag => 'binary', :attributes => { :filename => 'package-1.0-1.i586.rpm' }

get '/build/home:Iggy:RT/rt/i586/TestPack/'
assert_response :success
assert_xml_tag :tag => 'binarylist', :children => { :count => 4 }
assert_xml_tag :tag => 'binary', :attributes => { :filename => 'package-1.0-1.i586.rpm' }



# release for real with a defined release tag
login_Iggy
post '/source/home:Iggy/TestPack?cmd=release&setrelease=Beta1', nil
assert_response :success
assert_xml_tag :tag => 'status', :attributes => { :code => 'ok' }

# process events
run_scheduler('i586')

# verify result
get '/source/home:Iggy:RT'
assert_response :success
assert_xml_tag :tag => 'entry', :attributes => { :name => 'TestPack' }

# compare source with target repo
get '/build/home:Iggy/10.2/i586/TestPack/'
assert_response :success
assert_xml_tag :tag => 'binarylist', :children => { :count => 4 }
assert_xml_tag :tag => 'binary', :attributes => { :filename => 'package-1.0-1.i586.rpm' }

get '/build/home:Iggy:RT/rt/i586/TestPack/'
assert_response :success
assert_xml_tag :tag => 'binarylist', :children => { :count => 4 }
# binary got renamed during release
assert_no_xml_tag :tag => 'binary', :attributes => { :filename => 'package-1.0-1.i586.rpm' }
assert_xml_tag :tag => 'binary', :attributes => { :filename => 'package-1.0-Beta1.i586.rpm' }

# cleanup
login_Iggy
Expand Down
7 changes: 4 additions & 3 deletions src/backend/bs_repserver
Original file line number Diff line number Diff line change
Expand Up @@ -1943,9 +1943,10 @@ sub copybuild {
my $nbin = $bin;
if ($cgi->{'setrelease'}) {
my $nrel = $cgi->{'setrelease'};
$nrel =~ s/^-?/-/;
$nrel =~ s/-?$/-/;
$nbin =~ s/-([^-]+)-(Media\d(?:\..*?)?)$/$nrel$1/;
$nrel =~ s/^-?/-/; # "-" will drop the release tag
$nrel =~ s/-?$//; # drop leading "-", it depends on the format
$nbin =~ s/-([^-]+)-Media(?:\d?)(?:\..*?)$/$nrel-$2/; # kiwi product builds
$nbin =~ s/-([^-.]+).([^.]*.rpm)$/$nrel.$2/; # rpms
}
if (-d "$odir/$bin") {
BSUtil::linktree("$odir/$bin", "$dir/$nbin");
Expand Down
3 changes: 2 additions & 1 deletion src/backend/bs_srcserver
Original file line number Diff line number Diff line change
Expand Up @@ -6213,6 +6213,7 @@ sub copybuild {
push @args, "opackage=$opackid";
push @args, "orepository=$orepoid";
push @args, "setupdateinfoid=$cgi->{'setupdateinfoid'}" if $cgi->{'setupdateinfoid'};
push @args, "setrelease=$cgi->{'setrelease'}" if $cgi->{'setrelease'};
push @args, 'resign=1' if $cgi->{'resign'};
my $param = {
'uri' => "$reposerver/build/$projid/$repoid/$arch/$packid",
Expand Down Expand Up @@ -7909,7 +7910,7 @@ my $dispatches = [
'/build/$project/$repository/$arch/_builddepinfo package* view:?' => \&getbuilddepinfo,
'/build/$project/$repository/$arch/_jobhistory package* code:* limit:num?' => \&getjobhistory,
'POST:/build/$project/$repository/$arch/_repository match:' => \&postrepo,
'POST:/build/$project/$repository/$arch/$package cmd=copy oproject:project? opackage:package? orepository:repository? setupdateinfoid:? resign:bool?' => \&copybuild,
'POST:/build/$project/$repository/$arch/$package cmd=copy oproject:project? opackage:package? orepository:repository? setupdateinfoid:? resign:bool? setrelease:?' => \&copybuild,
'POST:/build/$project/$repository/$arch/$package' => \&uploadbuild,
'/build/$project/$repository/$arch/$package_repository view:? binary:filename* nometa:bool? nosource:bool?' => \&getbinarylist,
'POST:/build/$project/$repository/$arch/$package_repository/_buildinfo add:* debug:bool?' => \&getbuildinfo_post,
Expand Down

0 comments on commit 7d022ad

Please sign in to comment.