dapp 0.11.0 → 0.12.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.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/config/en/net_status.yml +36 -4
  3. data/lib/dapp.rb +84 -36
  4. data/lib/dapp/cli.rb +3 -2
  5. data/lib/dapp/cli/command/base.rb +69 -0
  6. data/lib/dapp/config/config.rb +17 -0
  7. data/lib/dapp/config/directive/base.rb +90 -3
  8. data/lib/dapp/dapp.rb +6 -14
  9. data/lib/dapp/dapp/dappfile.rb +20 -27
  10. data/lib/dapp/dapp/deps/base.rb +2 -2
  11. data/lib/dapp/dapp/lock.rb +1 -1
  12. data/lib/dapp/dapp/logging/base.rb +11 -7
  13. data/lib/dapp/dapp/logging/process.rb +4 -2
  14. data/lib/dapp/dapp/shellout/base.rb +2 -2
  15. data/lib/dapp/dapp/ssh_agent.rb +2 -2
  16. data/lib/dapp/deployment.rb +1 -0
  17. data/lib/dapp/deployment/app.rb +120 -0
  18. data/lib/dapp/deployment/cli/cli.rb +1 -0
  19. data/lib/dapp/deployment/cli/command/base.rb +14 -0
  20. data/lib/dapp/deployment/cli/command/deployment.rb +21 -0
  21. data/lib/dapp/deployment/cli/command/deployment/apply.rb +26 -0
  22. data/lib/dapp/deployment/cli/command/deployment/minikube_setup.rb +13 -0
  23. data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +13 -0
  24. data/lib/dapp/deployment/cli/command/deployment/secret_generate.rb +13 -0
  25. data/lib/dapp/deployment/cli/command/deployment/secret_key_generate.rb +13 -0
  26. data/lib/dapp/deployment/config/config.rb +46 -0
  27. data/lib/dapp/deployment/config/directive/app.rb +28 -0
  28. data/lib/dapp/deployment/config/directive/app/instance_methods.rb +51 -0
  29. data/lib/dapp/deployment/config/directive/base.rb +13 -0
  30. data/lib/dapp/deployment/config/directive/deployment.rb +11 -0
  31. data/lib/dapp/deployment/config/directive/expose.rb +68 -0
  32. data/lib/dapp/deployment/config/directive/group.rb +27 -0
  33. data/lib/dapp/deployment/config/directive/job.rb +28 -0
  34. data/lib/dapp/deployment/config/directive/mod/group.rb +22 -0
  35. data/lib/dapp/deployment/config/directive/mod/jobs.rb +26 -0
  36. data/lib/dapp/deployment/config/directive/namespace.rb +26 -0
  37. data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +37 -0
  38. data/lib/dapp/deployment/core_ext/hash.rb +19 -0
  39. data/lib/dapp/deployment/dapp/command/apply.rb +83 -0
  40. data/lib/dapp/deployment/dapp/command/common.rb +17 -0
  41. data/lib/dapp/deployment/dapp/command/minikube_setup.rb +393 -0
  42. data/lib/dapp/deployment/dapp/command/mrproper.rb +12 -0
  43. data/lib/dapp/deployment/dapp/command/secret_generate.rb +17 -0
  44. data/lib/dapp/deployment/dapp/command/secret_key_generate.rb +13 -0
  45. data/lib/dapp/deployment/dapp/dapp.rb +18 -0
  46. data/lib/dapp/deployment/dapp/dappfile.rb +23 -0
  47. data/lib/dapp/deployment/deployment.rb +46 -0
  48. data/lib/dapp/deployment/error/app.rb +7 -0
  49. data/lib/dapp/deployment/error/base.rb +7 -0
  50. data/lib/dapp/deployment/error/command.rb +7 -0
  51. data/lib/dapp/deployment/error/config.rb +7 -0
  52. data/lib/dapp/deployment/error/deployment.rb +7 -0
  53. data/lib/dapp/deployment/error/kubernetes.rb +7 -0
  54. data/lib/dapp/deployment/kube_app.rb +277 -0
  55. data/lib/dapp/deployment/kube_base.rb +97 -0
  56. data/lib/dapp/deployment/kube_deployment.rb +51 -0
  57. data/lib/dapp/deployment/kubernetes.rb +174 -0
  58. data/lib/dapp/deployment/kubernetes/error.rb +20 -0
  59. data/lib/dapp/deployment/mod/jobs.rb +37 -0
  60. data/lib/dapp/deployment/mod/namespace.rb +58 -0
  61. data/lib/dapp/deployment/mod/system_environments.rb +30 -0
  62. data/lib/dapp/deployment/secret.rb +93 -0
  63. data/lib/dapp/dimg/artifact.rb +1 -1
  64. data/lib/dapp/dimg/build/stage/artifact_default.rb +35 -23
  65. data/lib/dapp/dimg/build/stage/base.rb +1 -1
  66. data/lib/dapp/dimg/build/stage/before_setup.rb +0 -2
  67. data/lib/dapp/dimg/build/stage/build_artifact.rb +0 -2
  68. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +2 -2
  69. data/lib/dapp/dimg/build/stage/install/install.rb +0 -1
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +0 -1
  71. data/lib/dapp/dimg/cli/cli.rb +1 -1
  72. data/lib/dapp/dimg/cli/command/base.rb +14 -0
  73. data/lib/dapp/dimg/cli/{dimg.rb → command/dimg.rb} +5 -7
  74. data/lib/dapp/dimg/cli/{bp.rb → command/dimg/bp.rb} +3 -3
  75. data/lib/dapp/dimg/cli/{build.rb → command/dimg/build.rb} +3 -3
  76. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +3 -3
  77. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +4 -4
  78. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  79. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +3 -3
  80. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +3 -3
  81. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  82. data/lib/dapp/dimg/cli/{push.rb → command/dimg/push.rb} +5 -5
  83. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +8 -8
  84. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  85. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +3 -3
  86. data/lib/dapp/dimg/cli/{stages.rb → command/dimg/stages.rb} +3 -3
  87. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +6 -6
  88. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +5 -5
  89. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_local.rb +5 -5
  90. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/flush_repo.rb +6 -6
  91. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/pull.rb +6 -6
  92. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/push.rb +6 -6
  93. data/lib/dapp/dimg/cli/{tag.rb → command/dimg/tag.rb} +6 -6
  94. data/lib/dapp/dimg/config/config.rb +20 -0
  95. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +19 -0
  96. data/lib/dapp/dimg/config/directive/artifact_group.rb +45 -0
  97. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  98. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +149 -0
  99. data/lib/dapp/dimg/config/directive/dimg/validation.rb +128 -0
  100. data/lib/dapp/dimg/config/directive/dimg_group.rb +64 -0
  101. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  102. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  103. data/lib/dapp/dimg/config/directive/shell/dimg.rb +1 -1
  104. data/lib/dapp/dimg/dapp/command/bp.rb +4 -4
  105. data/lib/dapp/dimg/dapp/command/build.rb +2 -2
  106. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  107. data/lib/dapp/dimg/dapp/command/build_context/export.rb +1 -1
  108. data/lib/dapp/dimg/dapp/command/build_context/import.rb +1 -1
  109. data/lib/dapp/dimg/dapp/command/cleanup.rb +1 -1
  110. data/lib/dapp/dimg/dapp/command/common.rb +19 -4
  111. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  112. data/lib/dapp/dimg/dapp/command/mrproper.rb +3 -3
  113. data/lib/dapp/dimg/dapp/command/push.rb +6 -5
  114. data/lib/dapp/dimg/dapp/command/run.rb +1 -1
  115. data/lib/dapp/dimg/dapp/command/spush.rb +4 -3
  116. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  117. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +1 -1
  118. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +3 -3
  119. data/lib/dapp/dimg/dapp/command/stages/common.rb +4 -4
  120. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +1 -1
  121. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +1 -1
  122. data/lib/dapp/dimg/dapp/command/stages/pull.rb +5 -4
  123. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -3
  124. data/lib/dapp/dimg/dapp/command/tag.rb +3 -2
  125. data/lib/dapp/dimg/dapp/dapp.rb +33 -0
  126. data/lib/dapp/dimg/dapp/dappfile.rb +25 -0
  127. data/lib/dapp/dimg/dimg.rb +3 -3
  128. data/lib/dapp/dimg/dimg/path.rb +1 -1
  129. data/lib/dapp/dimg/dimg/stages.rb +1 -1
  130. data/lib/dapp/dimg/dimg/tags.rb +5 -5
  131. data/lib/dapp/dimg/docker_registry.rb +3 -7
  132. data/lib/dapp/dimg/git_artifact.rb +30 -14
  133. data/lib/dapp/dimg/git_repo/base.rb +13 -1
  134. data/lib/dapp/dimg/git_repo/own.rb +9 -1
  135. data/lib/dapp/dimg/image/docker.rb +9 -3
  136. data/lib/dapp/helper/cli.rb +3 -1
  137. data/lib/dapp/helper/net_status.rb +5 -1
  138. data/lib/dapp/helper/trivia.rb +1 -1
  139. data/lib/dapp/version.rb +2 -2
  140. metadata +84 -38
  141. data/lib/dapp/cli/base.rb +0 -63
  142. data/lib/dapp/config/base.rb +0 -54
  143. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  144. data/lib/dapp/dimg/cli/base.rb +0 -16
  145. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  146. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  147. data/lib/dapp/dimg/config/base.rb +0 -7
  148. data/lib/dapp/dimg/config/dimg.rb +0 -24
  149. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  150. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  151. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  152. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  153. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  154. data/lib/dapp/dimg/dapp/command.rb +0 -21
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Run
6
6
  def run(docker_options, command)
@@ -1,10 +1,11 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Spush
6
- def spush(repo)
7
- validate_repo_name(repo)
6
+ def spush
7
+ repo = option_repo
8
+ validate_repo_name!(repo)
8
9
  one_dimg!
9
10
  Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
10
11
  dimg.export!(repo, format: spush_format)
@@ -1,11 +1,11 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module StageImage
6
6
  def stage_image
7
7
  one_dimg!
8
- puts Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true).stage_image_name(cli_options[:stage])
8
+ puts Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true).stage_image_name(options[:stage])
9
9
  end
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module CleanupLocal
@@ -1,11 +1,11 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module CleanupRepo
7
- def stages_cleanup_repo(repo)
8
- lock_repo(repo) do
7
+ def stages_cleanup_repo
8
+ lock_repo(repo = option_repo) do
9
9
  raise Error::Command, code: :stages_cleanup_required_option unless stages_cleanup_option?
10
10
 
11
11
  registry = registry(repo)
@@ -1,13 +1,13 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module Common
7
7
  protected
8
8
 
9
9
  def registry(repo)
10
- validate_repo_name(repo)
10
+ validate_repo_name!(repo)
11
11
  ::Dapp::Dimg::DockerRegistry.new(repo)
12
12
  end
13
13
 
@@ -59,11 +59,11 @@ module Dapp
59
59
  end
60
60
 
61
61
  def proper_repo_cache?
62
- !!cli_options[:proper_repo_cache]
62
+ !!options[:proper_repo_cache]
63
63
  end
64
64
 
65
65
  def proper_git_commit?
66
- !!cli_options[:proper_git_commit]
66
+ !!options[:proper_git_commit]
67
67
  end
68
68
 
69
69
  def stages_cleanup_option?
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module FlushLocal
@@ -1,6 +1,6 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module FlushRepo
@@ -1,11 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module Pull
7
- def stages_pull(repo)
8
- validate_repo_name(repo)
7
+ def stages_pull
8
+ repo = option_repo
9
+ validate_repo_name!(repo)
9
10
  build_configs.each do |config|
10
11
  log_dimg_name_with_indent(config) do
11
12
  Dimg.new(config: config, dapp: self, ignore_git_fetch: true).tap do |dimg|
@@ -16,7 +17,7 @@ module Dapp
16
17
  end
17
18
 
18
19
  def pull_all_stages?
19
- !!cli_options[:pull_all_stages]
20
+ !!options[:pull_all_stages]
20
21
  end
21
22
  end
22
23
  end
@@ -1,11 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Stages
6
6
  module Push
7
- def stages_push(repo)
8
- validate_repo_name(repo)
7
+ def stages_push
8
+ repo = option_repo
9
+ validate_repo_name!(repo)
9
10
  build_configs.each do |config|
10
11
  log_dimg_name_with_indent(config) do
11
12
  Dimg.new(config: config, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |dimg|
@@ -1,11 +1,12 @@
1
1
  module Dapp
2
2
  module Dimg
3
- class Dapp
3
+ module Dapp
4
4
  module Command
5
5
  module Tag
6
6
  def tag(tag)
7
7
  one_dimg!
8
- raise Error::Command, code: :tag_command_incorrect_tag, data: { name: tag } unless ::Dapp::Dimg::Image::Docker.image_name?(tag)
8
+ validate_image_name!(tag)
9
+
9
10
  Dimg.new(config: build_configs.first, dapp: self, ignore_git_fetch: true, should_be_built: true).tap do |app|
10
11
  app.tag!(tag)
11
12
  end
@@ -0,0 +1,33 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Dapp
5
+ include Dappfile
6
+
7
+ include Command::Common
8
+ include Command::Run
9
+ include Command::Build
10
+ include Command::Bp
11
+ include Command::Push
12
+ include Command::Spush
13
+ include Command::Tag
14
+ include Command::List
15
+ include Command::Stages::CleanupLocal
16
+ include Command::Stages::CleanupRepo
17
+ include Command::Stages::FlushLocal
18
+ include Command::Stages::FlushRepo
19
+ include Command::Stages::Push
20
+ include Command::Stages::Pull
21
+ include Command::Stages::Common
22
+ include Command::Cleanup
23
+ include Command::Mrproper
24
+ include Command::StageImage
25
+ include Command::BuildContext::Import
26
+ include Command::BuildContext::Export
27
+ include Command::BuildContext::Common
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ ::Dapp::Dapp.send(:include, ::Dapp::Dimg::Dapp::Dapp)
@@ -0,0 +1,25 @@
1
+ module Dapp
2
+ module Dimg
3
+ module Dapp
4
+ module Dappfile
5
+ def build_configs
6
+ @build_configs ||= begin
7
+ config._dimg.select do |dimg|
8
+ dimgs_patterns.any? { |pattern| dimg._name.nil? || File.fnmatch(pattern, dimg._name) }
9
+ end.tap do |dimgs|
10
+ raise ::Dapp::Error::Dapp, code: :no_such_dimg, data: { dimgs_patterns: dimgs_patterns.join(', ') } if dimgs.empty?
11
+ end
12
+ end
13
+ end
14
+
15
+ def dimgs_patterns
16
+ @dimgs_patterns ||= begin
17
+ (options[:dimgs_patterns] || []).tap do |dimgs_patterns|
18
+ dimgs_patterns << '*' unless dimgs_patterns.any?
19
+ end
20
+ end
21
+ end
22
+ end # Dappfile
23
+ end # Dapp
24
+ end # Dimg
25
+ end # Dapp
@@ -130,7 +130,7 @@ module Dapp
130
130
  end
131
131
 
132
132
  def stage_image_name(stage_name)
133
- stages.find { |stage| stage.send(:name) == stage_name }.image.name
133
+ stages.find { |stage| stage.name == stage_name }.image.name
134
134
  end
135
135
 
136
136
  def builder
@@ -150,7 +150,7 @@ module Dapp
150
150
  end
151
151
 
152
152
  def dev_mode?
153
- config._dev_mode || dapp.dev_mode?
153
+ dapp.dev_mode?
154
154
  end
155
155
 
156
156
  def build_cache_version
@@ -168,7 +168,7 @@ module Dapp
168
168
  end
169
169
 
170
170
  def stage_should_be_introspected?(name)
171
- dapp.cli_options[:introspect_stage] == name
171
+ dapp.options[:introspect_stage] == name
172
172
  end
173
173
 
174
174
  protected
@@ -7,7 +7,7 @@ module Dapp
7
7
  end
8
8
 
9
9
  def tmp_path(*path)
10
- @tmp_path ||= Dir.mktmpdir('dapp-', dapp.cli_options[:tmp_dir_prefix] || '/tmp')
10
+ @tmp_path ||= Dir.mktmpdir('dapp-', dapp.options[:tmp_dir_prefix] || '/tmp')
11
11
  make_path(@tmp_path, *path).expand_path.tap { |p| p.parent.mkpath }
12
12
  end
13
13
 
@@ -3,7 +3,7 @@ module Dapp
3
3
  class Dimg
4
4
  module Stages
5
5
  def signature
6
- last_stage.send(:signature)
6
+ last_stage.signature
7
7
  end
8
8
 
9
9
  def stage_by_name(name)
@@ -15,23 +15,23 @@ module Dapp
15
15
  end
16
16
 
17
17
  def simple_tags
18
- dapp.cli_options[:tag]
18
+ dapp.options[:tag]
19
19
  end
20
20
 
21
21
  def branch_tags
22
- return [] unless dapp.cli_options[:tag_branch]
22
+ return [] unless dapp.options[:tag_branch]
23
23
  raise Error::Dimg, code: :git_branch_without_name if (branch = git_repo.branch) == 'HEAD'
24
24
  [branch]
25
25
  end
26
26
 
27
27
  def commit_tags
28
- return [] unless dapp.cli_options[:tag_commit]
28
+ return [] unless dapp.options[:tag_commit]
29
29
  commit = git_repo.latest_commit
30
30
  [commit]
31
31
  end
32
32
 
33
33
  def build_tags
34
- return [] unless dapp.cli_options[:tag_build_id]
34
+ return [] unless dapp.options[:tag_build_id]
35
35
 
36
36
  if ENV['GITLAB_CI']
37
37
  build_id = ENV['CI_BUILD_ID']
@@ -45,7 +45,7 @@ module Dapp
45
45
  end
46
46
 
47
47
  def ci_tags
48
- return [] unless dapp.cli_options[:tag_ci]
48
+ return [] unless dapp.options[:tag_ci]
49
49
 
50
50
  if ENV['GITLAB_CI']
51
51
  branch = ENV['CI_BUILD_REF_NAME']
@@ -15,13 +15,9 @@ module Dapp
15
15
  end
16
16
 
17
17
  def self.repo_name_format
18
- separator = '[_.]|__|[-]*'
19
- alpha_numeric = '[[:alnum:]]*'
20
- component = "#{alpha_numeric}[#{separator}#{alpha_numeric}]*"
21
- port_number = '[[:digit:]]+'
22
- hostcomponent = '[[:alnum:]_-]*[[:alnum:]]'
23
- hostname = "#{hostcomponent}[\\.#{hostcomponent}]*(?<port>:#{port_number})?"
24
- "(?<hostname>#{hostname}/)?(?<repo_suffix>#{component}[/#{component}]*)"
18
+ rpart = '[a-z0-9]+(([_.]|__|-+)[a-z0-9]+)*'
19
+ hpart = '(?!-)[a-z0-9-]+(?<!-)'
20
+ "(?<hostname>#{hpart}(\\.#{hpart})*(?<port>:[0-9]+)?\/)?(?<repo_suffix>#{rpart}(\/#{rpart})*)"
25
21
  end
26
22
 
27
23
  def self.repo_name?(name)
@@ -12,7 +12,7 @@ module Dapp
12
12
  @repo = repo
13
13
  @name = name
14
14
 
15
- @branch = branch || repo.dimg.dapp.cli_options[:git_artifact_branch] || repo.branch
15
+ @branch = branch || repo.dimg.dapp.options[:git_artifact_branch] || repo.branch
16
16
  @commit = commit
17
17
 
18
18
  @to = to
@@ -52,15 +52,27 @@ module Dapp
52
52
  patch_command(stage.prev_g_a_stage.layer_commit(self), nil)
53
53
  end
54
54
 
55
- def stage_dependencies_checksums(stage, from_commit = nil, to_commit = latest_commit)
55
+ def stage_dependencies_checksum(stage)
56
56
  return [] if (stage_dependencies = stages_dependencies[stage.name]).empty?
57
57
 
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(':::')
58
+ paths = (include_paths(true) + base_paths(stage_dependencies, true)).uniq
59
+
60
+ to_commit = if repo.is_a? GitRepo::Own and repo.dimg.dev_mode?
61
+ nil
62
+ else
63
+ latest_commit
63
64
  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
+ }
64
76
  end
