Skip to content

Commit

Permalink
Merge pull request #1683 from b1-systems/backport_1608
Browse files Browse the repository at this point in the history
Backport 1608
  • Loading branch information
adrianschroeter committed Apr 6, 2016
2 parents 110a65a + 9ead49d commit 533d6fd
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 12 deletions.
42 changes: 32 additions & 10 deletions src/api/test/functional/maintenance_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2284,35 +2284,49 @@ def test_copy_project_for_release

def test_copy_project_with_history_and_binaries
login_tom
post '/source/home:tom:CopyOfBaseDistro?cmd=copy&oproject=BaseDistro&withbinaries=1'
post '/source/home:tom:CopyOfBaseDistro3?cmd=copy&oproject=BaseDistro3&withbinaries=1'
assert_response 403
assert_xml_tag :tag => 'status', :attributes => { code: 'project_copy_no_permission' }

# as admin
login_king

# not needed for runnning this test case alone, but another test case might have triggered
# a build job, so we need to be sure to have no reason to schedule a build
get '/build/BaseDistro3/BaseDistro3_repo/i586/pack2/_history'
xml = Xmlhash.parse(@response.body)
md5 = xml['entry']['srcmd5']
post "/source/BaseDistro3/pack2?cmd=copy&orev=#{md5}&oproject=BaseDistro3&opackage=pack2"
assert_response :success
run_scheduler('i586')

get '/build/BaseDistro3/_result'
assert_response :success
assert_xml_tag :tag => 'status', :attributes => { package: 'pack2', code: 'succeeded' }

sleep 1 # to ensure that the timestamp becomes newer
post '/source/CopyOfBaseDistro?cmd=copy&oproject=BaseDistro&withhistory=1&withbinaries=1&nodelay=1'
post '/source/CopyOfBaseDistro3?cmd=copy&oproject=BaseDistro3&withhistory=1&withbinaries=1&nodelay=1'
assert_response :success
get '/source/CopyOfBaseDistro/_meta'
get '/source/CopyOfBaseDistro3/_meta'
assert_response :success
get '/source/BaseDistro'
get '/source/BaseDistro3'
assert_response :success
opackages = ActiveXML::Node.new(@response.body)
get '/source/CopyOfBaseDistro'
get '/source/CopyOfBaseDistro3'
assert_response :success
packages = ActiveXML::Node.new(@response.body)
assert_equal opackages.to_s, packages.to_s

# compare revisions
get '/source/BaseDistro/pack2/_history'
get '/source/BaseDistro3/pack2/_history'
assert_response :success
history = ActiveXML::Node.new(@response.body)
srcmd5 = last_revision(history).value(:srcmd5)
version = last_revision(history).value(:version)
time = last_revision(history).value(:time)
vrev = last_revision(history).value(:vrev)
assert_not_nil srcmd5
get '/source/CopyOfBaseDistro/pack2/_history'
get '/source/CopyOfBaseDistro3/pack2/_history'
assert_response :success
copyhistory = ActiveXML::Node.new(@response.body)
copysrcmd5 = last_revision(copyhistory).value(:srcmd5)
Expand All @@ -2328,15 +2342,23 @@ def test_copy_project_with_history_and_binaries

# compare binaries
run_scheduler('i586')
get '/build/BaseDistro/BaseDistro_repo/i586/pack2'
get '/build/BaseDistro3/BaseDistro3_repo/i586/pack2'
assert_response :success
assert_xml_tag :tag => 'binary', :attributes => { filename: 'package-1.0-1.i586.rpm' }
orig = @response.body
get '/build/CopyOfBaseDistro/BaseDistro_repo/i586/pack2'
get '/build/CopyOfBaseDistro3/BaseDistro3_repo/i586/pack2'
assert_response :success
assert_equal orig, @response.body

delete '/source/CopyOfBaseDistro'
# verify scheduler state
get '/build/BaseDistro3/_result'
assert_response :success
assert_xml_tag :tag => 'status', :attributes => { package: 'pack2', code: 'succeeded' }
get '/build/CopyOfBaseDistro3/_result'
assert_response :success
assert_xml_tag :tag => 'status', :attributes => { package: 'pack2', code: 'succeeded' }

delete '/source/CopyOfBaseDistro3'
assert_response :success
end

Expand Down
4 changes: 3 additions & 1 deletion src/backend/bs_repserver
Original file line number Diff line number Diff line change
Expand Up @@ -2050,14 +2050,15 @@ sub copybuild {
mkdir_p($dir);
my $delayed_linking;
my $needsign;
for my $bin (grep {$_ ne 'status' && $_ ne 'reason' && $_ ne 'history' && !/^\./} ls($odir)) {
for my $bin (grep {$_ ne 'status' && $_ ne 'reason' && $_ ne 'history' && $_ ne 'meta' && !/^\./} sort(ls($odir))) {
if ($bin eq "updateinfo.xml" && $cgi->{'setupdateinfoid'}) {
my $updateinfo = readxml("$odir/$bin", $BSXML::updateinfo);
for (@{$updateinfo->{'update'} || []}) {
$_->{'id'} = $cgi->{'setupdateinfoid'};
}
writexml("$dir/$bin", undef, $updateinfo, $BSXML::updateinfo);
} else {
next if $bin =~ /^::import::/; # can't copy those yet
$needsign = 1 if $bin =~ /\.(?:d?rpm|sha256|iso)$/;
my $nbin = $bin;
my $setrelease = $cgi->{'setrelease'};
Expand All @@ -2079,6 +2080,7 @@ sub copybuild {
}
}
}
link("$odir/.meta.success", "$dir/meta") if -e "$odir/.meta.success";

# we run the linking of directory trees in background, since it can take a long time
# for simple files it happened already
Expand Down
8 changes: 7 additions & 1 deletion src/backend/bs_sched
Original file line number Diff line number Diff line change
Expand Up @@ -4538,12 +4538,18 @@ sub uploadbuildevent {
my $gdst = "$reporoot/$prp/$myarch";
my $dst = "$gdst/$packid";
mkdir_p($dst);
my $meta;
$meta = "$jobdatadir/meta" if -e "$jobdatadir/meta";
print " - $prp: $packid uploaded\n";
my $useforbuildenabled = 1;
$useforbuildenabled = enabled($repoid, $projpacks->{$projid}->{'useforbuild'}, $useforbuildenabled);
$useforbuildenabled = enabled($repoid, $pdata->{'useforbuild'}, $useforbuildenabled);
update_dst_full($prp, $packid, $jobdatadir, undef, $useforbuildenabled, $prpsearchpath{$prp});
update_dst_full($prp, $packid, $jobdatadir, $meta, $useforbuildenabled, $prpsearchpath{$prp});
$changed->{$prp} = 2 if $useforbuildenabled;
if ($meta) {
mkdir_p("$gdst/:meta");
rename($meta, "$gdst/:meta/$packid");
}
delete $repounchanged{$prp} if $useforbuildenabled;
$repounchanged{$prp} = 2 if $repounchanged{$prp};
$changed->{$prp} ||= 1;
Expand Down

0 comments on commit 533d6fd

Please sign in to comment.