dapp 0.29.2 → 0.30.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 +5 -5
- data/bin/dapp +1 -23
- data/config/en/net_status.yml +5 -4
- data/lib/dapp.rb +1 -1
- data/lib/dapp/dapp/sentry.rb +11 -8
- data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +33 -21
- data/lib/dapp/dimg/dimg/git_artifact.rb +2 -5
- data/lib/dapp/dimg/git_artifact.rb +41 -23
- data/lib/dapp/dimg/git_repo/base.rb +19 -39
- data/lib/dapp/dimg/git_repo/local.rb +15 -14
- data/lib/dapp/dimg/git_repo/remote.rb +32 -19
- data/lib/dapp/kube/cli/command/kube/deploy.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/dismiss.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/lint.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/render.rb +4 -0
- data/lib/dapp/kube/cli/command/kube/value_get.rb +4 -0
- data/lib/dapp/kube/dapp/command/common.rb +21 -18
- data/lib/dapp/kube/dapp/command/minikube_setup.rb +6 -2
- data/lib/dapp/kube/helm/release.rb +1 -1
- data/lib/dapp/kube/helm/values.rb +3 -3
- data/lib/dapp/kube/kubernetes/client.rb +21 -90
- data/lib/dapp/kube/kubernetes/config.rb +129 -0
- data/lib/dapp/version.rb +1 -1
- metadata +6 -44
- data/lib/dapp/deployment/app.rb +0 -120
- data/lib/dapp/deployment/cli/cli.rb +0 -1
- data/lib/dapp/deployment/cli/command/base.rb +0 -14
- data/lib/dapp/deployment/cli/command/deployment.rb +0 -18
- data/lib/dapp/deployment/cli/command/deployment/apply.rb +0 -26
- data/lib/dapp/deployment/cli/command/deployment/mrproper.rb +0 -13
- data/lib/dapp/deployment/config/config.rb +0 -46
- data/lib/dapp/deployment/config/directive/app.rb +0 -28
- data/lib/dapp/deployment/config/directive/app/instance_methods.rb +0 -51
- data/lib/dapp/deployment/config/directive/base.rb +0 -13
- data/lib/dapp/deployment/config/directive/deployment.rb +0 -11
- data/lib/dapp/deployment/config/directive/expose.rb +0 -68
- data/lib/dapp/deployment/config/directive/group.rb +0 -27
- data/lib/dapp/deployment/config/directive/job.rb +0 -28
- data/lib/dapp/deployment/config/directive/mod/group.rb +0 -22
- data/lib/dapp/deployment/config/directive/mod/jobs.rb +0 -26
- data/lib/dapp/deployment/config/directive/namespace.rb +0 -26
- data/lib/dapp/deployment/config/directive/namespace/instance_methods.rb +0 -37
- data/lib/dapp/deployment/core_ext/hash.rb +0 -19
- data/lib/dapp/deployment/dapp/command/apply.rb +0 -71
- data/lib/dapp/deployment/dapp/command/common.rb +0 -17
- data/lib/dapp/deployment/dapp/command/mrproper.rb +0 -12
- data/lib/dapp/deployment/dapp/dapp.rb +0 -15
- data/lib/dapp/deployment/dapp/dappfile.rb +0 -23
- data/lib/dapp/deployment/deployment.rb +0 -46
- data/lib/dapp/deployment/error/app.rb +0 -7
- data/lib/dapp/deployment/error/default.rb +0 -7
- data/lib/dapp/deployment/error/deployment.rb +0 -7
- data/lib/dapp/deployment/error/kubernetes.rb +0 -7
- data/lib/dapp/deployment/kube_app.rb +0 -146
- data/lib/dapp/deployment/kube_base.rb +0 -97
- data/lib/dapp/deployment/kube_deployment.rb +0 -51
- data/lib/dapp/deployment/kubernetes.rb +0 -174
- data/lib/dapp/deployment/kubernetes/error.rb +0 -20
- data/lib/dapp/deployment/mod/jobs.rb +0 -37
- data/lib/dapp/deployment/mod/namespace.rb +0 -58
- data/lib/dapp/deployment/mod/system_environments.rb +0 -30
- data/lib/dapp/deployment/secret.rb +0 -93
- data/lib/dapp/kube/error/kubernetes.rb +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 259d9afe89f767678121d96c8ef2b64c1521207c
|
4
|
+
data.tar.gz: 667396adfa0c4f566621b4ed577636e1e82df25a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 434fe4c12cdc155d0ce888cce71948ac9fdf29daafcc8327d64d7649b78df948205ea76a2ee777488e1d12f32273178f5e7f03a64671cb5727b3bb207dd91cef
|
7
|
+
data.tar.gz: 97a9dc7ae4e16c42cb1e9002e8eff1dc90d572a013288638b2fc61a124862d37b5089f4f0d7afec841fdfa0413aba323033922b5ba54e8f002bda9cdcd030ed7
|
data/bin/dapp
CHANGED
@@ -10,29 +10,7 @@ Thread.abort_on_exception = true
|
|
10
10
|
begin
|
11
11
|
begin
|
12
12
|
begin
|
13
|
-
|
14
|
-
Dapp::CLI.new.run
|
15
|
-
ensure
|
16
|
-
if Time.now.to_date < Date.parse("2019-11-01")
|
17
|
-
STDERR.puts
|
18
|
-
STDERR.puts ::Paint["###################################################################", :red, :bold]
|
19
|
-
STDERR.puts ::Paint["### DEPRECATION WARNING! ###", :red, :bold]
|
20
|
-
STDERR.puts ::Paint["### Dapp will be deprecated for use starting with 01.11.2019! ###", :red, :bold]
|
21
|
-
STDERR.puts ::Paint["### Please port your project to werf: ###", :red, :bold]
|
22
|
-
STDERR.puts ::Paint["### https://werf.io ###", :red, :bold]
|
23
|
-
STDERR.puts ::Paint["###################################################################", :red, :bold]
|
24
|
-
STDERR.puts
|
25
|
-
else
|
26
|
-
STDERR.puts
|
27
|
-
STDERR.puts ::Paint["######################################################################", :red, :bold]
|
28
|
-
STDERR.puts ::Paint["### DEPRECATION WARNING! ###", :red, :bold]
|
29
|
-
STDERR.puts ::Paint["### Dapp is deprecated for use and will not receive any support! ###", :red, :bold]
|
30
|
-
STDERR.puts ::Paint["### Please port your project to werf: ###", :red, :bold]
|
31
|
-
STDERR.puts ::Paint["### https://werf.io ###", :red, :bold]
|
32
|
-
STDERR.puts ::Paint["######################################################################", :red, :bold]
|
33
|
-
STDERR.puts
|
34
|
-
end
|
35
|
-
end
|
13
|
+
Dapp::CLI.new.run
|
36
14
|
rescue Dapp::Error::Base => e
|
37
15
|
unless (message = Dapp::Helper::NetStatus.before_error_message(e)).empty?
|
38
16
|
$stderr.puts(message)
|
data/config/en/net_status.yml
CHANGED
@@ -136,10 +136,11 @@ en:
|
|
136
136
|
namespace_not_found: "App `%{name}`: namespace `%{namespace}` not found!"
|
137
137
|
namespace_not_defined: "App `%{name}`: namespace not defined!"
|
138
138
|
kubernetes:
|
139
|
-
config_not_found: "Kube config
|
140
|
-
|
141
|
-
|
142
|
-
|
139
|
+
config_not_found: "Kube config not found in: KUBECONFIG, kubectl (through `kubectl config view`), `~/.kube/config`"
|
140
|
+
config_file_not_found: "Kube config file `%{config_path}` not found!"
|
141
|
+
user_config_not_found: "User's `%{user}` config is not found in config `%{config_path}`"
|
142
|
+
cluster_config_not_found: "Cluster's `%{cluster}` config is not found in config `%{config_path}`"
|
143
|
+
context_config_not_found: "Context `%{context_name}` is not found in config `%{config_path}`"
|
143
144
|
server_connection_refused: "Kube server `%{url}` connection refused: %{error}"
|
144
145
|
server_error: "Kube respond with server error code %{response_http_status}, request parameters: `%{request_parameters}`, response: `%{response_raw_body}`"
|
145
146
|
container_stuck: "Pod's `%{pod_name}` container `%{container_name}` stuck in %{state} state: %{state_reason}: %{state_message}"
|
data/lib/dapp.rb
CHANGED
@@ -83,10 +83,10 @@ require 'dapp/dapp/command/slug'
|
|
83
83
|
require 'dapp/dapp'
|
84
84
|
require 'dapp/kube'
|
85
85
|
require 'dapp/kube/error/default'
|
86
|
-
require 'dapp/kube/error/kubernetes'
|
87
86
|
require 'dapp/kube/secret'
|
88
87
|
require 'dapp/kube/kubernetes'
|
89
88
|
require 'dapp/kube/kubernetes/error'
|
89
|
+
require 'dapp/kube/kubernetes/config'
|
90
90
|
require 'dapp/kube/kubernetes/client'
|
91
91
|
require 'dapp/kube/kubernetes/client/error'
|
92
92
|
require 'dapp/kube/kubernetes/client/resource/base'
|
data/lib/dapp/dapp/sentry.rb
CHANGED
@@ -56,13 +56,16 @@ module Dapp
|
|
56
56
|
},
|
57
57
|
}.tap {|extra|
|
58
58
|
if git_own_repo_exist?
|
59
|
-
extra["git"] = {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
59
|
+
extra["git"] = {}.tap do |extra_git|
|
60
|
+
if git_own_repo.tracked_remote_repository?
|
61
|
+
extra_git["remote_origin_url"] = git_own_repo.remote_origin_url, # may contain https token
|
62
|
+
extra_git["name"] = self.git_url_to_name(git_own_repo.remote_origin_url)
|
63
|
+
end
|
64
|
+
|
65
|
+
extra_git["path"] = git_own_repo.path
|
66
|
+
extra_git["workdir_path"] = git_own_repo.workdir_path
|
67
|
+
extra_git["latest_commit"] = git_own_repo.latest_commit unless git_own_repo.empty?
|
68
|
+
end
|
66
69
|
end
|
67
70
|
|
68
71
|
extra["ci-env"] = {"CI" => ENV["CI"]}
|
@@ -80,7 +83,7 @@ module Dapp
|
|
80
83
|
"dapp-build-cache-version" => ::Dapp::BUILD_CACHE_VERSION,
|
81
84
|
"dapp-command" => self.options[:dapp_command],
|
82
85
|
}.tap {|tags|
|
83
|
-
if git_own_repo_exist?
|
86
|
+
if git_own_repo_exist? && git_own_repo.tracked_remote_repository?
|
84
87
|
tags["git-host"] = self.get_host_from_git_url(git_own_repo.remote_origin_url)
|
85
88
|
|
86
89
|
git_name = self.git_url_to_name(git_own_repo.remote_origin_url)
|
@@ -9,6 +9,12 @@ module Dapp
|
|
9
9
|
def cleanup_repo
|
10
10
|
lock_repo(repo = option_repo) do
|
11
11
|
log_step_with_indent(repo) do
|
12
|
+
log_step_with_indent("Searching for images being used in kubernetes clusters in one of the kube-config contexts") do
|
13
|
+
deployed_docker_images.each do |deployed_img|
|
14
|
+
log(deployed_img)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
registry = dimg_registry(repo)
|
13
19
|
|
14
20
|
if git_own_repo_exist?
|
@@ -29,18 +35,21 @@ module Dapp
|
|
29
35
|
{}.tap do |detailed_dimgs_images_by_scheme|
|
30
36
|
tagging_schemes.each { |scheme| detailed_dimgs_images_by_scheme[scheme] = [] }
|
31
37
|
repo_detailed_dimgs_images(registry).each do |image|
|
32
|
-
|
38
|
+
image_repository = [option_repo, image[:dimg]].compact.join('/')
|
39
|
+
image_name = [image_repository, image[:tag]].join(':')
|
40
|
+
|
41
|
+
should_be_ignored = deployed_docker_images.include?(image_name)
|
42
|
+
|
43
|
+
if should_be_ignored
|
44
|
+
log "Keep in repo image that is being used in kubernetes: #{image_name}"
|
45
|
+
next
|
46
|
+
end
|
47
|
+
|
33
48
|
(detailed_dimgs_images_by_scheme[image[:labels]['dapp-tag-scheme']] ||= []) << image
|
34
49
|
end
|
35
50
|
end
|
36
51
|
end
|
37
52
|
|
38
|
-
def repo_dimg_image_should_be_ignored?(image)
|
39
|
-
image_repository = [option_repo, image[:dimg]].compact.join('/')
|
40
|
-
image_name = [image_repository, image[:tag]].join(':')
|
41
|
-
!deployed_docker_images.include?(image_name)
|
42
|
-
end
|
43
|
-
|
44
53
|
def cleanup_repo_by_nonexistent_git_primitive(registry, detailed_dimgs_images_by_scheme)
|
45
54
|
%w(git_tag git_branch git_commit).each do |scheme|
|
46
55
|
cleanup_repo_by_nonexistent_git_base(detailed_dimgs_images_by_scheme, scheme) do |detailed_dimg_image|
|
@@ -117,18 +126,23 @@ module Dapp
|
|
117
126
|
end
|
118
127
|
|
119
128
|
def deployed_docker_images
|
129
|
+
@deployed_docker_images ||= search_deployed_docker_images
|
130
|
+
end
|
131
|
+
|
132
|
+
def search_deployed_docker_images
|
120
133
|
return [] if without_kube?
|
121
134
|
|
122
|
-
|
123
|
-
|
124
|
-
config_file = kube.kube_config_path
|
125
|
-
unless File.exist?(config_file)
|
126
|
-
return []
|
127
|
-
end
|
128
|
-
end
|
135
|
+
config = ::Dapp::Kube::Kubernetes::Config.new_auto_if_available
|
136
|
+
return [] if config.nil?
|
129
137
|
|
130
|
-
|
138
|
+
config.context_names.
|
139
|
+
map {|context_name|
|
140
|
+
client = ::Dapp::Kube::Kubernetes::Client.new(config, context_name, "default")
|
141
|
+
search_deployed_docker_images_from_kube(client)
|
142
|
+
}.flatten.sort.uniq
|
143
|
+
end
|
131
144
|
|
145
|
+
def search_deployed_docker_images_from_kube(client)
|
132
146
|
namespaces = []
|
133
147
|
# check connectivity for 2 seconds
|
134
148
|
begin
|
@@ -138,7 +152,7 @@ module Dapp
|
|
138
152
|
end
|
139
153
|
|
140
154
|
# get images from containers from pods from all namespaces.
|
141
|
-
|
155
|
+
namespaces['items'].map do |item|
|
142
156
|
item['metadata']['name']
|
143
157
|
end.map do |ns|
|
144
158
|
[].tap do |arr|
|
@@ -152,9 +166,9 @@ module Dapp
|
|
152
166
|
arr << replicationcontroller_images(client)
|
153
167
|
end
|
154
168
|
end
|
155
|
-
end.flatten.
|
156
|
-
|
157
|
-
end
|
169
|
+
end.flatten.select do |img|
|
170
|
+
img.start_with? option_repo
|
171
|
+
end.sort.uniq
|
158
172
|
end
|
159
173
|
|
160
174
|
# pod items[] spec containers[] image
|
@@ -206,8 +220,6 @@ module Dapp
|
|
206
220
|
end
|
207
221
|
end
|
208
222
|
|
209
|
-
|
210
|
-
|
211
223
|
def without_kube?
|
212
224
|
!!options[:without_kube]
|
213
225
|
end
|
@@ -19,10 +19,7 @@ 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.get_or_create(dapp, ga_config._name,
|
23
|
-
url: ga_config._url,
|
24
|
-
branch: ga_config._branch,
|
25
|
-
ignore_git_fetch: ignore_git_fetch)
|
22
|
+
repo = GitRepo::Remote.get_or_create(dapp, ga_config._name, url: ga_config._url, ignore_git_fetch: ignore_git_fetch)
|
26
23
|
artifacts.concat(generate_git_artifacts(repo, **ga_config._artifact_options)) unless repo.empty?
|
27
24
|
end
|
28
25
|
end
|
@@ -30,7 +27,7 @@ module Dapp
|
|
30
27
|
|
31
28
|
def generate_git_artifacts(repo, **git_artifact_options)
|
32
29
|
[].tap do |artifacts|
|
33
|
-
artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, self, **git_artifact_options))
|
30
|
+
artifacts << (artifact = ::Dapp::Dimg::GitArtifact.new(repo, self, ignore_signature_auto_calculation: ignore_signature_auto_calculation, **git_artifact_options))
|
34
31
|
if ENV['DAPP_DISABLE_GIT_SUBMODULES']
|
35
32
|
artifacts
|
36
33
|
else
|
@@ -14,11 +14,13 @@ module Dapp
|
|
14
14
|
# rubocop:disable Metrics/ParameterLists
|
15
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
|
-
stages_dependencies: {})
|
17
|
+
stages_dependencies: {}, ignore_signature_auto_calculation: false)
|
18
18
|
@repo = repo
|
19
19
|
@dimg = dimg
|
20
20
|
@name = name
|
21
21
|
|
22
|
+
@ignore_signature_auto_calculation = ignore_signature_auto_calculation
|
23
|
+
|
22
24
|
@branch = branch || repo.dapp.options[:git_artifact_branch] || repo.branch
|
23
25
|
@commit = commit
|
24
26
|
|
@@ -70,10 +72,7 @@ module Dapp
|
|
70
72
|
embedded_rel_path = embedded_params[:path]
|
71
73
|
embedded_repo = begin
|
72
74
|
if embedded_params[:type] == :remote
|
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 )
|
75
|
+
GitRepo::Remote.get_or_create(repo.dapp, embedded_rel_path, url: embedded_params[:url], ignore_git_fetch: dimg.ignore_git_fetch)
|
77
76
|
elsif embedded_params[:type] == :local
|
78
77
|
embedded_path = File.join(repo.workdir_path, embedded_params[:path])
|
79
78
|
GitRepo::Local.new(repo.dapp, embedded_rel_path, embedded_path)
|
@@ -104,8 +103,11 @@ module Dapp
|
|
104
103
|
.to_h
|
105
104
|
end
|
106
105
|
options[:branch] = embedded_params[:branch]
|
106
|
+
options[:commit] = embedded_params[:commit]
|
107
107
|
options[:owner] = owner
|
108
108
|
options[:group] = group
|
109
|
+
|
110
|
+
options[:ignore_signature_auto_calculation]= ignore_signature_auto_calculation
|
109
111
|
end
|
110
112
|
end
|
111
113
|
|
@@ -288,7 +290,11 @@ module Dapp
|
|
288
290
|
end
|
289
291
|
|
290
292
|
def latest_commit
|
291
|
-
@latest_commit ||=
|
293
|
+
@latest_commit ||= begin
|
294
|
+
(commit || repo.latest_commit(branch)).tap do |c|
|
295
|
+
repo.dapp.log_info("Repository `#{repo.name}`: latest commit `#{c}` to `#{to}`") unless ignore_signature_auto_calculation
|
296
|
+
end
|
297
|
+
end
|
292
298
|
end
|
293
299
|
|
294
300
|
def paramshash
|
@@ -325,6 +331,7 @@ module Dapp
|
|
325
331
|
attr_reader :owner
|
326
332
|
attr_reader :group
|
327
333
|
attr_reader :stages_dependencies
|
334
|
+
attr_reader :ignore_signature_auto_calculation
|
328
335
|
|
329
336
|
def sudo
|
330
337
|
repo.dapp.sudo_command(owner: owner, group: group)
|
@@ -409,33 +416,40 @@ module Dapp
|
|
409
416
|
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
410
417
|
def change_patch_new_file_path(stage, patch)
|
411
418
|
patch.to_s.lines.tap do |lines|
|
419
|
+
prepare_native_path = proc do |path_with_cwd|
|
420
|
+
case archive_type(stage)
|
421
|
+
when :directory
|
422
|
+
path_with_cwd.sub(cwd, '')
|
423
|
+
when :file
|
424
|
+
File.basename(to)
|
425
|
+
else
|
426
|
+
raise
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
412
430
|
modify_patch_line = proc do |line_number, path_char|
|
413
431
|
action_part, path_part = lines[line_number].strip.split(' ', 2)
|
414
432
|
if (path_with_cwd = path_part.partition("#{path_char}/").last).start_with?(cwd)
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
else
|
421
|
-
raise
|
422
|
-
end
|
423
|
-
|
424
|
-
if native_path
|
425
|
-
expected_path = File.join(path_char, native_path)
|
426
|
-
lines[line_number] = [action_part, expected_path].join(' ') + "\n"
|
433
|
+
prepare_native_path.call(path_with_cwd).tap do |native_path|
|
434
|
+
if native_path
|
435
|
+
expected_path = File.join(path_char, native_path)
|
436
|
+
lines[line_number] = [action_part, expected_path].join(' ') + "\n"
|
437
|
+
end
|
427
438
|
end
|
428
|
-
|
429
|
-
native_path
|
430
439
|
end
|
431
440
|
end
|
432
441
|
|
442
|
+
modify_patch_first_line = proc do
|
443
|
+
old_file_path = prepare_native_path.call(patch.delta.old_file[:path])
|
444
|
+
new_file_path = prepare_native_path.call(patch.delta.new_file[:path])
|
445
|
+
lines[0] = ['diff --git', File.join('a', old_file_path), File.join('b', new_file_path)].join(' ') + "\n"
|
446
|
+
end
|
447
|
+
|
433
448
|
modify_patch = proc do |*modify_patch_line_args|
|
434
449
|
native_paths = modify_patch_line_args.map { |args| modify_patch_line.call(*args) }
|
435
450
|
unless (native_paths = native_paths.compact.uniq).empty?
|
436
451
|
raise Error::Build, code: :unsupported_patch_format, data: { patch: patch.to_s } unless native_paths.one?
|
437
|
-
|
438
|
-
lines[0] = ['diff --git', File.join('a', native_path), File.join('b', native_path)].join(' ') + "\n"
|
452
|
+
modify_patch_first_line.call
|
439
453
|
end
|
440
454
|
end
|
441
455
|
|
@@ -444,7 +458,11 @@ module Dapp
|
|
444
458
|
when patch.delta.added? then modify_patch.call([4, 'b'])
|
445
459
|
when patch.delta.modified?
|
446
460
|
if patch_file_mode_changed?(patch)
|
447
|
-
|
461
|
+
if patch.changes.zero?
|
462
|
+
modify_patch_first_line.call
|
463
|
+
else
|
464
|
+
modify_patch.call([4, 'a'], [5, 'b'])
|
465
|
+
end
|
448
466
|
else
|
449
467
|
modify_patch.call([2, 'a'], [3, 'b'])
|
450
468
|
end
|
@@ -49,50 +49,26 @@ module Dapp
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def submodules_params(commit, paths: [], exclude_paths: [])
|
52
|
-
raise "Workdir not supported for
|
52
|
+
raise "Workdir not supported for `#{self.class}` repository" if commit.nil?
|
53
|
+
submodules(commit, paths: paths, exclude_paths: exclude_paths).map(&method(:submodule_params))
|
54
|
+
end
|
53
55
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
56
|
+
def submodule_params(submodule)
|
57
|
+
{}.tap do |params|
|
58
|
+
params[:path] = submodule.path
|
59
|
+
params[:url] = submodule_url(submodule.url)
|
60
|
+
params[:type] = url_protocol(params[:url]) == :noname ? :local : :remote
|
61
|
+
params[:commit] = submodule.head_oid
|
58
62
|
end
|
59
|
-
|
60
|
-
submodules_params_base(lookup_object(entry[:oid]).content, paths: paths, exclude_paths: exclude_paths)
|
61
63
|
end
|
62
64
|
|
63
|
-
def
|
64
|
-
|
65
|
-
.select { |
|
66
|
-
.map do |_, params|
|
67
|
-
params = params.symbolize_keys
|
68
|
-
params[:branch] = params[:branch].to_s if params.key?(:branch)
|
69
|
-
params[:url] = submodule_url(params[:url])
|
70
|
-
params[:type] = url_protocol(params[:url]) == :noname ? :local : :remote
|
71
|
-
params
|
72
|
-
end
|
65
|
+
def submodules(commit, paths: [], exclude_paths: [])
|
66
|
+
Rugged::SubmoduleCollection.new(submodules_git(commit))
|
67
|
+
.select { |s| !ignore_directory?(s.path, paths: paths, exclude_paths: exclude_paths) }
|
73
68
|
end
|
74
69
|
|
75
|
-
def
|
76
|
-
|
77
|
-
raise Error::Rugged, code: :incorrect_gitmodules_file, data: { name: self.name,
|
78
|
-
error: error_message,
|
79
|
-
content: gitsubmodule_content.strip }
|
80
|
-
end
|
81
|
-
|
82
|
-
begin
|
83
|
-
IniFile.new.parse(gitsubmodule_content).to_h.tap do |submodules_params|
|
84
|
-
submodules_params.each do |name, params|
|
85
|
-
%w(path url).each do |field|
|
86
|
-
next unless params[field].nil? || params[field].empty?
|
87
|
-
raise_error.call("field `#{field}` required (#{name})")
|
88
|
-
end
|
89
|
-
|
90
|
-
raise_error.call("path should be relative (#{name})") unless Pathname(params['path']).relative?
|
91
|
-
end
|
92
|
-
end
|
93
|
-
rescue IniFile::Error => e
|
94
|
-
raise_error.call(e.message)
|
95
|
-
end
|
70
|
+
def submodules_git(_)
|
71
|
+
git
|
96
72
|
end
|
97
73
|
|
98
74
|
def submodule_url(gitsubmodule_url)
|
@@ -178,7 +154,7 @@ module Dapp
|
|
178
154
|
.select { |b| b.start_with?('origin/') }
|
179
155
|
.map { |b| b.reverse.chomp('origin/'.reverse).reverse }
|
180
156
|
end
|
181
|
-
|
157
|
+
|
182
158
|
def find_commit_id_by_message(regex)
|
183
159
|
walker.each do |commit|
|
184
160
|
msg = commit.message.encode('UTF-8', invalid: :replace, undef: :replace)
|
@@ -204,6 +180,10 @@ module Dapp
|
|
204
180
|
git.empty?
|
205
181
|
end
|
206
182
|
|
183
|
+
def tracked_remote_repository?
|
184
|
+
!git.remotes.to_a.empty?
|
185
|
+
end
|
186
|
+
|
207
187
|
protected
|
208
188
|
|
209
189
|
def git(**kwargs)
|
@@ -26,22 +26,20 @@ module Dapp
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
# NOTICE: Параметры {from: nil, to: nil} можно указать только для Own repo.
|
30
|
-
# NOTICE: Для Remote repo такой вызов не имеет смысла и это ошибка пользователя класса Remote.
|
31
|
-
|
32
29
|
def submodules_params(commit, paths: [], exclude_paths: [])
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
30
|
+
submodules(commit, paths: paths, exclude_paths: exclude_paths).map do |submodule|
|
31
|
+
next if commit.nil? && !submodule.in_config?
|
32
|
+
submodule_params(submodule).tap do |params|
|
33
|
+
if commit.nil?
|
34
|
+
submodule_path = File.join(workdir_path, params[:path])
|
35
|
+
params[:commit] = submodule.workdir_oid || submodule.head_oid
|
36
|
+
if git_repo_exist?(submodule_path)
|
37
|
+
dapp.log_info("Using local submodule `#{params[:path]}`!")
|
38
|
+
params[:type] = :local
|
39
|
+
end
|
40
|
+
end
|
43
41
|
end
|
44
|
-
end
|
42
|
+
end.compact
|
45
43
|
end
|
46
44
|
|
47
45
|
def ignore_patch?(patch, paths: [], exclude_paths: [])
|
@@ -58,6 +56,9 @@ module Dapp
|
|
58
56
|
mode == 0o040000
|
59
57
|
end
|
60
58
|
|
59
|
+
# NOTICE: Параметры {from: nil, to: nil} можно указать только для Own repo.
|
60
|
+
# NOTICE: Для Remote repo такой вызов не имеет смысла и это ошибка пользователя класса Remote.
|
61
|
+
|
61
62
|
def diff(from, to, **kwargs)
|
62
63
|
if from.nil? and to.nil?
|
63
64
|
mid_commit = latest_commit
|