65
77
 
66
78
  def patch_size(from, to)
@@ -85,7 +97,7 @@ module Dapp
85
97
  end
86
98
 
87
99
  def latest_commit
88
- @latest_commit ||= commit || repo.latest_commit(branch)
100
+ @latest_commit ||= (commit || repo.latest_commit(branch))
89
101
  end
90
102
 
91
103
  def paramshash
@@ -128,8 +140,12 @@ module Dapp
128
140
  Gem::Package::TarWriter.new(f) do |tar|
129
141
  diff_patches(nil, to_commit).each do |patch|
130
142
  entry = patch.delta.new_file
131
- tar.add_file slice_cwd(entry[:path]), entry[:mode] do |tf|
132
- 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
133
149
  end
134
150
  end
135
151
  end
@@ -213,10 +229,10 @@ module Dapp
213
229
  end
214
230
 
215
231
  def diff_patches(from, to, paths: include_paths_or_cwd)
216
- (@diff_patches ||= {})[[from, to, paths]] = repo.patches(from, to,
217
- paths: paths,
218
- exclude_paths: exclude_paths(true),
219
- force_text: true)
232
+ (@diff_patches ||= {})[[from, to, paths]] ||= repo.patches(from, to,
233
+ paths: paths,
234
+ exclude_paths: exclude_paths(true),
235
+ force_text: true)
220
236
  end
221
237
 
222
238
  def include_paths_or_cwd
@@ -15,6 +15,16 @@ 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
+
18
28
  def patches(from, to, exclude_paths: [], **kwargs)
19
29
  diff(from, to, **kwargs).patches.select do |patch|
20
30
  !exclude_paths.any? { |p| check_path?(patch.delta.new_file[:path], p) }
@@ -22,7 +32,9 @@ module Dapp
22
32
  end
23
33
 
24
34
  def diff(from, to, **kwargs)
25
- if from.nil?
35
+ if to.nil?
36
+ raise "Workdir diff not supported for #{self.class}"
37
+ elsif from.nil?
26
38
  Rugged::Tree.diff(git, nil, to, **kwargs)
27
39
  else
28
40
  lookup_commit(from).diff(lookup_commit(to), **kwargs)
@@ -16,8 +16,16 @@ 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
+
19
22
  def diff(from, to, **kwargs)
20
- if to.nil?
23
+ if from.nil? and to.nil?
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?
21
29
  git.lookup(from).diff_workdir(**kwargs)
22
30
  else
23
31
  super