Make sure that appending is done on a valid length
This commit is contained in:
parent
360bd831bf
commit
dd29283a88
|
@ -231,10 +231,10 @@ module Ci
|
|||
end
|
||||
|
||||
def trace_length
|
||||
unless trace.present?
|
||||
0
|
||||
if raw_trace
|
||||
raw_trace.length
|
||||
else
|
||||
trace.length
|
||||
0
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -250,9 +250,10 @@ module Ci
|
|||
end
|
||||
private :recreate_trace_dir
|
||||
|
||||
def append_trace(trace_part)
|
||||
def append_trace(trace_part, offset)
|
||||
recreate_trace_dir
|
||||
|
||||
File.truncate(path_to_trace, offset)
|
||||
File.open(path_to_trace, 'a') do |f|
|
||||
f.write(trace_part)
|
||||
end
|
||||
|
|
|
@ -50,6 +50,16 @@ module Ci
|
|||
end
|
||||
end
|
||||
|
||||
# Send incremental log update - Runners only
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID of a build
|
||||
# Body:
|
||||
# content of logs to append
|
||||
# Headers:
|
||||
# Content-Range: range of conntent that was sent
|
||||
# Example Request:
|
||||
# PATCH /builds/:id/trace.txt
|
||||
patch ":id/trace.txt" do
|
||||
build = Ci::Build.find_by_id(params[:id])
|
||||
not_found! unless build
|
||||
|
@ -64,7 +74,7 @@ module Ci
|
|||
return error!('416 Range Not Satisfiable', 416, { 'Range' => "0-#{build.trace_length}" })
|
||||
end
|
||||
|
||||
build.append_trace(request.body.read)
|
||||
build.append_trace(request.body.read, content_range[0].to_i)
|
||||
|
||||
status 202
|
||||
header 'Build-Status', build.status
|
||||
|
|
|
@ -195,7 +195,7 @@ describe Ci::API::API do
|
|||
it { expect(response.status).to eq 400 }
|
||||
end
|
||||
|
||||
context 'when build has been erased' do
|
||||
context 'when build has been errased' do
|
||||
let(:build) { create(:ci_build, runner_id: runner.id, erased_at: Time.now) }
|
||||
|
||||
it { expect(response.status).to eq 403 }
|
||||
|
|
Loading…
Reference in New Issue