dapp 0.7.28 → 0.7.29

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 591dfeda702d8e91d15e1e3da4152556324a7d1a
4
- data.tar.gz: e9d75837a10c303a8af9de51de347c098a33a66a
3
+ metadata.gz: 27f41edc93f675eb3cb343639e176e7ed7163643
4
+ data.tar.gz: dd34396d0d2f76e0bf83ec0a51e5744655be40e4
5
5
  SHA512:
6
- metadata.gz: 857a9902f01ef9f65def9481cd538aa71902b9908f569faeeaf1256409bb567228689bf53782bc1c3c20669356abb2be92a8cd42de2091d149d2b05a58f2f512
7
- data.tar.gz: af3996880805bff85b6bf26d0e42464c710e6d2729c06cdbf6e4e8683e760e042fa7e7a117a4a81ff8594bca96d7e61b81713a4831984483b829c3f86de72d84
6
+ metadata.gz: f743206bfe53fbc9a01adfd730a58d0533cf5c8aa1819b719fc6adaf6b7e551733bb1b52e1f6d9693fee02b5cd92bb3c9694a556ecbd28561e51ce98cb947df3
7
+ data.tar.gz: 358972edf1f1293639ea69a26a0d1ddb1338e425c2dd1431ce79ffaddefb9ffdca0e8292050993427f3daf7cb171d8293a8224aa756c5494399d2414e5c06172
@@ -17,6 +17,7 @@ en:
17
17
  image_not_exist: "Image `%{name}` not exist!"
18
18
  built_id_not_defined: '`from.built_id` not defined!'
19
19
  from_image_not_found: 'Image `%{name}` not found!'
20
+ unsupported_docker_image_size_format: "Unsupported docker image size format `%{value}`"
20
21
  project:
21
22
  command_unexpected_dimgs_number: "Command can process only one dimg!\nAmbiguous dimg pattern: `%{dimgs_names}`!"
22
23
  no_such_dimg: "No such dimg: `%{dimgs_patterns}`!"
@@ -31,32 +31,44 @@ module Dapp
31
31
 
32
32
  # rubocop:disable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
33
33
  def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
34
- credentials = ''
35
- credentials += "-o #{owner} " if owner
36
- credentials += "-g #{group} " if group
37
- excludes = find_command_excludes(from, exclude_paths).join(' ')
38
-
39
- copy_files = proc do |from_, path_ = ''|
40
- "if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
41
- "#{dimg.project.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
42
- "#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -D #{credentials} \"{}\" " \
43
- "\"#{File.join(to, "$(echo \"{}\" | " \
44
- "#{dimg.project.sed_bin} -e \"s/^#{from_.gsub('/', '\\/')}\\///g\")")}\"' \\; ;" \
45
- 'fi'
46
- end
34
+ ''.tap do |cmd|
35
+ cmd << dimg.project.rsync_bin
36
+ cmd << ' --archive --links'
37
+ cmd << " --chown=#{owner}:#{group}" if owner or group
47
38
 
48
- commands = []
49
- commands << [dimg.project.install_bin, credentials, '-d', to].join(' ')
50
- commands.concat(include_paths.empty? ? Array(copy_files.call(from)) : include_paths.map { |path| copy_files.call(from, path) })
51
- commands << "#{dimg.project.find_bin} #{to} -type d -exec " \
52
- "#{dimg.project.bash_bin} -ec '#{dimg.project.install_bin} -d #{credentials} {}' \\;"
53
- commands.join(' && ')
54
- end
55
- # rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
39
+ if include_paths.any?
40
+ # Если указали include_paths ­— это означает, что надо копировать
41
+ # только указанные пути. Поэтому exclude_paths в приоритете, т.к. в данном режиме
42
+ # exclude_paths может относится только к путям, указанным в include_paths.
43
+ # При этом случай, когда в include_paths указали более специальный путь, чем в exclude_paths,
44
+ # будет обрабатываться в пользу exclude, этот путь не скопируется.
45
+ exclude_paths.each do |p|
46
+ cmd << " --filter='-/ #{File.join(from, p)}'"
47
+ end
48
+
49
+ include_paths.each do |p|
50
+ # * На данный момент не знаем директорию или файл имел в виду пользователь,
51
+ # поэтому подставляем фильтры для обоих возможных случаев.
52
+ # * Автоматом подставляем паттерн ** для включения файлов, содержащихся в
53
+ # директории, которую пользователь указал в include_paths.
54
+ cmd << " --filter='+/ #{File.join(from, p)}'"
55
+ cmd << " --filter='+/ #{File.join(from, p, '**')}'"
56
+ end
56
57
 
57
- def find_command_excludes(from, exclude_paths)
58
- exclude_paths.map { |path| "-not \\( -path #{File.join(from, path)} -prune \\)" }
58
+ # Все что не подошло по include — исключается
59
+ cmd << " --filter='-/ #{File.join(from, '**')}'"
60
+ else
61
+ exclude_paths.each do |p|
62
+ cmd << " --filter='-/ #{File.join(from, p)}'"
63
+ end
64
+ end
65
+
66
+ # Слэш после from — это инструкция rsync'у для копирования
67
+ # содержимого директории from, а не самой директории.
68
+ cmd << " #{from}/ #{to}"
69
+ end
59
70
  end
71
+ # rubocop:enable Metrics/ParameterLists, Metrics/AbcSize, Metrics/MethodLength
60
72
  end # ArtifactDefault
61
73
  end # Stage
62
74
  end # Build
@@ -90,17 +90,23 @@ module Dapp
90
90
  def cache_reset(name = '')
91
91
  cache.delete(name)
92
92
  Project.shellout!("docker images --format='{{.Repository}}:{{.Tag}};{{.ID}};{{.CreatedAt}};{{.Size}}' --no-trunc #{name}").stdout.lines.each do |l|
93
- name, id, created_at, size_field = l.split(';')
93
+ name, id, created_at, size_field = l.split(';').map(&:strip)
94
94
  size = begin
95
- number, unit = size_field.split
96
- coef = case unit.to_s.downcase
97
- when 'b' then return number.to_f
95
+ match = size_field.match(/^(\d+(\.\d+)?)\ ?(b|kb|mb|gb|tb)$/i)
96
+ raise Error::Build, code: :unsupported_docker_image_size_format, data: {value: size_field} unless match and match[1] and match[3]
97
+
98
+ number = match[1].to_f
99
+ unit = match[3].downcase
100
+
101
+ coef = case unit
102
+ when 'b' then 0
98
103
  when 'kb' then 1
99
104
  when 'mb' then 2
100
105
  when 'gb' then 3
101
106
  when 'tb' then 4
102
107
  end
103
- number.to_f * (1000 ** coef)
108
+
109
+ number * (1000**coef)
104
110
  end
105
111
  cache[name] = { id: id, created_at: created_at, size: size }
106
112
  end
data/lib/dapp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # Version
2
2
  module Dapp
3
- VERSION = '0.7.28'.freeze
4
- BUILD_CACHE_VERSION = 6
3
+ VERSION = '0.7.29'.freeze
4
+ BUILD_CACHE_VERSION = '6.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.28
4
+ version: 0.7.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-30 00:00:00.000000000 Z
11
+ date: 2017-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout