diff options
author | Grzegorz Bizon <grzegorz@gitlab.com> | 2018-10-22 11:09:40 +0300 |
---|---|---|
committer | Grzegorz Bizon <grzegorz@gitlab.com> | 2018-10-22 11:09:40 +0300 |
commit | 44a9231d19f88c5551f7184917ddc4bba13e7d00 (patch) | |
tree | 8c519413eb3d9576d2a9179619cc102485a26e0e /lib/gitlab/ci | |
parent | fbb0f71237fca77746e84ba4cea837472a178f4d (diff) | |
parent | 15cd91c71a57a0b84af620181a64b26d5aec8237 (diff) |
Merge branch 'use-raw-file-format' into 'master'
Add RAW file format which is used to store security reports
Closes gitlab-ee#7996
See merge request gitlab-org/gitlab-ce!22365
Diffstat (limited to 'lib/gitlab/ci')
-rw-r--r-- | lib/gitlab/ci/build/artifacts/adapters/gzip_stream.rb | 48 | ||||
-rw-r--r-- | lib/gitlab/ci/build/artifacts/adapters/raw_stream.rb | 27 | ||||
-rw-r--r-- | lib/gitlab/ci/build/artifacts/gzip_file_adapter.rb | 46 |
3 files changed, 75 insertions, 46 deletions
diff --git a/lib/gitlab/ci/build/artifacts/adapters/gzip_stream.rb b/lib/gitlab/ci/build/artifacts/adapters/gzip_stream.rb new file mode 100644 index 00000000000..ee3647f24fd --- /dev/null +++ b/lib/gitlab/ci/build/artifacts/adapters/gzip_stream.rb @@ -0,0 +1,48 @@ +module Gitlab + module Ci + module Build + module Artifacts + module Adapters + class GzipStream + attr_reader :stream + + InvalidStreamError = Class.new(StandardError) + + def initialize(stream) + raise InvalidStreamError, "Stream is required" unless stream + + @stream = stream + end + + def each_blob + stream.seek(0) + + until stream.eof? + gzip(stream) do |gz| + yield gz.read, gz.orig_name + unused = gz.unused&.length.to_i + # pos has already reached to EOF at the moment + # We rewind the pos to the top of unused files + # to read next gzip stream, to support multistream archives + # https://golang.org/src/compress/gzip/gunzip.go#L117 + stream.seek(-unused, IO::SEEK_CUR) + end + end + end + + private + + def gzip(stream, &block) + gz = Zlib::GzipReader.new(stream) + yield(gz) + rescue Zlib::Error => e + raise InvalidStreamError, e.message + ensure + gz&.finish + end + end + end + end + end + end +end diff --git a/lib/gitlab/ci/build/artifacts/adapters/raw_stream.rb b/lib/gitlab/ci/build/artifacts/adapters/raw_stream.rb new file mode 100644 index 00000000000..fa6842cf36a --- /dev/null +++ b/lib/gitlab/ci/build/artifacts/adapters/raw_stream.rb @@ -0,0 +1,27 @@ +module Gitlab + module Ci + module Build + module Artifacts + module Adapters + class RawStream + attr_reader :stream + + InvalidStreamError = Class.new(StandardError) + + def initialize(stream) + raise InvalidStreamError, "Stream is required" unless stream + + @stream = stream + end + + def each_blob + stream.seek(0) + + yield(stream.read, 'raw') unless stream.eof? + end + end + end + end + end + end +end diff --git a/lib/gitlab/ci/build/artifacts/gzip_file_adapter.rb b/lib/gitlab/ci/build/artifacts/gzip_file_adapter.rb deleted file mode 100644 index 65f65cdce08..00000000000 --- a/lib/gitlab/ci/build/artifacts/gzip_file_adapter.rb +++ /dev/null @@ -1,46 +0,0 @@ -module Gitlab - module Ci - module Build - module Artifacts - class GzipFileAdapter - attr_reader :stream - - InvalidStreamError = Class.new(StandardError) - - def initialize(stream) - raise InvalidStreamError, "Stream is required" unless stream - - @stream = stream - end - - def each_blob - stream.seek(0) - - until stream.eof? - gzip(stream) do |gz| - yield gz.read, gz.orig_name - unused = gz.unused&.length.to_i - # pos has already reached to EOF at the moment - # We rewind the pos to the top of unused files - # to read next gzip stream, to support multistream archives - # https://golang.org/src/compress/gzip/gunzip.go#L117 - stream.seek(-unused, IO::SEEK_CUR) - end - end - end - - private - - def gzip(stream, &block) - gz = Zlib::GzipReader.new(stream) - yield(gz) - rescue Zlib::Error => e - raise InvalidStreamError, e.message - ensure - gz&.finish - end - end - end - end - end -end |