Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
0142f9e0
Commit
0142f9e0
authored
Mar 27, 2018
by
Shinya Maeda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert some changes
parent
accc2cab
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
122 additions
and
152 deletions
+122
-152
lib/gitlab/ci/trace.rb
lib/gitlab/ci/trace.rb
+5
-1
lib/gitlab/ci/trace/chunked_io.rb
lib/gitlab/ci/trace/chunked_io.rb
+0
-145
lib/gitlab/ci/trace/http_io.rb
lib/gitlab/ci/trace/http_io.rb
+117
-6
No files found.
lib/gitlab/ci/trace.rb
View file @
0142f9e0
...
@@ -77,7 +77,11 @@ module Gitlab
...
@@ -77,7 +77,11 @@ module Gitlab
def
write
def
write
stream
=
Gitlab
::
Ci
::
Trace
::
Stream
.
new
do
stream
=
Gitlab
::
Ci
::
Trace
::
Stream
.
new
do
LiveIO
.
new
(
job
.
id
)
if
current_path
current_path
else
LiveIO
.
new
(
job
.
id
)
end
end
end
yield
(
stream
).
tap
do
yield
(
stream
).
tap
do
...
...
lib/gitlab/ci/trace/chunked_io.rb
deleted
100644 → 0
View file @
accc2cab
##
# This class is compatible with IO class (https://ruby-doc.org/core-2.3.1/IO.html)
# source: https://gitlab.com/snippets/1685610
module
Gitlab
module
Ci
class
Trace
class
ChunkedIO
attr_reader
:size
attr_reader
:tell
attr_reader
:chunk
,
:chunk_range
alias_method
:pos
,
:tell
def
initialize
(
size
)
@size
=
size
@tell
=
0
end
def
close
# no-op
end
def
binmode
# no-op
end
def
binmode?
true
end
def
path
nil
end
def
seek
(
pos
,
where
=
IO
::
SEEK_SET
)
new_pos
=
case
where
when
IO
::
SEEK_END
size
+
pos
when
IO
::
SEEK_SET
pos
when
IO
::
SEEK_CUR
tell
+
pos
else
-
1
end
raise
'new position is outside of file'
if
new_pos
<
0
||
new_pos
>
size
@tell
=
new_pos
end
def
eof?
tell
==
size
end
def
each_line
until
eof?
line
=
readline
break
if
line
.
nil?
yield
(
line
)
end
end
def
read
(
length
=
nil
)
out
=
""
until
eof?
||
(
length
&&
out
.
length
>=
length
)
data
=
get_chunk
break
if
data
.
empty?
out
<<
data
@tell
+=
data
.
bytesize
end
out
=
out
[
0
,
length
]
if
length
&&
out
.
length
>
length
out
end
def
readline
out
=
""
until
eof?
data
=
get_chunk
new_line
=
data
.
index
(
"
\n
"
)
if
!
new_line
.
nil?
out
<<
data
[
0
..
new_line
]
@tell
+=
new_line
+
1
break
else
out
<<
data
@tell
+=
data
.
bytesize
end
end
out
end
def
write
(
data
)
raise
NotImplementedError
end
def
truncate
(
offset
)
raise
NotImplementedError
end
def
flush
raise
NotImplementedError
end
def
present?
true
end
private
##
# To be overridden by superclasses
#
def
get_chunk
raise
NotImplementedError
end
def
in_range?
@chunk_range
&
.
include?
(
tell
)
end
def
chunk_offset
tell
%
BUFFER_SIZE
end
def
chunk_start
(
tell
/
BUFFER_SIZE
)
*
BUFFER_SIZE
end
def
chunk_end
[
chunk_start
+
BUFFER_SIZE
,
size
].
min
end
end
end
end
end
lib/gitlab/ci/trace/http_io.rb
View file @
0142f9e0
##
# This class is compatible with IO class (https://ruby-doc.org/core-2.3.1/IO.html)
# source: https://gitlab.com/snippets/1685610
module
Gitlab
module
Gitlab
module
Ci
module
Ci
class
Trace
class
Trace
class
HttpIO
<
ChunkedIO
class
HttpIO
FailedToGetChunkError
=
Class
.
new
(
StandardError
)
BUFFER_SIZE
=
128
.
kilobytes
InvalidURLError
=
Class
.
new
(
StandardError
)
InvalidURLError
=
Class
.
new
(
StandardError
)
FailedToGetChunkError
=
Class
.
new
(
StandardError
)
BUFFER_SIZE
=
128
.
kilobytes
attr_reader
:uri
,
:size
attr_reader
:tell
attr_reader
:chunk
,
:chunk_range
a
ttr_reader
:uri
a
lias_method
:pos
,
:tell
def
initialize
(
url
,
size
)
def
initialize
(
url
,
size
)
raise
InvalidURLError
unless
::
Gitlab
::
UrlSanitizer
.
valid?
(
url
)
raise
InvalidURLError
unless
::
Gitlab
::
UrlSanitizer
.
valid?
(
url
)
@uri
=
URI
(
url
)
@uri
=
URI
(
url
)
@size
=
size
@tell
=
0
end
def
close
# no-op
end
def
binmode
# no-op
end
def
binmode?
true
end
super
def
path
nil
end
end
def
url
def
url
@uri
.
to_s
@uri
.
to_s
end
end
def
seek
(
pos
,
where
=
IO
::
SEEK_SET
)
new_pos
=
case
where
when
IO
::
SEEK_END
size
+
pos
when
IO
::
SEEK_SET
pos
when
IO
::
SEEK_CUR
tell
+
pos
else
-
1
end
raise
'new position is outside of file'
if
new_pos
<
0
||
new_pos
>
size
@tell
=
new_pos
end
def
eof?
tell
==
size
end
def
each_line
until
eof?
line
=
readline
break
if
line
.
nil?
yield
(
line
)
end
end
def
read
(
length
=
nil
)
out
=
""
until
eof?
||
(
length
&&
out
.
length
>=
length
)
data
=
get_chunk
break
if
data
.
empty?
out
<<
data
@tell
+=
data
.
bytesize
end
out
=
out
[
0
,
length
]
if
length
&&
out
.
length
>
length
out
end
def
readline
out
=
""
until
eof?
data
=
get_chunk
new_line
=
data
.
index
(
"
\n
"
)
if
!
new_line
.
nil?
out
<<
data
[
0
..
new_line
]
@tell
+=
new_line
+
1
break
else
out
<<
data
@tell
+=
data
.
bytesize
end
end
out
end
def
write
(
data
)
def
write
(
data
)
raise
NotImplementedError
raise
NotImplementedError
end
end
...
@@ -33,10 +123,19 @@ module Gitlab
...
@@ -33,10 +123,19 @@ module Gitlab
raise
NotImplementedError
raise
NotImplementedError
end
end
def
present?
true
end
private
private
##
##
# Override
# The below methods are not implemented in IO class
#
def
in_range?
@chunk_range
&
.
include?
(
tell
)
end
def
get_chunk
def
get_chunk
unless
in_range?
unless
in_range?
response
=
Net
::
HTTP
.
start
(
uri
.
hostname
,
uri
.
port
,
use_ssl:
uri
.
scheme
==
'https'
)
do
|
http
|
response
=
Net
::
HTTP
.
start
(
uri
.
hostname
,
uri
.
port
,
use_ssl:
uri
.
scheme
==
'https'
)
do
|
http
|
...
@@ -70,6 +169,18 @@ module Gitlab
...
@@ -70,6 +169,18 @@ module Gitlab
request
.
set_range
(
chunk_start
,
BUFFER_SIZE
)
request
.
set_range
(
chunk_start
,
BUFFER_SIZE
)
end
end
end
end
def
chunk_offset
tell
%
BUFFER_SIZE
end
def
chunk_start
(
tell
/
BUFFER_SIZE
)
*
BUFFER_SIZE
end
def
chunk_end
[
chunk_start
+
BUFFER_SIZE
,
size
].
min
end
end
end
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment