dapp 0.10.3 → 0.10.4

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: 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