dapp 0.24.4 → 0.24.5

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: c9a285aead0a2e57006e54a0839ab32cf4170529
4
- data.tar.gz: cd58972b2de67689e2173bffe9524a0623e79bc1
3
+ metadata.gz: ed725aab664bfb2ec80a0c818bd83cf216dffadb
4
+ data.tar.gz: 8b64733931dc8da20c647c400510152fcf4eb044
5
5
  SHA512:
6
- metadata.gz: 9dbb053e622ce8ac204b9529dbf2c1ca266b22a4f46fec3736963861b5e74148ff19f423e297c1a3a9d0fd44afeeb787c3a448978ab2d0219273a23448eca36f
7
- data.tar.gz: f15547e0e17c93ba3e39ec915a1413b6445392212c9779333aa9d6742888b86d1291ee6d4be3f830dc79a21fe7af88001b32a428fbf64111da2d58eba3842772
6
+ metadata.gz: 6f50ab878df68cd4693eb6682fa9094bcf24bf94b29743daab8853718c0a3c3cc9c2e371a13e0cf3db53914112231f82b0020c07c947664eb8a7b38335e04c93
7
+ data.tar.gz: a4010b1a1d54582f3ad08368ddc70011f1785d503e15f762f9cf12047329d016c7737c7061d1ae180dd1ba56d2b7a6fcb5222049bb5df42b87152c4c4fb3db3f
@@ -16,8 +16,8 @@ module Dapp
16
16
  false
17
17
  end
18
18
 
19
- def last_stage
20
- @last_stage ||= Build::Stage::BuildArtifact.new(self)
19
+ def last_stage_class
20
+ Build::Stage::BuildArtifact
21
21
  end
22
22
  end # Artifact
23
23
  end # Dimg
@@ -83,15 +83,23 @@ module Dapp
83
83
  end
84
84
 
85
85
  def ignore_used_images(images_ids_or_names)
86
- images_ids_or_names.select do |image_id_or_name|
87
- res = run_command(%(#{host_docker} ps -a -q --filter=ancestor=#{image_id_or_name}))
88
- if res && !res.stdout.strip.empty? && !dry_run?
89
- log_info("Skip `#{image_id_or_name}` (used by containers: #{res.stdout.strip.split.join(' ')})")
90
- false
91
- else
86
+ not_used_images = proc do |*image_id_or_name, log: true|
87
+ images = image_id_or_name.flatten
88
+ filters = images.map { |iion| "--filter=ancestor=#{iion}" }.join(' ')
89
+ res = shellout!(%(#{host_docker} ps -a -q #{filters})).stdout.strip
90
+ if res.empty?
92
91
  true
92
+ else
93
+ log_info("Skip `#{images.join('`, `')}` (used by containers: #{res.split.join(' ')})") if log
94
+ false
93
95
  end
94
96
  end
97
+
98
+ if not_used_images.call(images_ids_or_names, log: false)
99
+ images_ids_or_names
100
+ else
101
+ images_ids_or_names.select(&not_used_images)
102
+ end
95
103
  end
96
104
 
97
105
  def remove_containers_by_query(containers_query)
@@ -9,7 +9,7 @@ module Dapp
9
9
  def local_git_artifacts
10
10
  @local_git_artifact_list ||= [].tap do |artifacts|
11
11
  break artifacts if (local_git_artifacts = Array(config._git_artifact._local)).empty?
12
- repo = GitRepo::Own.new(self)
12
+ repo = GitRepo::Own.new(dapp)
13
13
  local_git_artifacts.map do |ga_config|
14
14
  artifacts.concat(generate_git_artifacts(repo, **ga_config._artifact_options))
15
15
  end
@@ -19,7 +19,10 @@ module Dapp
19
19
  def remote_git_artifacts
20
20
  @remote_git_artifact_list ||= [].tap do |artifacts|
21
21
  Array(config._git_artifact._remote).each do |ga_config|
22
- repo = GitRepo::Remote.new(self, ga_config._name, url: ga_config._url).tap { |r| r.fetch!(ga_config._branch) }
22
+ repo = GitRepo::Remote.get_or_create(dapp, ga_config._name,
23
+ url: ga_config._url,
24
+ branch: ga_config._branch,
25
+ ignore_git_fetch: ignore_git_fetch)
23
26
  artifacts.concat(generate_git_artifacts(repo, **ga_config._artifact_options))
24
27
  end
25
28
  end
@@ -27,7 +30,7 @@ module Dapp
27
30
 
28
31
  def generate_git_artifacts(repo, **git_artifact_options)
29
32
  [].tap do |artifacts|
30
- artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, **git_artifact_options))
33
+ artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, self, **git_artifact_options))
31
34
  artifacts.concat(generate_git_embedded_artifacts(artifact))
32
35
  end
33
36
  end
@@ -31,13 +31,25 @@ module Dapp
31
31
  stages + artifacts.map(&:all_stages).flatten
32
32
  end
33
33
 
34
+ def last_stage
35
+ @last_stage || begin
36
+ (self.last_stage = last_stage_class.new(self)).tap do |stage|
37
+ dapp.log_secondary_process("#{config._name || 'nameless'}: calculating stages signatures") do
38
+ stage.signature
39
+ end
40
+ end
41
+ end
42
+ end
43
+
34
44
  protected
35
45
 
36
- def last_stage
37
- @last_stage ||= if scratch?
38
- Build::Stage::ImportArtifact.new(self)
46
+ attr_writer :last_stage
47
+
48
+ def last_stage_class
49
+ if scratch?
50
+ Build::Stage::ImportArtifact
39
51
  else
40
- Build::Stage::DockerInstructions.new(self)
52
+ Build::Stage::DockerInstructions
41
53
  end
42
54
  end
43
55
 
@@ -12,10 +12,11 @@ module Dapp
12
12
  # FIXME: переименовать cwd в from
13
13
 
14
14
  # rubocop:disable Metrics/ParameterLists
15
- def initialize(repo, to:, name: nil, branch: nil, commit: nil,
15
+ def initialize(repo, dimg, to:, name: nil, branch: nil, commit: nil,
16
16
  cwd: nil, include_paths: nil, exclude_paths: nil, owner: nil, group: nil, as: nil,
17
17
  stages_dependencies: {})
18
18
  @repo = repo
19
+ @dimg = dimg
19
20
  @name = name
20
21
 
21
22
  @branch = branch || repo.dapp.options[:git_artifact_branch] || repo.branch
@@ -69,17 +70,19 @@ module Dapp
69
70
  embedded_rel_path = embedded_params[:path]
70
71
  embedded_repo = begin
71
72
  if embedded_params[:type] == :remote
72
- GitRepo::Remote.new(repo.dimg, embedded_rel_path,
73
- url: embedded_params[:url]).tap { |r| r.fetch!(embedded_params[:branch]) }
73
+ GitRepo::Remote.get_or_create(repo.dapp, embedded_rel_path,
74
+ url: embedded_params[:url],
75
+ branch: embedded_params[:branch],
76
+ ignore_git_fetch: dimg.ignore_git_fetch )
74
77
  elsif embedded_params[:type] == :local
75
78
  embedded_path = File.join(repo.workdir_path, embedded_params[:path])
76
- GitRepo::Local.new(repo.dimg, embedded_rel_path, embedded_path)
79
+ GitRepo::Local.new(repo.dapp, embedded_rel_path, embedded_path)
77
80
  else
78
81
  raise
79
82
  end
80
83
  end
81
84
 
82
- self.class.new(embedded_repo, embedded_artifact_options(embedded_params))
85
+ self.class.new(embedded_repo, dimg, embedded_artifact_options(embedded_params))
83
86
  end
84
87
 
85
88
  def embedded_artifact_options(embedded_params)
@@ -293,6 +296,7 @@ module Dapp
293
296
  Digest::SHA256.hexdigest args.compact.map {|arg| arg.to_s.force_encoding("ASCII-8BIT")}.join(":::")
294
297
  end
295
298
 
299
+ attr_reader :dimg
296
300
  attr_reader :to
297
301
  attr_reader :commit
298
302
  attr_reader :branch
@@ -316,11 +320,11 @@ module Dapp
316
320
  else
317
321
  archive_file_with_tar_writer(stage, commit)
318
322
  end
319
- repo.dimg.container_tmp_path('archives', archive_file_name(commit))
323
+ dimg.container_tmp_path('archives', archive_file_name(commit))
320
324
  end
321
325
 
322
326
  def archive_file_with_tar_writer(stage, commit)
323
- tar_write(repo.dimg.tmp_path('archives', archive_file_name(commit))) do |tar|
327
+ tar_write(dimg.tmp_path('archives', archive_file_name(commit))) do |tar|
324
328
  each_archive_entry(stage, commit) do |path, content, mode|
325
329
  if mode == 0o120000 # symlink
326
330
  tar.add_symlink path, content, mode
@@ -336,10 +340,10 @@ module Dapp
336
340
  end
337
341
 
338
342
  def archive_file_with_system_tar(stage, commit)
339
- repo.dimg.tmp_path('archives', archive_file_name(commit)).tap do |archive_path|
343
+ dimg.tmp_path('archives', archive_file_name(commit)).tap do |archive_path|
340
344
  relative_archive_file_path = File.join('archives_files', file_name(commit))
341
345
  each_archive_entry(stage, commit) do |path, content, mode|
342
- file_path = repo.dimg.tmp_path(relative_archive_file_path, path)
346
+ file_path = dimg.tmp_path(relative_archive_file_path, path)
343
347
 
344
348
  if mode == 0o120000 # symlink
345
349
  FileUtils.symlink(content, file_path)
@@ -349,7 +353,7 @@ module Dapp
349
353
  end
350
354
  end
351
355
 
352
- repo.dapp.shellout!("tar -C #{repo.dimg.tmp_path(relative_archive_file_path)} -cf #{archive_path} .")
356
+ repo.dapp.shellout!("tar -C #{dimg.tmp_path(relative_archive_file_path)} -cf #{archive_path} .")
353
357
  end
354
358
  end
355
359
 
@@ -375,10 +379,10 @@ module Dapp
375
379
  end
376
380
 
377
381
  def patch_file(stage, from_commit, to_commit)
378
- File.open(repo.dimg.tmp_path('patches', patch_file_name(from_commit, to_commit)), File::RDWR | File::CREAT) do |f|
382
+ File.open(dimg.tmp_path('patches', patch_file_name(from_commit, to_commit)), File::RDWR | File::CREAT) do |f|
379
383
  diff_patches(from_commit, to_commit).each { |patch| f.write change_patch_new_file_path(stage, patch) }
380
384
  end
381
- repo.dimg.container_tmp_path('patches', patch_file_name(from_commit, to_commit))
385
+ dimg.container_tmp_path('patches', patch_file_name(from_commit, to_commit))
382
386
  end
383
387
 
384
388
  # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
@@ -548,7 +552,7 @@ module Dapp
548
552
  end
549
553
 
550
554
  def dev_mode?
551
- local? && repo.dimg.dev_mode?
555
+ local? && dimg.dev_mode?
552
556
  end
553
557
 
554
558
  def local?
@@ -6,32 +6,13 @@ module Dapp
6
6
  include Helper::Trivia
7
7
 
8
8
  attr_reader :name
9
+ attr_reader :dapp
9
10
 
10
- def initialize(manager, name)
11
- @manager = manager
11
+ def initialize(dapp, name)
12
+ @dapp = dapp
12
13
  @name = name
13
14
  end
14
15
 
15
- def dapp
16
- @dapp ||= begin
17
- if manager.is_a? ::Dapp::Dapp
18
- manager
19
- else
20
- dimg.dapp
21
- end
22
- end
23
- end
24
-
25
- def dimg
26
- @dimg ||= begin
27
- if manager.is_a? ::Dapp::Dimg::Dimg
28
- manager
29
- else
30
- raise
31
- end
32
- end
33
- end
34
-
35
16
  def exclude_paths
36
17
  []
37
18
  end
@@ -208,8 +189,6 @@ module Dapp
208
189
 
209
190
  protected
210
191
 
211
- attr_reader :manager
212
-
213
192
  def git(**kwargs)
214
193
  @git ||= Rugged::Repository.new(path.to_s, **kwargs)
215
194
  end
@@ -4,8 +4,8 @@ module Dapp
4
4
  class Local < Base
5
5
  attr_reader :path
6
6
 
7
- def initialize(manager, name, path)
8
- super(manager, name)
7
+ def initialize(dapp, name, path)
8
+ super(dapp, name)
9
9
  self.path = path
10
10
  end
11
11
 
@@ -2,12 +2,8 @@ module Dapp
2
2
  module Dimg
3
3
  module GitRepo
4
4
  class Own < Local
5
- def initialize(manager)
6
- super(manager, 'own', nil)
7
- end
8
-
9
- def path=(_)
10
- super(dapp.path.to_s)
5
+ def initialize(dapp)
6
+ super(dapp, 'own', dapp.path.to_s)
11
7
  end
12
8
 
13
9
  def exclude_paths
@@ -5,9 +5,31 @@ module Dapp
5
5
  CACHE_VERSION = 1
6
6
 
7
7
  attr_reader :url
8
+ attr_reader :path
9
+
10
+ class << self
11
+ def get_or_create(dapp, name, url:, branch:, ignore_git_fetch: false)
12
+ key = [url, branch, ignore_git_fetch]
13
+ inverse_key = [url, branch, !ignore_git_fetch]
14
+
15
+ repositories[key] ||= begin
16
+ if repositories.key?(inverse_key)
17
+ repositories[inverse_key]
18
+ else
19
+ new(dapp, name, url: url)
20
+ end.tap do |repo|
21
+ repo.fetch!(branch, ignore_git_fetch: ignore_git_fetch) unless ignore_git_fetch
22
+ end
23
+ end
24
+ end
25
+
26
+ def repositories
27
+ @repositories ||= {}
28
+ end
29
+ end
8
30
 
9
- def initialize(dimg, name, url:)
10
- super(dimg, name)
31
+ def initialize(dapp, name, url:)
32
+ super(dapp, name)
11
33
 
12
34
  @url = url
13
35
 
@@ -41,10 +63,10 @@ module Dapp
41
63
  end
42
64
 
43
65
  def path
44
- Pathname(dimg.build_path("remote_git_repo", CACHE_VERSION.to_s, name).to_s)
66
+ Pathname(dapp.build_path("remote_git_repo", CACHE_VERSION.to_s, name).to_s)
45
67
  end
46
68
 
47
- def fetch!(branch = nil)
69
+ def fetch!(branch = nil, ignore_git_fetch: false)
48
70
  _with_lock do
49
71
  branch ||= self.branch
50
72
 
@@ -66,7 +88,7 @@ module Dapp
66
88
  end
67
89
  raise Error::Rugged, code: :branch_not_exist_in_remote_git_repository, data: { branch: branch, url: url } unless branch_exist?(branch)
68
90
  end
69
- end unless dimg.ignore_git_fetch || dapp.dry_run?
91
+ end unless ignore_git_fetch || dapp.dry_run?
70
92
  end
71
93
 
72
94
  def branch_exist?(name)
@@ -1,4 +1,4 @@
1
1
  module Dapp
2
- VERSION = "0.24.4"
2
+ VERSION = "0.24.5"
3
3
  BUILD_CACHE_VERSION = 26
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.24.4
4
+ version: 0.24.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Stolyarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-19 00:00:00.000000000 Z
11
+ date: 2018-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout