dapp 0.10.2 → 0.36.24

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 (287) hide show
  1. checksums.yaml +5 -5
  2. data/bin/dapp +77 -15
  3. data/config/en/common.yml +20 -11
  4. data/config/en/net_status.yml +108 -27
  5. data/lib/dapp/cli/cli.rb +1 -0
  6. data/lib/dapp/cli/command/base.rb +111 -0
  7. data/lib/dapp/cli/command/sample/base.rb +28 -0
  8. data/lib/dapp/cli/command/sample/create.rb +24 -0
  9. data/lib/dapp/cli/command/sample/list.rb +25 -0
  10. data/lib/dapp/cli/command/sample.rb +20 -0
  11. data/lib/dapp/cli/command/slug.rb +26 -0
  12. data/lib/dapp/cli/command/update.rb +65 -0
  13. data/lib/dapp/cli/options/ssh.rb +18 -0
  14. data/lib/dapp/cli/options/tag.rb +51 -0
  15. data/lib/dapp/cli.rb +11 -3
  16. data/lib/dapp/config/config.rb +21 -0
  17. data/lib/dapp/config/directive/base.rb +100 -3
  18. data/lib/dapp/core_ext/hash.rb +14 -0
  19. data/lib/dapp/core_ext/pathname.rb +6 -4
  20. data/lib/dapp/dapp/chef.rb +1 -9
  21. data/lib/dapp/dapp/command/common.rb +24 -0
  22. data/lib/dapp/dapp/command/sample/common.rb +54 -0
  23. data/lib/dapp/dapp/command/sample/create.rb +57 -0
  24. data/lib/dapp/dapp/command/sample/list.rb +13 -0
  25. data/lib/dapp/dapp/command/slug.rb +11 -0
  26. data/lib/dapp/dapp/dapp_config.rb +85 -0
  27. data/lib/dapp/dapp/dappfile.rb +108 -27
  28. data/lib/dapp/dapp/deps/base.rb +9 -32
  29. data/lib/dapp/dapp/deps/common.rb +26 -0
  30. data/lib/dapp/dapp/deps/gitartifact.rb +2 -20
  31. data/lib/dapp/dapp/deps/toolchain.rb +11 -0
  32. data/lib/dapp/dapp/git_artifact.rb +6 -4
  33. data/lib/dapp/dapp/lock.rb +6 -5
  34. data/lib/dapp/dapp/logging/base.rb +32 -20
  35. data/lib/dapp/dapp/logging/i18n.rb +5 -1
  36. data/lib/dapp/dapp/logging/process.rb +6 -6
  37. data/lib/dapp/dapp/option_tags.rb +98 -0
  38. data/lib/dapp/dapp/ruby2go.rb +130 -0
  39. data/lib/dapp/dapp/sentry.rb +97 -0
  40. data/lib/dapp/dapp/shellout/base.rb +26 -18
  41. data/lib/dapp/dapp/shellout/streaming.rb +2 -2
  42. data/lib/dapp/dapp/slug.rb +12 -0
  43. data/lib/dapp/dapp/ssh_agent.rb +25 -7
  44. data/lib/dapp/dapp.rb +192 -41
  45. data/lib/dapp/deployment.rb +1 -0
  46. data/lib/dapp/dimg/artifact.rb +12 -4
  47. data/lib/dapp/dimg/build/stage/artifact_base.rb +26 -30
  48. data/lib/dapp/dimg/build/stage/artifact_default.rb +50 -28
  49. data/lib/dapp/dimg/build/stage/base.rb +187 -52
  50. data/lib/dapp/dimg/build/stage/before_install.rb +4 -15
  51. data/lib/dapp/dimg/build/stage/before_install_artifact.rb +4 -0
  52. data/lib/dapp/dimg/build/stage/before_setup.rb +1 -20
  53. data/lib/dapp/dimg/build/stage/build_artifact.rb +1 -20
  54. data/lib/dapp/dimg/build/stage/docker_instructions.rb +5 -4
  55. data/lib/dapp/dimg/build/stage/from.rb +62 -9
  56. data/lib/dapp/dimg/build/stage/ga_archive.rb +14 -1
  57. data/lib/dapp/dimg/build/stage/ga_artifact_patch.rb +1 -5
  58. data/lib/dapp/dimg/build/stage/ga_base.rb +5 -35
  59. data/lib/dapp/dimg/build/stage/ga_latest_patch.rb +15 -34
  60. data/lib/dapp/dimg/build/stage/ga_related_base.rb +21 -0
  61. data/lib/dapp/dimg/build/stage/import_artifact.rb +22 -11
  62. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch.rb +6 -2
  63. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch.rb +6 -2
  64. data/lib/dapp/dimg/build/stage/install/install.rb +1 -19
  65. data/lib/dapp/dimg/build/stage/instructions.rb +27 -0
  66. data/lib/dapp/dimg/build/stage/mod/group.rb +19 -7
  67. data/lib/dapp/dimg/build/stage/mod/logging.rb +15 -19
  68. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch.rb +24 -1
  69. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch.rb +6 -2
  70. data/lib/dapp/dimg/build/stage/setup/setup.rb +1 -19
  71. data/lib/dapp/dimg/builder/ansible.rb +5 -0
  72. data/lib/dapp/dimg/builder/chef/cookbook.rb +8 -8
  73. data/lib/dapp/dimg/builder/chef.rb +29 -16
  74. data/lib/dapp/dimg/builder/none.rb +1 -34
  75. data/lib/dapp/dimg/builder/ruby2go.rb +57 -0
  76. data/lib/dapp/dimg/builder/shell.rb +1 -20
  77. data/lib/dapp/dimg/cli/cli.rb +2 -1
  78. data/lib/dapp/dimg/cli/command/base.rb +24 -0
  79. data/lib/dapp/dimg/cli/command/dimg/bp.rb +60 -0
  80. data/lib/dapp/dimg/cli/command/dimg/build.rb +43 -0
  81. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/export.rb +9 -4
  82. data/lib/dapp/dimg/cli/{build_context → command/dimg/build_context}/import.rb +4 -4
  83. data/lib/dapp/dimg/cli/{build_context.rb → command/dimg/build_context.rb} +5 -5
  84. data/lib/dapp/dimg/cli/{cleanup.rb → command/dimg/cleanup.rb} +4 -6
  85. data/lib/dapp/dimg/cli/command/dimg/cleanup_repo.rb +47 -0
  86. data/lib/dapp/dimg/cli/command/dimg/flush_local.rb +24 -0
  87. data/lib/dapp/dimg/cli/command/dimg/flush_repo.rb +36 -0
  88. data/lib/dapp/dimg/cli/{list.rb → command/dimg/list.rb} +6 -3
  89. data/lib/dapp/dimg/cli/{mrproper.rb → command/dimg/mrproper.rb} +4 -4
  90. data/lib/dapp/dimg/cli/command/dimg/push.rb +39 -0
  91. data/lib/dapp/dimg/cli/{run.rb → command/dimg/run.rb} +30 -15
  92. data/lib/dapp/dimg/cli/{spush.rb → command/dimg/spush.rb} +4 -4
  93. data/lib/dapp/dimg/cli/{stage_image.rb → command/dimg/stage_image.rb} +12 -3
  94. data/lib/dapp/dimg/cli/command/dimg/stages/base.rb +13 -0
  95. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_local.rb +13 -9
  96. data/lib/dapp/dimg/cli/{stages → command/dimg/stages}/cleanup_repo.rb +6 -8
  97. data/lib/dapp/dimg/cli/command/dimg/stages/flush_local.rb +21 -0
  98. data/lib/dapp/dimg/cli/command/dimg/stages/flush_repo.rb +28 -0
  99. data/lib/dapp/dimg/cli/command/dimg/stages/pull.rb +34 -0
  100. data/lib/dapp/dimg/cli/command/dimg/stages/push.rb +30 -0
  101. data/lib/dapp/dimg/cli/command/dimg/stages.rb +22 -0
  102. data/lib/dapp/dimg/cli/command/dimg/tag.rb +24 -0
  103. data/lib/dapp/dimg/cli/command/dimg.rb +31 -0
  104. data/lib/dapp/dimg/cli/options/introspection.rb +45 -0
  105. data/lib/dapp/dimg/config/config.rb +24 -0
  106. data/lib/dapp/dimg/config/directive/artifact.rb +13 -15
  107. data/lib/dapp/dimg/config/directive/artifact_base.rb +13 -8
  108. data/lib/dapp/dimg/config/directive/artifact_dimg.rb +12 -0
  109. data/lib/dapp/dimg/config/directive/artifact_group.rb +60 -0
  110. data/lib/dapp/dimg/config/directive/dimg/instance_methods.rb +203 -0
  111. data/lib/dapp/dimg/config/directive/dimg/validation.rb +217 -0
  112. data/lib/dapp/dimg/config/directive/dimg.rb +36 -0
  113. data/lib/dapp/dimg/config/directive/dimg_group.rb +73 -0
  114. data/lib/dapp/dimg/config/directive/dimg_group_base.rb +46 -0
  115. data/lib/dapp/dimg/config/directive/docker/artifact.rb +5 -0
  116. data/lib/dapp/dimg/config/directive/docker/base.rb +2 -3
  117. data/lib/dapp/dimg/config/directive/docker/dimg.rb +4 -4
  118. data/lib/dapp/dimg/config/directive/git_artifact_local.rb +24 -5
  119. data/lib/dapp/dimg/config/directive/git_artifact_remote.rb +23 -12
  120. data/lib/dapp/dimg/config/directive/mount.rb +11 -3
  121. data/lib/dapp/dimg/config/directive/shell/dimg.rb +2 -2
  122. data/lib/dapp/dimg/dapp/command/bp.rb +3 -5
  123. data/lib/dapp/dimg/dapp/command/build.rb +4 -6
  124. data/lib/dapp/dimg/dapp/command/build_context/common.rb +2 -2
  125. data/lib/dapp/dimg/dapp/command/build_context/export.rb +14 -14
  126. data/lib/dapp/dimg/dapp/command/build_context/import.rb +28 -23
  127. data/lib/dapp/dimg/dapp/command/cleanup.rb +4 -11
  128. data/lib/dapp/dimg/dapp/command/cleanup_repo.rb +143 -0
  129. data/lib/dapp/dimg/dapp/command/common.rb +148 -38
  130. data/lib/dapp/dimg/dapp/command/flush_local.rb +25 -0
  131. data/lib/dapp/dimg/dapp/command/flush_repo.rb +25 -0
  132. data/lib/dapp/dimg/dapp/command/list.rb +1 -1
  133. data/lib/dapp/dimg/dapp/command/mrproper.rb +16 -63
  134. data/lib/dapp/dimg/dapp/command/push.rb +11 -16
  135. data/lib/dapp/dimg/dapp/command/ruby2go_cleanup.rb +48 -0
  136. data/lib/dapp/dimg/dapp/command/run.rb +4 -4
  137. data/lib/dapp/dimg/dapp/command/spush.rb +4 -5
  138. data/lib/dapp/dimg/dapp/command/stage_image.rb +2 -2
  139. data/lib/dapp/dimg/dapp/command/stages/cleanup_local.rb +13 -115
  140. data/lib/dapp/dimg/dapp/command/stages/cleanup_repo.rb +23 -102
  141. data/lib/dapp/dimg/dapp/command/stages/common.rb +57 -39
  142. data/lib/dapp/dimg/dapp/command/stages/flush_local.rb +13 -7
  143. data/lib/dapp/dimg/dapp/command/stages/flush_repo.rb +14 -8
  144. data/lib/dapp/dimg/dapp/command/stages/pull.rb +4 -13
  145. data/lib/dapp/dimg/dapp/command/stages/push.rb +4 -9
  146. data/lib/dapp/dimg/dapp/command/tag.rb +4 -6
  147. data/lib/dapp/dimg/dapp/config_artifact_group.rb +20 -0
  148. data/lib/dapp/dimg/dapp/dapp.rb +40 -0
  149. data/lib/dapp/dimg/dapp/dappfile.rb +43 -0
  150. data/lib/dapp/dimg/dapp/dimg.rb +41 -0
  151. data/lib/dapp/dimg/dimg/git_artifact.rb +25 -11
  152. data/lib/dapp/dimg/dimg/path.rb +7 -9
  153. data/lib/dapp/dimg/dimg/stages.rb +27 -15
  154. data/lib/dapp/dimg/dimg.rb +172 -69
  155. data/lib/dapp/dimg/docker_registry/base.rb +31 -74
  156. data/lib/dapp/dimg/docker_registry/dimg.rb +55 -0
  157. data/lib/dapp/dimg/docker_registry.rb +5 -23
  158. data/lib/dapp/dimg/error/build.rb +1 -1
  159. data/lib/dapp/dimg/error/chef.rb +1 -5
  160. data/lib/dapp/dimg/error/{command.rb → default.rb} +1 -1
  161. data/lib/dapp/dimg/error/dimg.rb +1 -1
  162. data/lib/dapp/dimg/error/lock.rb +1 -1
  163. data/lib/dapp/dimg/error/registry.rb +1 -1
  164. data/lib/dapp/dimg/error/rugged.rb +1 -1
  165. data/lib/dapp/dimg/error/tar_writer.rb +1 -1
  166. data/lib/dapp/dimg/git_artifact.rb +195 -179
  167. data/lib/dapp/dimg/git_repo/base.rb +49 -45
  168. data/lib/dapp/dimg/git_repo/local.rb +45 -0
  169. data/lib/dapp/dimg/git_repo/own.rb +3 -31
  170. data/lib/dapp/dimg/git_repo/remote.rb +65 -26
  171. data/lib/dapp/dimg/image/argument.rb +15 -50
  172. data/lib/dapp/dimg/image/dimg.rb +15 -0
  173. data/lib/dapp/dimg/image/scratch.rb +35 -9
  174. data/lib/dapp/dimg/image/stage.rb +223 -44
  175. data/lib/dapp/dimg/lock/file.rb +4 -4
  176. data/lib/dapp/downloader.rb +117 -0
  177. data/lib/dapp/error/base.rb +1 -5
  178. data/lib/dapp/error/command.rb +5 -0
  179. data/lib/dapp/error/config.rb +5 -0
  180. data/lib/dapp/error/dapp.rb +1 -1
  181. data/lib/dapp/error/dappfile.rb +1 -1
  182. data/lib/dapp/error/default.rb +11 -0
  183. data/lib/dapp/error/mod/user.rb +11 -0
  184. data/lib/dapp/error/shellout.rb +1 -1
  185. data/lib/dapp/exception/base.rb +1 -1
  186. data/lib/dapp/helper/case_conversion.rb +17 -0
  187. data/lib/dapp/helper/cli.rb +18 -7
  188. data/lib/dapp/helper/net_status.rb +5 -1
  189. data/lib/dapp/helper/sha256.rb +1 -1
  190. data/lib/dapp/helper/tar.rb +31 -0
  191. data/lib/dapp/helper/trivia.rb +40 -1
  192. data/lib/dapp/helper/url.rb +23 -0
  193. data/lib/dapp/helper/yaml.rb +24 -0
  194. data/lib/dapp/kube/cli/cli.rb +1 -0
  195. data/lib/dapp/kube/cli/command/base.rb +14 -0
  196. data/lib/dapp/kube/cli/command/kube/chart_create.rb +19 -0
  197. data/lib/dapp/kube/cli/command/kube/deploy.rb +80 -0
  198. data/lib/dapp/kube/cli/command/kube/dismiss.rb +31 -0
  199. data/lib/dapp/kube/cli/command/kube/lint.rb +53 -0
  200. data/lib/dapp/kube/cli/command/kube/minikube_setup.rb +19 -0
  201. data/lib/dapp/kube/cli/command/kube/render.rb +63 -0
  202. data/lib/dapp/kube/cli/command/kube/secret_edit.rb +30 -0
  203. data/lib/dapp/kube/cli/command/kube/secret_extract.rb +39 -0
  204. data/lib/dapp/kube/cli/command/kube/secret_generate.rb +34 -0
  205. data/lib/dapp/kube/cli/command/kube/secret_key_generate.rb +16 -0
  206. data/lib/dapp/kube/cli/command/kube/secret_regenerate.rb +29 -0
  207. data/lib/dapp/kube/cli/command/kube/value_get.rb +47 -0
  208. data/lib/dapp/kube/cli/command/kube.rb +28 -0
  209. data/lib/dapp/kube/dapp/command/chart_create.rb +103 -0
  210. data/lib/dapp/kube/dapp/command/common.rb +379 -0
  211. data/lib/dapp/kube/dapp/command/deploy.rb +351 -0
  212. data/lib/dapp/kube/dapp/command/dismiss.rb +50 -0
  213. data/lib/dapp/kube/dapp/command/lint.rb +69 -0
  214. data/lib/dapp/kube/dapp/command/minikube_setup.rb +402 -0
  215. data/lib/dapp/kube/dapp/command/render.rb +54 -0
  216. data/lib/dapp/kube/dapp/command/ruby2go.rb +17 -0
  217. data/lib/dapp/kube/dapp/command/secret_edit.rb +21 -0
  218. data/lib/dapp/kube/dapp/command/secret_extract.rb +17 -0
  219. data/lib/dapp/kube/dapp/command/secret_generate.rb +21 -0
  220. data/lib/dapp/kube/dapp/command/secret_key_generate.rb +13 -0
  221. data/lib/dapp/kube/dapp/command/secret_regenerate.rb +13 -0
  222. data/lib/dapp/kube/dapp/command/value_get.rb +32 -0
  223. data/lib/dapp/kube/dapp/dapp.rb +26 -0
  224. data/lib/dapp/kube/error/default.rb +7 -0
  225. data/lib/dapp/kube/helm/release.rb +189 -0
  226. data/lib/dapp/kube/helm/values.rb +148 -0
  227. data/lib/dapp/kube/helm.rb +5 -0
  228. data/lib/dapp/kube/kubernetes/client/error.rb +43 -0
  229. data/lib/dapp/kube/kubernetes/client/resource/base.rb +33 -0
  230. data/lib/dapp/kube/kubernetes/client/resource/deployment.rb +11 -0
  231. data/lib/dapp/kube/kubernetes/client/resource/event.rb +8 -0
  232. data/lib/dapp/kube/kubernetes/client/resource/job.rb +27 -0
  233. data/lib/dapp/kube/kubernetes/client/resource/pod.rb +62 -0
  234. data/lib/dapp/kube/kubernetes/client/resource/replicaset.rb +8 -0
  235. data/lib/dapp/kube/kubernetes/client.rb +314 -0
  236. data/lib/dapp/kube/kubernetes/config.rb +132 -0
  237. data/lib/dapp/kube/kubernetes/error.rb +15 -0
  238. data/lib/dapp/kube/kubernetes/manager/base.rb +15 -0
  239. data/lib/dapp/kube/kubernetes/manager/container.rb +103 -0
  240. data/lib/dapp/kube/kubernetes/manager/deployment.rb +212 -0
  241. data/lib/dapp/kube/kubernetes/manager/job.rb +65 -0
  242. data/lib/dapp/kube/kubernetes/manager/pod.rb +69 -0
  243. data/lib/dapp/kube/kubernetes.rb +6 -0
  244. data/lib/dapp/kube/secret.rb +93 -0
  245. data/lib/dapp/kube.rb +1 -0
  246. data/lib/dapp/version.rb +2 -2
  247. data/lib/dapp.rb +155 -61
  248. metadata +208 -61
  249. data/lib/dapp/cli/base.rb +0 -63
  250. data/lib/dapp/config/base.rb +0 -54
  251. data/lib/dapp/config/error/config.rb +0 -7
  252. data/lib/dapp/dimg/build/stage/ga_archive_dependencies.rb +0 -27
  253. data/lib/dapp/dimg/build/stage/ga_dependencies_base.rb +0 -20
  254. data/lib/dapp/dimg/build/stage/install/ga_post_install_patch_dependencies.rb +0 -22
  255. data/lib/dapp/dimg/build/stage/install/ga_pre_install_patch_dependencies.rb +0 -22
  256. data/lib/dapp/dimg/build/stage/mod/git_artifact_dependencies.rb +0 -23
  257. data/lib/dapp/dimg/build/stage/setup/ga_post_setup_patch_dependencies.rb +0 -32
  258. data/lib/dapp/dimg/build/stage/setup/ga_pre_setup_patch_dependencies.rb +0 -22
  259. data/lib/dapp/dimg/cli/base.rb +0 -16
  260. data/lib/dapp/dimg/cli/bp.rb +0 -37
  261. data/lib/dapp/dimg/cli/build.rb +0 -64
  262. data/lib/dapp/dimg/cli/dimg.rb +0 -30
  263. data/lib/dapp/dimg/cli/push.rb +0 -61
  264. data/lib/dapp/dimg/cli/stages/flush_local.rb +0 -23
  265. data/lib/dapp/dimg/cli/stages/flush_repo.rb +0 -24
  266. data/lib/dapp/dimg/cli/stages/pull.rb +0 -28
  267. data/lib/dapp/dimg/cli/stages/push.rb +0 -24
  268. data/lib/dapp/dimg/cli/stages.rb +0 -22
  269. data/lib/dapp/dimg/cli/tag.rb +0 -24
  270. data/lib/dapp/dimg/config/artifact_dimg.rb +0 -17
  271. data/lib/dapp/dimg/config/artifact_group.rb +0 -43
  272. data/lib/dapp/dimg/config/base.rb +0 -7
  273. data/lib/dapp/dimg/config/dimg/instance_methods.rb +0 -179
  274. data/lib/dapp/dimg/config/dimg/validation.rb +0 -126
  275. data/lib/dapp/dimg/config/dimg.rb +0 -24
  276. data/lib/dapp/dimg/config/dimg_group.rb +0 -61
  277. data/lib/dapp/dimg/config/dimg_group_base.rb +0 -54
  278. data/lib/dapp/dimg/config/dimg_group_main.rb +0 -22
  279. data/lib/dapp/dimg/dapp/command.rb +0 -21
  280. data/lib/dapp/dimg/dimg/tags.rb +0 -65
  281. data/lib/dapp/dimg/docker_registry/base/authorization.rb +0 -63
  282. data/lib/dapp/dimg/docker_registry/base/request.rb +0 -34
  283. data/lib/dapp/dimg/docker_registry/default.rb +0 -18
  284. data/lib/dapp/dimg/error/base.rb +0 -7
  285. data/lib/dapp/dimg/error/config.rb +0 -7
  286. data/lib/dapp/dimg/exception/introspect_image.rb +0 -7
  287. data/lib/dapp/dimg/image/docker.rb +0 -134
@@ -2,252 +2,268 @@ module Dapp
2
2
  module Dimg
3
3
  # Git repo artifact
4
4
  class GitArtifact
5
+ include Helper::Tar
6
+ include Helper::Trivia
7
+
5
8
  attr_reader :repo
6
9
  attr_reader :name
10
+ attr_reader :as
11
+
12
+ # FIXME: переименовать cwd в from
7
13
 
8
14
  # rubocop:disable Metrics/ParameterLists
9
- def initialize(repo, to:, name: nil, branch: nil, commit: nil,
10
- cwd: nil, include_paths: nil, exclude_paths: nil, owner: nil, group: nil,
11
- stages_dependencies: {})
15
+ def initialize(repo, dimg, to:, name: nil, branch: nil, tag: nil, commit: nil,
16
+ cwd: nil, include_paths: nil, exclude_paths: nil, owner: nil, group: nil, as: nil,
17
+ stages_dependencies: {}, ignore_signature_auto_calculation: false)
12
18
  @repo = repo
19
+ @dimg = dimg
13
20
  @name = name
14
21
 
15
- @branch = branch || repo.dimg.dapp.cli_options[:git_artifact_branch] || repo.branch
22
+ @ignore_signature_auto_calculation = ignore_signature_auto_calculation
23
+
24
+ @branch = branch
25
+ @tag = tag
16
26
  @commit = commit
17
27
 
18
28
  @to = to
19
- @cwd = begin
20
- if cwd.nil? || cwd.empty?
21
- ''
22
- else
23
- cwd = File.expand_path(File.join('/', cwd))[1..-1] # must be relative
24
- "#{cwd.chomp('/')}/"
25
- end
26
- end
29
+ @cwd = (cwd.nil? || cwd.empty? || cwd == '/') ? '' : File.expand_path(File.join('/', cwd, '/'))[1..-1]
27
30
  @include_paths = include_paths
28
31
  @exclude_paths = exclude_paths
29
32
  @owner = owner
30
33
  @group = group
31
-
34
+ @as = as
32
35
  @stages_dependencies = stages_dependencies
33
36
  end
34
37
  # rubocop:enable Metrics/ParameterLists
35
38
 
36
39
  def apply_archive_command(stage)
37
- credentials = [:owner, :group].map { |attr| "--#{attr}=#{send(attr)}" unless send(attr).nil? }.compact
40
+ res = repo.dapp.ruby2go_git_artifact(
41
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
42
+ "method" => "ApplyArchiveCommand",
43
+ "Stage" => JSON.dump(merge_layer_commit_stub_stage_state(stage.get_ruby2go_state_hash, stage)),
44
+ )
38
45
 
39
- [].tap do |commands|
40
- commands << "#{repo.dimg.dapp.install_bin} #{credentials.join(' ')} -d #{to}"
41
- if any_changes?(nil, stage.layer_commit(self))
42
- commands << "#{sudo}#{repo.dimg.dapp.tar_bin} -xf #{archive_file(stage.layer_commit(self))} -C #{to}"
43
- end
44
- end
45
- end
46
+ raise res["error"] if res["error"]
46
47
 
47
- def apply_patch_command(stage)
48
- patch_command(stage.prev_g_a_stage.layer_commit(self), stage.layer_commit(self))
49
- end
48
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
49
+ stage.set_ruby2go_state_hash(JSON.load(res["data"]["Stage"]))
50
50
 
51
- def apply_dev_patch_command(stage)
52
- patch_command(stage.prev_g_a_stage.layer_commit(self), nil)
51
+ Array(res["data"]["result"])
53
52
  end
54
53
 
55
- def stage_dependencies_checksums(stage, from_commit = nil, to_commit = latest_commit)
56
- return [] if (stage_dependencies = stages_dependencies[stage.name]).empty?
54
+ def merge_layer_commit_stub_stage_state(stage_state, stage)
55
+ # Data for StubStage specific for ApplyPatchCommand
56
+ stage_state["LayerCommitMap"] = {
57
+ paramshash => stage.layer_commit(self),
58
+ }
59
+ stage_state["PrevStage"]["LayerCommitMap" ] = {
60
+ paramshash => stage.prev_stage.layer_commit(self),
61
+ }
57
62
 
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(':::')
63
- end
63
+ stage_state
64
64
  end
65
65
 
66
- def patch_size(from, to)
67
- diff_patches(from, to).reduce(0) do |bytes, patch|
68
- patch.hunks.each do |hunk|
69
- hunk.lines.each do |l|
70
- bytes +=
71
- case l.line_origin
72
- when :eof_newline_added, :eof_newline_removed then 1
73
- when :addition, :deletion, :binary then l.content.size
74
- else # :context, :file_header, :hunk_header, :eof_no_newline
75
- 0
76
- end
77
- end
78
- end
79
- bytes
80
- end
81
- end
66
+ def apply_patch_command(stage)
67
+ res = repo.dapp.ruby2go_git_artifact(
68
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
69
+ "method" => "ApplyPatchCommand",
70
+ "Stage" => JSON.dump(merge_layer_commit_stub_stage_state(stage.get_ruby2go_state_hash, stage)),
71
+ )
82
72
 
83
- def dev_patch_hash(stage)
84
- Digest::SHA256.hexdigest diff_patches(stage.prev_g_a_stage.layer_commit(self), nil).map(&:to_s).join(':::')
85
- end
73
+ raise res["error"] if res["error"]
86
74
 
87
- def latest_commit
88
- @latest_commit ||= commit || repo.latest_commit(branch)
89
- end
75
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
76
+ stage.set_ruby2go_state_hash(JSON.load(res["data"]["Stage"]))
90
77
 
91
- def paramshash
92
- Digest::SHA256.hexdigest [full_name, to, cwd, *include_paths, *exclude_paths, owner, group].map(&:to_s).join(':::')
78
+ Array(res["data"]["result"])
93
79
  end
94
80
 
95
- def full_name
96
- "#{repo.name}#{name ? "_#{name}" : nil}"
81
+ def calculate_stage_dependencies_checksum(stage)
82
+ res = repo.dapp.ruby2go_git_artifact(
83
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
84
+ "method" => "StageDependenciesChecksum",
85
+ "StageName" => ::Dapp::Helper::CaseConversion.snake_case_to_lower_camel_case(stage.name.to_s),
86
+ )
87
+
88
+ raise res["error"] if res["error"]
89
+
90
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
91
+
92
+ result = res["data"]["result"]
93
+ return [] if result == ""
94
+ return result
97
95
  end
98
96
 
99
- def any_changes?(from, to = latest_commit)
100
- diff_patches(from, to).any?
97
+ def stage_dependencies_checksum(stage)
98
+ stage_dependencies_key = [stage.name, commit]
99
+ @stage_dependencies_checksums ||= {}
100
+ @stage_dependencies_checksums[stage_dependencies_key] ||= calculate_stage_dependencies_checksum(stage)
101
101
  end
102
102
 
103
- protected
103
+ def patch_size(from_commit)
104
+ res = repo.dapp.ruby2go_git_artifact(
105
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
106
+ "method" => "PatchSize",
107
+ "FromCommit" => from_commit,
108
+ )
104
109
 
105
- attr_reader :to
106
- attr_reader :commit
107
- attr_reader :branch
108
- attr_reader :cwd
109
- attr_reader :owner
110
- attr_reader :group
111
- attr_reader :stages_dependencies
110
+ raise res["error"] if res["error"]
112
111
 
113
- def patch_command(prev_commit, current_commit)
114
- [].tap do |commands|
115
- if any_changes?(prev_commit, current_commit)
116
- commands << "#{sudo}#{repo.dimg.dapp.git_bin} apply --whitespace=nowarn --directory=#{to} --unsafe-paths " \
117
- "#{patch_file(prev_commit, current_commit)}"
118
- end
119
- end
120
- end
112
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
121
113
 
122
- def sudo
123
- repo.dimg.dapp.sudo_command(owner: owner, group: group)
114
+ res["data"]["result"]
124
115
  end
125
116
 
126
- def archive_file(to_commit)
127
- create_file(repo.dimg.tmp_path('archives', archive_file_name(to_commit))) do |f|
128
- Gem::Package::TarWriter.new(f) do |tar|
129
- diff_patches(nil, to_commit).each do |patch|
130
- 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
133
- end
134
- end
117
+ def get_ruby2go_state_hash
118
+ {
119
+ "Name" => @name.to_s,
120
+ "As" => @as.to_s,
121
+ "Branch" => @branch.to_s,
122
+ "Tag" => @tag.to_s,
123
+ "Commit" => @commit.to_s,
124
+ "To" => @to.to_s,
125
+ "Cwd" => @cwd.to_s,
126
+ "RepoPath" => File.join("/", @cwd.to_s),
127
+ "Owner" => @owner.to_s,
128
+ "Group" => @group.to_s,
129
+ "IncludePaths" => @include_paths,
130
+ "ExcludePaths" => @exclude_paths,
131
+ "StagesDependencies" => @stages_dependencies.map {|k, v| [_stages_map[k], Array(v).map(&:to_s)]}.to_h,
132
+ "PatchesDir" => dimg.tmp_path('patches'),
133
+ "ContainerPatchesDir" => dimg.container_tmp_path('patches'),
134
+ "ArchivesDir" => dimg.tmp_path('archives'),
135
+ "ContainerArchivesDir" => dimg.container_tmp_path('archives'),
136
+ }.tap {|res|
137
+ if repo.is_a? ::Dapp::Dimg::GitRepo::Local
138
+ res["LocalGitRepo"] = repo.get_ruby2go_state_hash
139
+ elsif repo.is_a? ::Dapp::Dimg::GitRepo::Remote
140
+ res["RemoteGitRepo"] = repo.get_ruby2go_state_hash
141
+ else
142
+ raise
135
143
  end
136
- end
137
- repo.dimg.container_tmp_path('archives', archive_file_name(to_commit))
138
- rescue Gem::Package::TooLongFileName => e
139
- raise Error::TarWriter, message: e.message
144
+ }
140
145
  end
141
146
 
142
- def slice_cwd(path)
143
- return path if cwd.empty?
144
- path
145
- .reverse
146
- .chomp(cwd.reverse)
147
- .reverse
147
+ def _stages_map
148
+ {
149
+ before_install: "beforeInstall",
150
+ install: "install",
151
+ before_setup: "beforeSetup",
152
+ setup: "setup",
153
+ build_artifact: "buildArtifact",
154
+ }
148
155
  end
149
156
 
150
- def archive_file_name(commit)
151
- file_name(commit, 'tar')
157
+ def _stages_map_reversed
158
+ _stages_map.map {|k, v| [v, k]}.to_h
152
159
  end
153
160
 
154
- def patch_file(from, to)
155
- create_file(repo.dimg.tmp_path('patches', patch_file_name(from, to))) do |f|
156
- diff_patches(from, to).each { |patch| f.write change_patch_new_file_path(patch) }
157
- end
158
- repo.dimg.container_tmp_path('patches', patch_file_name(from, to))
159
- end
160
-
161
- # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
162
- def change_patch_new_file_path(patch)
163
- patch.to_s.lines.tap do |lines|
164
- modify_patch_line = proc do |line_number, path_char|
165
- action_part, path_part = lines[line_number].split
166
- if (path_with_cwd = path_part.partition("#{path_char}/").last).start_with?(cwd)
167
- path_with_cwd.sub(cwd, '').tap do |native_path|
168
- expected_path = File.join(path_char, native_path)
169
- lines[line_number] = [action_part, expected_path].join(' ') + "\n"
170
- end
171
- end
172
- end
173
-
174
- modify_patch = proc do |*modify_patch_line_args|
175
- native_paths = modify_patch_line_args.map { |args| modify_patch_line.call(*args) }
176
- unless (native_paths = native_paths.compact.uniq).empty?
177
- raise Error::Build, code: :unsupported_patch_format, data: { patch: patch.to_s } unless native_paths.one?
178
- native_path = native_paths.first
179
- lines[0] = ['diff --git', File.join('a', native_path), File.join('b', native_path)].join(' ') + "\n"
180
- end
161
+ def set_ruby2go_state_hash(new_state)
162
+ [
163
+ [:@name, new_state["Name"]],
164
+ [:@as, new_state["As"]],
165
+ [:@branch, new_state["Branch"]],
166
+ [:@tag, new_state["Tag"]],
167
+ [:@commit, new_state["Commit"]],
168
+ [:@cwd, new_state["Cwd"]],
169
+ [:@owner, new_state["Owner"]],
170
+ [:@group, new_state["Group"]],
171
+ ].each do |var, new_value|
172
+ if new_value != ""
173
+ instance_variable_set(var, new_value)
181
174
  end
175
+ end
182
176
 
