dapp 0.10.3 → 0.10.4

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: aec1102e5d09b9d7a2ff35bb28197754f04542ed
4
- data.tar.gz: d109455833c5662a9acc3fb68cdc0486b90b393c
3
+ metadata.gz: ebff6933b83298b6ecb85ea23c7a2fe1db96dea0
4
+ data.tar.gz: 92b09ea990eadd0be1ea22bbd55537d4f21ad9be
5
5
  SHA512:
6
- metadata.gz: ae41e33d7e21d2fde9d8958005b7ec2e92c4e7a3aa73066d2c95721749fdf312fcdddb60d1efa5cb7778f593e59829f9694b9eef2022fa176867c3403fedffda
7
- data.tar.gz: 8033a3e5a29f7e323c0ea59511645f96f7a4075d38a257c721c1c6e91f7897e342c5ceb3bd9acf276293d72486c1625cebf9df1106f7ea2910b6382a372bb7c6
6
+ metadata.gz: 92599680d7a9da9693c5796962e6522f2548749502f7f4e74201c4b0ab734de05726f0a12e966c901caedb45f03af5ea3080ecc4b1f9de269c569774df0e7bc8
7
+ data.tar.gz: f67dd984507cd589e1dbcf845ec57783ff53195f0cea54191968aef45179ab4f9f7675bf6f8fd6c1d224ee4930d5a0c837a26796959a47fba5d51809f2fff361
@@ -24,8 +24,8 @@ module Dapp
24
24
  end
25
25
 
26
26
  %w(rm rsync diff date cat
27
- stat test sleep mkdir find
28
- install sed cp true
27
+ stat readlink test sleep mkdir
28
+ install sed cp true find
29
29
  bash tar sudo).each do |cmd|
30
30
  define_method("#{cmd}_bin") { "/.dapp/deps/base/#{BASE_VERSION}/bin/#{cmd}" }
31
31
  end
@@ -30,32 +30,44 @@ module Dapp
30
30
 
31
31
  # rubocop:disable Metrics/ParameterLists
32
32
  def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
33
- credentials = ''
34
- credentials += "-o #{owner} " if owner
35
- credentials += "-g #{group} " if group
36
- excludes = find_command_excludes(from, exclude_paths).join(' ')
37
-
38
- copy_files = proc do |from_, path_ = ''|
39
- "if [[ -d #{File.join(from_, path_)} ]] || [[ -f #{File.join(from_, path_)} ]]; then " \
40
- "#{dimg.dapp.find_bin} #{File.join(from_, path_)} #{excludes} -type f -exec " \
41
- "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -D #{credentials} \"{}\" " \
42
- "\"#{File.join(to, '$(echo "{}" | ' \
43
- "#{dimg.dapp.sed_bin} -e \"s/^#{from_.gsub('/', '\\/')}\\///g\")")}\"' \\; ;" \
44
- 'fi'
45
- end
33
+ ''.tap do |cmd|
34
+ cmd << dimg.dapp.rsync_bin
35
+ cmd << ' --archive --links'
36
+ cmd << " --chown=#{owner}:#{group}" if owner or group
46
37
 
47
- commands = []
48
- commands << [dimg.dapp.install_bin, credentials, '-d', to].join(' ')
49
- commands.concat(include_paths.empty? ? Array(copy_files.call(from)) : include_paths.map { |path| copy_files.call(from, path) })
50
- commands << "#{dimg.dapp.find_bin} #{to} -type d -exec " \
51
- "#{dimg.dapp.bash_bin} -ec '#{dimg.dapp.install_bin} -d #{credentials} {}' \\;"
52
- commands.join(' && ')
53
- end
54
- # rubocop:enable Metrics/ParameterLists
38
+ if include_paths.any?
39
+ # Если указали include_paths это означает, что надо копировать
40
+ # только указанные пути. Поэтому exclude_paths в приоритете, т.к. в данном режиме
41
+ # exclude_paths может относится только к путям, указанным в include_paths.
42
+ # При этом случай, когда в include_paths указали более специальный путь, чем в exclude_paths,
43
+ # будет обрабатываться в пользу exclude, этот путь не скопируется.
44
+ exclude_paths.each do |p|
45
+ cmd << " --filter='-/ #{File.join(from, p)}'"
46
+ end
47
+
48
+ include_paths.each do |p|
49
+ # * На данный момент не знаем директорию или файл имел в виду пользователь,
50
+ # поэтому подставляем фильтры для обоих возможных случаев.
51
+ # * Автоматом подставляем паттерн ** для включения файлов, содержащихся в
52
+ # директории, которую пользователь указал в include_paths.
53
+ cmd << " --filter='+/ #{File.join(from, p)}'"
54
+ cmd << " --filter='+/ #{File.join(from, p, '**')}'"
55
+ end
55
56
 
56
- def find_command_excludes(from, exclude_paths)
57
- exclude_paths.map { |path| "-not \\( -path #{File.join(from, path)} -prune \\)" }
57
+ # Все что не подошло по include — исключается
58
+ cmd << " --filter='-/ #{File.join(from, '**')}'"
59
+ else
60
+ exclude_paths.each do |p|
61
+ cmd << " --filter='-/ #{File.join(from, p)}'"
62
+ end
63
+ end
64
+
65
+ # Слэш после from — это инструкция rsync'у для копирования
66
+ # содержимого директории from, а не самой директории.
67
+ cmd << " #{from}/ #{to}"
68
+ end
58
69
  end
70
+ # rubocop:enable Metrics/ParameterLists
59
71
  end # ArtifactDefault
60
72
  end # Stage
61
73
  end # Build
@@ -140,8 +140,12 @@ module Dapp
140
140
  Gem::Package::TarWriter.new(f) do |tar|
141
141
  diff_patches(nil, to_commit).each do |patch|
142
142
  entry = patch.delta.new_file
143
- tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
144
- tf.write repo.lookup_object(entry[:oid]).content
143
+ if entry[:mode] == 40960 # symlink
144
+ tar.add_symlink slice_cwd(entry[:path]), repo.lookup_object(entry[:oid]).content, entry[:mode]
145
+ else
146
+ tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
147
+ tf.write repo.lookup_object(entry[:oid]).content
148
+ end
145
149
  end
146
150
  end
147
151
  end
data/lib/dapp/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = '0.10.3'.freeze
3
- BUILD_CACHE_VERSION = 8
2
+ VERSION = '0.10.4'.freeze
3
+ BUILD_CACHE_VERSION = 9
4
4
  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.10.3
4
+ version: 0.10.4
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-04-20 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
@@ -592,7 +592,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
592
592
  requirements:
593
593
  - - ">="
594
594
  - !ruby/object:Gem::Version
595
- version: '0'
595
+ version: 2.5.0
596
596
  requirements: []
597
597
  rubyforge_project:
598
598
  rubygems_version: 2.4.8