summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-01-04 13:08:49 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-01-14 12:48:15 +0100
commita7f99b67a0bf1160f41ebf4dc92c618eb13a7a10 (patch)
treefaba38ae6a6fcadb57fe564891912d37bed462ba /lib
parentdf41148662142ce20a77b092665f48dd4dfa7bfb (diff)
downloadgitlab-ce-a7f99b67a0bf1160f41ebf4dc92c618eb13a7a10.tar.gz
Extract artifacts metadata implementation to separate class
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/ci/build/artifacts/metadata.rb57
-rw-r--r--lib/gitlab/string_path.rb4
2 files changed, 59 insertions, 2 deletions
diff --git a/lib/gitlab/ci/build/artifacts/metadata.rb b/lib/gitlab/ci/build/artifacts/metadata.rb
new file mode 100644
index 00000000000..5313182d55f
--- /dev/null
+++ b/lib/gitlab/ci/build/artifacts/metadata.rb
@@ -0,0 +1,57 @@
+require 'zlib'
+require 'json'
+
+module Gitlab
+ module Ci
+ module Build
+ module Artifacts
+ class Metadata
+ def initialize(file, path)
+ @file = file
+
+ @path = path.sub(/^\.\//, '')
+ @path << '/' unless path.end_with?('/')
+ end
+
+ def exists?
+ File.exists?(@file)
+ end
+
+ def match!
+ raise StandardError, 'Metadata file not found !' unless exists?
+ paths, metadata = [], []
+
+ each do |line|
+ next unless line =~ %r{^#{Regexp.escape(@path)}[^/\s]+/?\s}
+
+ path, meta = line.split(' ')
+ paths.push(path)
+ metadata.push(meta)
+ end
+
+ [paths, metadata.map { |meta| JSON.parse(meta) }]
+ end
+
+ def to_string_path
+ universe, metadata = match!
+ ::Gitlab::StringPath.new(@path, universe, metadata)
+ end
+
+ private
+
+ def each
+ open do |file|
+ gzip = Zlib::GzipReader.new(file)
+ gzip.each_line { |line| yield line }
+ gzip.close
+ end
+ end
+
+ def open
+ File.open(@file) { |file| yield file }
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/string_path.rb b/lib/gitlab/string_path.rb
index e7d99a35869..9948502e8ea 100644
--- a/lib/gitlab/string_path.rb
+++ b/lib/gitlab/string_path.rb
@@ -75,7 +75,7 @@ module Gitlab
end
def directories!
- has_parent? ? directories.prepend(parent) : directories
+ @path =~ %r{^\./[^/]/} ? directories.prepend(parent) : directories
end
def files
@@ -119,7 +119,7 @@ module Gitlab
raise ArgumentError, 'Invalid path' if clean_path.start_with?('../')
prefix = './' unless clean_path =~ %r{^[\.|/]}
- suffix = '/' if path.end_with?('/') || clean_path =~ /^[\.|\.\.]$/
+ suffix = '/' if path.end_with?('/') || ['.', '..'].include?(clean_path)
prefix.to_s + clean_path + suffix.to_s
end
end