183
- case
184
- when patch.delta.deleted? then modify_patch.call([3, 'a'])
185
- when patch.delta.added? then modify_patch.call([4, 'b'])
186
- when patch.delta.modified?
187
- if patch_file_mode_changed?(patch)
188
- modify_patch.call([4, 'a'], [5, 'b'])
189
- else
190
- modify_patch.call([2, 'a'], [3, 'b'])
191
- end
192
- else
193
- raise
194
- end
195
- end.join
177
+ @stages_dependencies = new_state["StagesDependencies"].map do |k, v|
178
+ [_stages_map_reversed[k], v]
179
+ end.to_h
196
180
  end
197
- # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
198
181
 
199
- def patch_file_mode_changed?(patch)
200
- patch.delta.old_file[:mode] != patch.delta.new_file[:mode]
201
- end
182
+ def latest_commit
183
+ @latest_commit ||= begin
184
+ res = repo.dapp.ruby2go_git_artifact("GitArtifact" => JSON.dump(get_ruby2go_state_hash), "method" => "LatestCommit")
202
185
 
203
- def patch_file_name(from, to)
204
- file_name(from, to, 'patch')
205
- end
186
+ raise res["error"] if res["error"]
206
187
 
207
- def file_name(*args, ext)
208
- "#{[full_name, args].flatten.join('_')}.#{ext}"
209
- end
188
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
210
189
 
211
- def create_file(file_path, &blk)
212
- File.open(file_path, File::RDWR | File::CREAT, &blk)
190
+ res["data"]["result"]
191
+ end.tap do |c|
192
+ repo.dapp.log_info("Repository `#{repo.name}`: latest commit `#{c}` to `#{to}`") unless ignore_signature_auto_calculation
193
+ end
213
194
  end
214
195
 
215
- 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)
220
- end
196
+ def paramshash
197
+ @paramshash ||= begin
198
+ res = repo.dapp.ruby2go_git_artifact("GitArtifact" => JSON.dump(get_ruby2go_state_hash), "method" => "GetParamshash")
199
+
200
+ raise res["error"] if res["error"]
221
201
 
222
- def include_paths_or_cwd
223
- case
224
- when !include_paths(true).empty? then include_paths(true)
225
- when !cwd.empty? then [cwd]
226
- else
227
- []
202
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
203
+
204
+ res["data"]["result"]
228
205
  end
229
206
  end
230
207
 
231
- def exclude_paths(with_cwd = false)
232
- repo.exclude_paths + base_paths(@exclude_paths, with_cwd)
208
+ def full_name
209
+ @full_name ||= begin
210
+ res = repo.dapp.ruby2go_git_artifact("GitArtifact" => JSON.dump(get_ruby2go_state_hash), "method" => "FullName")
211
+
212
+ raise res["error"] if res["error"]
213
+
214
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
215
+
216
+ res["data"]["result"]
217
+ end
233
218
  end
234
219
 
235
- def include_paths(with_cwd = false)
236
- base_paths(@include_paths, with_cwd)
220
+ def is_patch_empty(stage)
221
+ return @is_patch_empty if !@is_patch_empty.nil?
222
+
223
+ @is_patch_empty = begin
224
+ res = repo.dapp.ruby2go_git_artifact(
225
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
226
+ "method" => "IsPatchEmpty",
227
+ "Stage" => JSON.dump(merge_layer_commit_stub_stage_state({"PrevStage" => {}}, stage)),
228
+ )
229
+
230
+ raise res["error"] if res["error"]
231
+
232
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
233
+
234
+ res["data"]["result"]
235
+ end
237
236
  end
238
237
 
239
- def base_paths(paths, with_cwd = false)
240
- [paths].flatten.compact.map do |path|
241
- if with_cwd && !cwd.empty?
242
- File.join(cwd, path)
243
- else
244
- path
245
- end
246
- .chomp('/')
247
- .reverse.chomp('/')
248
- .reverse
238
+ def is_empty
239
+ return @is_empty if !@is_empty.nil?
240
+
241
+ @is_empty = begin
242
+ res = repo.dapp.ruby2go_git_artifact(
243
+ "GitArtifact" => JSON.dump(get_ruby2go_state_hash),
244
+ "method" => "IsEmpty",
245
+ )
246
+
247
+ raise res["error"] if res["error"]
248
+
249
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["GitArtifact"]))
250
+
251
+ res["data"]["result"]
249
252
  end
250
253
  end
254
+
255
+ protected
256
+
257
+ attr_reader :dimg
258
+ attr_reader :to
259
+ attr_reader :commit
260
+ attr_reader :branch
261
+ attr_reader :tag
262
+ attr_reader :cwd
263
+ attr_reader :owner
264
+ attr_reader :group
265
+ attr_reader :stages_dependencies
266
+ attr_reader :ignore_signature_auto_calculation
251
267
  end
252
268
  end
253
269
  end
@@ -3,11 +3,13 @@ module Dapp
3
3
  module GitRepo
4
4
  # Base class for any Git repo (remote, gitkeeper, etc)
5
5
  class Base
6
- attr_reader :dimg
6
+ include Helper::Trivia
7
+
7
8
  attr_reader :name
9
+ attr_reader :dapp
8
10
 
9
- def initialize(dimg, name)
10
- @dimg = dimg
11
+ def initialize(dapp, name)
12
+ @dapp = dapp
11
13
  @name = name
12
14
  end
13
15
 
@@ -15,51 +17,61 @@ module Dapp
15
17
  []
16
18
  end
17
19
 
18
- def patches(from, to, exclude_paths: [], **kwargs)
19
- diff(from, to, **kwargs).patches.select do |patch|
20
- !exclude_paths.any? { |p| check_path?(patch.delta.new_file[:path], p) }
21
- end
20
+ def get_ruby2go_state_hash
21
+ {
22
+ "Name" => @name.to_s,
23
+ }
22
24
  end
23
25
 
24
- def diff(from, to, **kwargs)
25
- if from.nil?
26
- Rugged::Tree.diff(git, nil, to, **kwargs)
27
- else
28
- lookup_commit(from).diff(lookup_commit(to), **kwargs)
29
- end
26
+ def set_ruby2go_state_hash(state)
27
+ @name = state["Name"]
30
28
  end
31
29
 
