dapp 0.7.28 → 0.7.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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