dapp 0.10.4 → 0.11.0
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 +4 -4
- data/lib/dapp.rb +1 -0
- data/lib/dapp/dapp/deps/base.rb +2 -2
- data/lib/dapp/dimg/build/stage/artifact_default.rb +23 -35
- data/lib/dapp/dimg/build/stage/base.rb +1 -1
- data/lib/dapp/dimg/build/stage/before_setup.rb +2 -0
- data/lib/dapp/dimg/build/stage/build_artifact.rb +2 -0
- data/lib/dapp/dimg/build/stage/install/install.rb +1 -0
- data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +23 -0
- data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -0
- data/lib/dapp/dimg/git_artifact.rb +13 -29
- data/lib/dapp/dimg/git_repo/base.rb +1 -13
- data/lib/dapp/dimg/git_repo/own.rb +1 -9
- data/lib/dapp/version.rb +2 -2
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9bde6d6e0a2f2f7d9d630dfd5307d87900aefba
|
4
|
+
data.tar.gz: 4cfa173162595e257a8e5e0f0c8fbd70dba8c576
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a5fcb98d67e9d4111b22d4252623e661c348dfdb1bc0d7ff4404a2db8d9f1ba164782aa0953c8186edd641363f067261d251ecf8f505805daa18add74f5088e
|
7
|
+
data.tar.gz: 7d001567b2075340f756334d281c23d7eb4bff6331d34299e23203d79a04fb0e0730217f2c8ccf424b52862d30adf65c4f07f0046424e0046c557ae4fff0f333
|
data/lib/dapp.rb
CHANGED
@@ -64,6 +64,7 @@ require 'dapp/dimg/builder/shell'
|
|
64
64
|
require 'dapp/dimg/builder/none'
|
65
65
|
require 'dapp/dimg/build/stage/mod/logging'
|
66
66
|
require 'dapp/dimg/build/stage/mod/group'
|
67
|
+
require 'dapp/dimg/build/stage/mod/git_artifact_dependencies'
|
67
68
|
require 'dapp/dimg/build/stage/base'
|
68
69
|
require 'dapp/dimg/build/stage/ga_base'
|
69
70
|
require 'dapp/dimg/build/stage/ga_dependencies_base'
|
data/lib/dapp/dapp/deps/base.rb
CHANGED
@@ -24,8 +24,8 @@ module Dapp
|
|
24
24
|
end
|
25
25
|
|
26
26
|
%w(rm rsync diff date cat
|
27
|
-
stat
|
28
|
-
install sed cp true
|
27
|
+
stat test sleep mkdir find
|
28
|
+
install sed cp true
|
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,44 +30,32 @@ module Dapp
|
|
30
30
|
|
31
31
|
# rubocop:disable Metrics/ParameterLists
|
32
32
|
def safe_cp(from, to, owner, group, include_paths = [], exclude_paths = [])
|
33
|
-
''
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
56
|
-
|
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}"
|
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'
|
68
45
|
end
|
46
|
+
|
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(' && ')
|
69
53
|
end
|
70
54
|
# rubocop:enable Metrics/ParameterLists
|
55
|
+
|
56
|
+
def find_command_excludes(from, exclude_paths)
|
57
|
+
exclude_paths.map { |path| "-not \\( -path #{File.join(from, path)} -prune \\)" }
|
58
|
+
end
|
71
59
|
end # ArtifactDefault
|
72
60
|
end # Stage
|
73
61
|
end # Build
|
@@ -168,7 +168,7 @@ module Dapp
|
|
168
168
|
end
|
169
169
|
|
170
170
|
def default_git_artifacts_dependencies(git_artifacts)
|
171
|
-
git_artifacts.map { |git_artifact| git_artifact.
|
171
|
+
git_artifacts.map { |git_artifact| git_artifact.stage_dependencies_checksums(self) }
|
172
172
|
end
|
173
173
|
|
174
174
|
def dependencies
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Dapp
|
2
|
+
module Dimg
|
3
|
+
module Build
|
4
|
+
module Stage
|
5
|
+
module Mod
|
6
|
+
module GitArtifactsDependencies
|
7
|
+
def local_git_artifacts_dependencies
|
8
|
+
dimg.local_git_artifacts.map do |git_artifact|
|
9
|
+
args = []
|
10
|
+
args << self
|
11
|
+
if dimg.dev_mode?
|
12
|
+
args << git_artifact.latest_commit
|
13
|
+
args << nil
|
14
|
+
end
|
15
|
+
git_artifact.stage_dependencies_checksums(*args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end # Mod
|
20
|
+
end # Stage
|
21
|
+
end # Build
|
22
|
+
end # Dimg
|
23
|
+
end # Dapp
|
@@ -52,27 +52,15 @@ module Dapp
|
|
52
52
|
patch_command(stage.prev_g_a_stage.layer_commit(self), nil)
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def stage_dependencies_checksums(stage, from_commit = nil, to_commit = latest_commit)
|
56
56
|
return [] if (stage_dependencies = stages_dependencies[stage.name]).empty?
|
57
57
|
|
58
|
-
paths =
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
latest_commit
|
58
|
+
paths = include_paths(true) + base_paths(stage_dependencies, true)
|
59
|
+
diff_patches(from_commit, to_commit, paths: paths).map do |patch|
|
60
|
+
delta_new_file = patch.delta.new_file
|
61
|
+
content = patch.hunks.map { |h| h.lines.select { |l| l.line_origin == :context }.map(&:content).join }.join
|
62
|
+
Digest::SHA256.hexdigest [delta_new_file[:path], content].join(':::')
|
64
63
|
end
|
65
|
-
|
66
|
-
diff_patches(nil, to_commit, paths: paths)
|
67
|
-
.sort_by {|patch| patch.delta.new_file[:path]}
|
68
|
-
.reduce(nil) {|prev_hash, patch|
|
69
|
-
Digest::SHA256.hexdigest [
|
70
|
-
prev_hash,
|
71
|
-
patch.delta.new_file[:path],
|
72
|
-
patch.delta.new_file[:mode].to_s,
|
73
|
-
patch.to_s
|
74
|
-
].compact.join(':::')
|
75
|
-
}
|
76
64
|
end
|
77
65
|
|
78
66
|
def patch_size(from, to)
|
@@ -97,7 +85,7 @@ module Dapp
|
|
97
85
|
end
|
98
86
|
|
99
87
|
def latest_commit
|
100
|
-
@latest_commit ||=
|
88
|
+
@latest_commit ||= commit || repo.latest_commit(branch)
|
101
89
|
end
|
102
90
|
|
103
91
|
def paramshash
|
@@ -140,12 +128,8 @@ module Dapp
|
|
140
128
|
Gem::Package::TarWriter.new(f) do |tar|
|
141
129
|
diff_patches(nil, to_commit).each do |patch|
|
142
130
|
entry = patch.delta.new_file
|
143
|
-
|
144
|
-
|
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
|
131
|
+
tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
|
132
|
+
tf.write repo.lookup_object(entry[:oid]).content
|
149
133
|
end
|
150
134
|
end
|
151
135
|
end
|
@@ -229,10 +213,10 @@ module Dapp
|
|
229
213
|
end
|
230
214
|
|
231
215
|
def diff_patches(from, to, paths: include_paths_or_cwd)
|
232
|
-
(@diff_patches ||= {})[[from, to, paths]]
|
233
|
-
|
234
|
-
|
235
|
-
|
216
|
+
(@diff_patches ||= {})[[from, to, paths]] = repo.patches(from, to,
|
217
|
+
paths: paths,
|
218
|
+
exclude_paths: exclude_paths(true),
|
219
|
+
force_text: true)
|
236
220
|
end
|
237
221
|
|
238
222
|
def include_paths_or_cwd
|
@@ -15,16 +15,6 @@ module Dapp
|
|
15
15
|
[]
|
16
16
|
end
|
17
17
|
|
18
|
-
# FIXME: Убрать логику исключения путей exclude_paths из данного класса,
|
19
|
-
# FIXME: т.к. большинство методов не поддерживают инвариант
|
20
|
-
# FIXME "всегда выдавать данные с исключенными путями".
|
21
|
-
# FIXME: Например, метод diff выдает данные без учета exclude_paths.
|
22
|
-
# FIXME: Лучше перенести фильтрацию в GitArtifact::diff_patches.
|
23
|
-
# FIXME: ИЛИ обеспечить этот инвариант, но это ограничит в возможностях
|
24
|
-
# FIXME: использование Rugged извне этого класса и это более сложный путь.
|
25
|
-
# FIXME: Лучше сейчас убрать фильтрацию, а добавить ее когда наберется достаточно
|
26
|
-
# FIXME: примеров использования.
|
27
|
-
|
28
18
|
def patches(from, to, exclude_paths: [], **kwargs)
|
29
19
|
diff(from, to, **kwargs).patches.select do |patch|
|
30
20
|
!exclude_paths.any? { |p| check_path?(patch.delta.new_file[:path], p) }
|
@@ -32,9 +22,7 @@ module Dapp
|
|
32
22
|
end
|
33
23
|
|
34
24
|
def diff(from, to, **kwargs)
|
35
|
-
if
|
36
|
-
raise "Workdir diff not supported for #{self.class}"
|
37
|
-
elsif from.nil?
|
25
|
+
if from.nil?
|
38
26
|
Rugged::Tree.diff(git, nil, to, **kwargs)
|
39
27
|
else
|
40
28
|
lookup_commit(from).diff(lookup_commit(to), **kwargs)
|
@@ -16,16 +16,8 @@ module Dapp
|
|
16
16
|
raise Error::Rugged, code: :local_git_repository_does_not_exist
|
17
17
|
end
|
18
18
|
|
19
|
-
# NOTICE: Параметры {from: nil, to: nil} можно указать только для Own repo.
|
20
|
-
# NOTICE: Для Remote repo такой вызов не имеет смысла и это ошибка пользователя класса Remote.
|
21
|
-
|
22
19
|
def diff(from, to, **kwargs)
|
23
|
-
if
|
24
|
-
mid_commit = latest_commit
|
25
|
-
diff_obj = super(nil, mid_commit, **kwargs)
|
26
|
-
diff_obj.merge! git.lookup(mid_commit).diff_workdir(**kwargs)
|
27
|
-
diff_obj
|
28
|
-
elsif to.nil?
|
20
|
+
if to.nil?
|
29
21
|
git.lookup(from).diff_workdir(**kwargs)
|
30
22
|
else
|
31
23
|
super
|
data/lib/dapp/version.rb
CHANGED
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.
|
4
|
+
version: 0.11.0
|
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-
|
11
|
+
date: 2017-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mixlib-shellout
|
@@ -449,6 +449,7 @@ files:
|
|
449
449
|
- lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb
|
450
450
|
- lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb
|
451
451
|
- lib/dapp/dimg/build/stage/install/install.rb
|
452
|
+
- lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb
|
452
453
|
- lib/dapp/dimg/build/stage/mod/group.rb
|
453
454
|
- lib/dapp/dimg/build/stage/mod/logging.rb
|
454
455
|
- lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb
|
@@ -592,7 +593,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
592
593
|
requirements:
|
593
594
|
- - ">="
|
594
595
|
- !ruby/object:Gem::Version
|
595
|
-
version:
|
596
|
+
version: '0'
|
596
597
|
requirements: []
|
597
598
|
rubyforge_project:
|
598
599
|
rubygems_version: 2.4.8
|