32
- def commit_exists?(commit)
33
- git.exists?(commit)
30
+ def empty?
31
+ return @empty if !@empty.nil?
32
+ @empty = ruby2go_method("IsEmpty")
33
+ @empty
34
34
  end
35
35
 
36
- def latest_commit(_branch)
37
- raise
36
+ def find_commit_id_by_message(regex)
37
+ ruby2go_method("FindCommitIdByMessage", "regex" => regex)
38
38
  end
39
39
 
40
- def branch
41
- git.head.name.sub(/^refs\/heads\//, '')
42
- rescue Rugged::ReferenceError => e
43
- raise Error::Rugged, code: :git_repository_reference_error, data: { name: name, message: e.message.downcase }
40
+ def commit_exists?(commit)
41
+ ruby2go_method("IsCommitExists", "commit" => commit)
44
42
  end
45
43
 
46
- def commit_at(commit)
47
- lookup_commit(commit).time.to_i
48
- end
44
+ def remote_origin_url
45
+ return @remote_origin_url if @remote_origin_url_set
49
46
 
50
- def find_commit_id_by_message(regex)
51
- walker.each do |commit|
52
- next unless commit.message =~ regex
53
- return commit.oid
47
+ res = ruby2go_method("RemoteOriginUrl")
48
+ if res != ""
49
+ @remote_origin_url = res
54
50
  end
51
+ @remote_origin_url_set = true
52
+
53
+ @remote_origin_url
55
54
  end
56
55
 
57
- def walker
58
- walker = Rugged::Walker.new(git)
59
- walker.push(git.head.target_id)
60
- walker
56
+ def latest_branch_commit(branch)
57
+ ruby2go_method("LatestBranchCommit", "branch" => branch)
61
58
  end
62
59
 
60
+ def head_commit
61
+ return @head_commit if !@head_commit.nil?
62
+ @head_commit = ruby2go_method("HeadCommit")
63
+ @head_commit
64
+ end
65
+
66
+ def head_branch_name
67
+ return @branch if !@branch.nil?
68
+ @branch = ruby2go_method("HeadBranchName")
69
+ @branch
70
+ end
71
+
72
+ # TODO Below operations does not affect build process, only used in sample.
73
+ # TODO Should be ported to golang without git_repo.GitRepo interface.
74
+
63
75
  def lookup_object(oid)
64
76
  git.lookup(oid)
65
77
  end
@@ -70,22 +82,14 @@ module Dapp
70
82
 
71
83
  protected
72
84
 
73
- def git(**kwargs)
74
- @git ||= Rugged::Repository.new(path, **kwargs)
85
+ def ruby2go_method(method, args_hash={})
86
+ raise
75
87
  end
76
88
 
77
- private
78
-
79
- def check_path?(path, format)
80
- path_parts = path.split('/')
81
- checking_path = nil
82
-
83
- until path_parts.empty?
84
- checking_path = [checking_path, path_parts.shift].compact.join('/')
85
- return true if File.fnmatch(format, checking_path)
86
- end
87
- false
89
+ def git(**kwargs) # TODO remove
90
+ @git ||= Rugged::Repository.new(path.to_s, **kwargs)
88
91
  end
92
+
89
93
  end
90
94
  end
91
95
  end
@@ -0,0 +1,45 @@
1
+ module Dapp
2
+ module Dimg
3
+ module GitRepo
4
+ class Local < Base
5
+ attr_reader :path
6
+
7
+ def initialize(dapp, name, path)
8
+ super(dapp, name)
9
+ self.path = path
10
+ end
11
+
12
+ def get_ruby2go_state_hash
13
+ super.tap {|res|
14
+ p = @path.to_s
15
+ p = File.dirname(@path) if File.basename(@path) == ".git"
16
+ res["Path"] = p
17
+ res["GitDir"] = @path.to_s
18
+ }
19
+ end
20
+
21
+ def ruby2go_method(method, args_hash={})
22
+ res = dapp.ruby2go_git_repo(args_hash.merge("LocalGitRepo" => JSON.dump(get_ruby2go_state_hash), "method" => method))
23
+
24
+ raise res["error"] if res["error"]
25
+
26
+ self.set_ruby2go_state_hash(JSON.load(res["data"]["LocalGitRepo"]))
27
+
28
+ res["data"]["result"]
29
+ end
30
+
31
+ def path=(path) # TODO remove
32
+ @path ||= Pathname(Rugged::Repository.new(path).path)
33
+ rescue Rugged::RepositoryError, Rugged::OSError => _e
34
+ raise Error::Rugged, code: :local_git_repository_does_not_exist, data: { path: path }
35
+ end
36
+
37
+ def lookup_commit(commit)
38
+ super
39
+ rescue Rugged::OdbError, TypeError => _e
40
+ raise Error::Rugged, code: :commit_not_found_in_local_git_repository, data: { commit: commit, path: path }
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,37 +1,9 @@
1
1
  module Dapp
2
2
  module Dimg
3
3
  module GitRepo
4
- class Own < Base
5
- def initialize(dimg)
6
- super(dimg, 'own')
7
- end
8
-
9
- def exclude_paths
10
- dimg.dapp.local_git_artifact_exclude_paths
11
- end
12
-
13
- def path
14
- @path ||= Rugged::Repository.discover(dimg.home_path.to_s).path
15
- rescue Rugged::RepositoryError => _e
16
- raise Error::Rugged, code: :local_git_repository_does_not_exist
17
- end
18
-
19
- def diff(from, to, **kwargs)
20
- if to.nil?
21
- git.lookup(from).diff_workdir(**kwargs)
22
- else
23
- super
24
- end
25
- end
26
-
27
- def latest_commit(_branch = nil)
28
- git.head.target_id
29
- end
30
-
31
- def lookup_commit(commit)
32
- super
33
- rescue Rugged::OdbError, TypeError => _e
34
- raise Error::Rugged, code: :commit_not_found_in_local_git_repository, data: { commit: commit }
4
+ class Own < Local
5
+ def initialize(dapp)
6
+ super(dapp, 'own', dapp.path.to_s)
35
7
  end
36
8
  end
37
9
  end