eac_tools 0.86.0 → 0.86.1

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 (245) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +23 -19
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/Gemfile +8 -0
  5. data/sub/avm/avm.gemspec +30 -0
  6. data/sub/avm/lib/avm/application_scms/base.rb +39 -0
  7. data/sub/avm/lib/avm/application_scms.rb +9 -0
  8. data/sub/avm/lib/avm/application_stereotypes/base.rb +31 -0
  9. data/sub/avm/lib/avm/application_stereotypes.rb +9 -0
  10. data/sub/avm/lib/avm/applications/base/auto_local_source_path.rb +24 -0
  11. data/sub/avm/lib/avm/applications/base/local_instance.rb +31 -0
  12. data/sub/avm/lib/avm/applications/base/local_source.rb +30 -0
  13. data/sub/avm/lib/avm/applications/base/naming.rb +28 -0
  14. data/sub/avm/lib/avm/applications/base/organization.rb +29 -0
  15. data/sub/avm/lib/avm/applications/base/publishing.rb +43 -0
  16. data/sub/avm/lib/avm/applications/base/scm.rb +27 -0
  17. data/sub/avm/lib/avm/applications/base/stereotype.rb +31 -0
  18. data/sub/avm/lib/avm/applications/base.rb +37 -0
  19. data/sub/avm/lib/avm/applications.rb +9 -0
  20. data/sub/avm/lib/avm/data/callbacks.rb +37 -0
  21. data/sub/avm/lib/avm/data/clearer.rb +20 -0
  22. data/sub/avm/lib/avm/data/dumper.rb +142 -0
  23. data/sub/avm/lib/avm/data/loader.rb +28 -0
  24. data/sub/avm/lib/avm/data/package/base_performer.rb +38 -0
  25. data/sub/avm/lib/avm/data/package/build_directory.rb +28 -0
  26. data/sub/avm/lib/avm/data/package/clear.rb +22 -0
  27. data/sub/avm/lib/avm/data/package/dump.rb +45 -0
  28. data/sub/avm/lib/avm/data/package/load.rb +36 -0
  29. data/sub/avm/lib/avm/data/package.rb +67 -0
  30. data/sub/avm/lib/avm/data/performer.rb +49 -0
  31. data/sub/avm/lib/avm/data/rotate.rb +107 -0
  32. data/sub/avm/lib/avm/data/unit.rb +49 -0
  33. data/sub/avm/lib/avm/data/unit_with_commands.rb +52 -0
  34. data/sub/avm/lib/avm/docker/container.rb +50 -0
  35. data/sub/avm/lib/avm/docker/image.rb +76 -0
  36. data/sub/avm/lib/avm/docker/runner.rb +121 -0
  37. data/sub/avm/lib/avm/docker.rb +9 -0
  38. data/sub/avm/lib/avm/entries/auto_values/entry.rb +39 -0
  39. data/sub/avm/lib/avm/entries/auto_values/uri_entry.rb +24 -0
  40. data/sub/avm/lib/avm/entries/auto_values.rb +11 -0
  41. data/sub/avm/lib/avm/entries/base/inherited_entry_value.rb +46 -0
  42. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/default_value.rb +28 -0
  43. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/inherited_value.rb +39 -0
  44. data/sub/avm/lib/avm/entries/base/uri_component_entry_value/url_entry_value.rb +31 -0
  45. data/sub/avm/lib/avm/entries/base/uri_component_entry_value.rb +44 -0
  46. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/component_factory.rb +42 -0
  47. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/generic_component.rb +63 -0
  48. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/path_component.rb +19 -0
  49. data/sub/avm/lib/avm/entries/base/uri_components_entries_values/url_component.rb +28 -0
  50. data/sub/avm/lib/avm/entries/base/uri_components_entries_values.rb +25 -0
  51. data/sub/avm/lib/avm/entries/base.rb +46 -0
  52. data/sub/avm/lib/avm/entries/entry.rb +65 -0
  53. data/sub/avm/lib/avm/entries/jobs/base.rb +62 -0
  54. data/sub/avm/lib/avm/entries/jobs/variables_source/read_entry.rb +50 -0
  55. data/sub/avm/lib/avm/entries/jobs/variables_source.rb +15 -0
  56. data/sub/avm/lib/avm/entries/jobs/with_variables_source.rb +15 -0
  57. data/sub/avm/lib/avm/entries/jobs.rb +11 -0
  58. data/sub/avm/lib/avm/entries/keys_constants_set.rb +43 -0
  59. data/sub/avm/lib/avm/entries/uri_builder.rb +91 -0
  60. data/sub/avm/lib/avm/entries.rb +9 -0
  61. data/sub/avm/lib/avm/executables.rb +24 -0
  62. data/sub/avm/lib/avm/file_formats/base.rb +35 -0
  63. data/sub/avm/lib/avm/file_formats/file_result.rb +13 -0
  64. data/sub/avm/lib/avm/file_formats/search_formatter.rb +87 -0
  65. data/sub/avm/lib/avm/file_formats/unknown.rb +18 -0
  66. data/sub/avm/lib/avm/file_formats/utf8_assert.rb +72 -0
  67. data/sub/avm/lib/avm/file_formats.rb +9 -0
  68. data/sub/avm/lib/avm/instances/base/auto_values/data.rb +25 -0
  69. data/sub/avm/lib/avm/instances/base/auto_values/database.rb +62 -0
  70. data/sub/avm/lib/avm/instances/base/auto_values/mailer.rb +35 -0
  71. data/sub/avm/lib/avm/instances/base/auto_values/source.rb +15 -0
  72. data/sub/avm/lib/avm/instances/base/auto_values.rb +14 -0
  73. data/sub/avm/lib/avm/instances/base/dockerizable.rb +45 -0
  74. data/sub/avm/lib/avm/instances/base/entry_keys.rb +27 -0
  75. data/sub/avm/lib/avm/instances/base/install.rb +24 -0
  76. data/sub/avm/lib/avm/instances/base/processes.rb +27 -0
  77. data/sub/avm/lib/avm/instances/base/subcommand_parent.rb +25 -0
  78. data/sub/avm/lib/avm/instances/base/web.rb +16 -0
  79. data/sub/avm/lib/avm/instances/base.rb +71 -0
  80. data/sub/avm/lib/avm/instances/data/files_unit.rb +59 -0
  81. data/sub/avm/lib/avm/instances/data/package.rb +27 -0
  82. data/sub/avm/lib/avm/instances/data/unit.rb +30 -0
  83. data/sub/avm/lib/avm/instances/data.rb +11 -0
  84. data/sub/avm/lib/avm/instances/docker_image.rb +15 -0
  85. data/sub/avm/lib/avm/instances/entry_keys.rb +43 -0
  86. data/sub/avm/lib/avm/instances/ids.rb +30 -0
  87. data/sub/avm/lib/avm/instances/process.rb +31 -0
  88. data/sub/avm/lib/avm/instances/runner.rb +37 -0
  89. data/sub/avm/lib/avm/instances.rb +9 -0
  90. data/sub/avm/lib/avm/launcher/context/instance_collector.rb +46 -0
  91. data/sub/avm/lib/avm/launcher/context/instance_discovery.rb +56 -0
  92. data/sub/avm/lib/avm/launcher/context/instance_manager/cached_instance.rb +37 -0
  93. data/sub/avm/lib/avm/launcher/context/instance_manager/cached_instances.rb +35 -0
  94. data/sub/avm/lib/avm/launcher/context/instance_manager.rb +77 -0
  95. data/sub/avm/lib/avm/launcher/context/settings.rb +53 -0
  96. data/sub/avm/lib/avm/launcher/context.rb +100 -0
  97. data/sub/avm/lib/avm/launcher/errors/base.rb +10 -0
  98. data/sub/avm/lib/avm/launcher/errors/non_project.rb +15 -0
  99. data/sub/avm/lib/avm/launcher/errors.rb +11 -0
  100. data/sub/avm/lib/avm/launcher/instances/base/cache.rb +43 -0
  101. data/sub/avm/lib/avm/launcher/instances/base/publishing.rb +53 -0
  102. data/sub/avm/lib/avm/launcher/instances/base.rb +78 -0
  103. data/sub/avm/lib/avm/launcher/instances/error.rb +10 -0
  104. data/sub/avm/lib/avm/launcher/instances/runner_helper.rb +47 -0
  105. data/sub/avm/lib/avm/launcher/instances/settings.rb +26 -0
  106. data/sub/avm/lib/avm/launcher/instances.rb +11 -0
  107. data/sub/avm/lib/avm/launcher/paths/logical.rb +80 -0
  108. data/sub/avm/lib/avm/launcher/paths/real.rb +44 -0
  109. data/sub/avm/lib/avm/launcher/paths.rb +11 -0
  110. data/sub/avm/lib/avm/launcher/project.rb +17 -0
  111. data/sub/avm/lib/avm/launcher/publish/base.rb +47 -0
  112. data/sub/avm/lib/avm/launcher/publish/check_result.rb +65 -0
  113. data/sub/avm/lib/avm/launcher/publish.rb +11 -0
  114. data/sub/avm/lib/avm/launcher/stereotype.rb +63 -0
  115. data/sub/avm/lib/avm/launcher.rb +9 -0
  116. data/sub/avm/lib/avm/launcher_stereotypes.rb +9 -0
  117. data/sub/avm/lib/avm/patches/eac_config/entry_path.rb +46 -0
  118. data/sub/avm/lib/avm/path_string.rb +27 -0
  119. data/sub/avm/lib/avm/registry/application_scms.rb +15 -0
  120. data/sub/avm/lib/avm/registry/application_stereotypes/build_available.rb +49 -0
  121. data/sub/avm/lib/avm/registry/application_stereotypes/stereotype_builder.rb +33 -0
  122. data/sub/avm/lib/avm/registry/application_stereotypes.rb +52 -0
  123. data/sub/avm/lib/avm/registry/applications.rb +38 -0
  124. data/sub/avm/lib/avm/registry/config_objects.rb +18 -0
  125. data/sub/avm/lib/avm/registry/file_formats.rb +20 -0
  126. data/sub/avm/lib/avm/registry/from_gems.rb +80 -0
  127. data/sub/avm/lib/avm/registry/instances.rb +16 -0
  128. data/sub/avm/lib/avm/registry/launcher_stereotypes.rb +11 -0
  129. data/sub/avm/lib/avm/registry/runners.rb +10 -0
  130. data/sub/avm/lib/avm/registry/scms.rb +10 -0
  131. data/sub/avm/lib/avm/registry/source_generators.rb +17 -0
  132. data/sub/avm/lib/avm/registry/sources.rb +31 -0
  133. data/sub/avm/lib/avm/registry/with_path/cache.rb +31 -0
  134. data/sub/avm/lib/avm/registry/with_path.rb +49 -0
  135. data/sub/avm/lib/avm/registry.rb +35 -0
  136. data/sub/avm/lib/avm/result.rb +82 -0
  137. data/sub/avm/lib/avm/rspec/setup/launcher.rb +19 -0
  138. data/sub/avm/lib/avm/rspec/setup/source_generator.rb +22 -0
  139. data/sub/avm/lib/avm/rspec/setup.rb +35 -0
  140. data/sub/avm/lib/avm/rspec/shared_examples/avm_file_format_file_resource_name.rb +15 -0
  141. data/sub/avm/lib/avm/rspec/shared_examples/avm_file_formats_with_fixtures.rb +31 -0
  142. data/sub/avm/lib/avm/rspec/shared_examples/avm_source_generated.rb +23 -0
  143. data/sub/avm/lib/avm/rspec/shared_examples/entries_values.rb +23 -0
  144. data/sub/avm/lib/avm/rspec/shared_examples/in_avm_registry.rb +11 -0
  145. data/sub/avm/lib/avm/rspec/shared_examples/not_in_avm_registry.rb +14 -0
  146. data/sub/avm/lib/avm/rspec.rb +9 -0
  147. data/sub/avm/lib/avm/runners/base.rb +27 -0
  148. data/sub/avm/lib/avm/scms/auto_commit/file_resource_name.rb +39 -0
  149. data/sub/avm/lib/avm/scms/auto_commit/for_file.rb +82 -0
  150. data/sub/avm/lib/avm/scms/auto_commit/rules/base.rb +40 -0
  151. data/sub/avm/lib/avm/scms/auto_commit/rules/last.rb +19 -0
  152. data/sub/avm/lib/avm/scms/auto_commit/rules/manual.rb +40 -0
  153. data/sub/avm/lib/avm/scms/auto_commit/rules/new.rb +24 -0
  154. data/sub/avm/lib/avm/scms/auto_commit/rules/nth.rb +31 -0
  155. data/sub/avm/lib/avm/scms/auto_commit/rules/unique.rb +21 -0
  156. data/sub/avm/lib/avm/scms/auto_commit/rules.rb +36 -0
  157. data/sub/avm/lib/avm/scms/auto_commit.rb +11 -0
  158. data/sub/avm/lib/avm/scms/base/commits.rb +34 -0
  159. data/sub/avm/lib/avm/scms/base/milestones.rb +21 -0
  160. data/sub/avm/lib/avm/scms/base.rb +56 -0
  161. data/sub/avm/lib/avm/scms/changed_file.rb +26 -0
  162. data/sub/avm/lib/avm/scms/commit.rb +66 -0
  163. data/sub/avm/lib/avm/scms/commit_info.rb +39 -0
  164. data/sub/avm/lib/avm/scms/inflector.rb +22 -0
  165. data/sub/avm/lib/avm/scms/interval.rb +18 -0
  166. data/sub/avm/lib/avm/scms/null/commit.rb +15 -0
  167. data/sub/avm/lib/avm/scms/null.rb +21 -0
  168. data/sub/avm/lib/avm/scms.rb +9 -0
  169. data/sub/avm/lib/avm/self/docker_image.rb +14 -0
  170. data/sub/avm/lib/avm/self/instance/entry_keys.rb +12 -0
  171. data/sub/avm/lib/avm/self/instance.rb +31 -0
  172. data/sub/avm/lib/avm/source_generators/base.rb +45 -0
  173. data/sub/avm/lib/avm/source_generators/option.rb +11 -0
  174. data/sub/avm/lib/avm/source_generators/option_list.rb +32 -0
  175. data/sub/avm/lib/avm/source_generators/runner.rb +58 -0
  176. data/sub/avm/lib/avm/source_generators.rb +9 -0
  177. data/sub/avm/lib/avm/sources/auto_commit/for_file.rb +31 -0
  178. data/sub/avm/lib/avm/sources/auto_commit.rb +11 -0
  179. data/sub/avm/lib/avm/sources/base/application.rb +34 -0
  180. data/sub/avm/lib/avm/sources/base/configuration.rb +92 -0
  181. data/sub/avm/lib/avm/sources/base/instance.rb +16 -0
  182. data/sub/avm/lib/avm/sources/base/locale.rb +33 -0
  183. data/sub/avm/lib/avm/sources/base/organizational.rb +32 -0
  184. data/sub/avm/lib/avm/sources/base/parent.rb +28 -0
  185. data/sub/avm/lib/avm/sources/base/stereotype.rb +18 -0
  186. data/sub/avm/lib/avm/sources/base/sub/remove.rb +38 -0
  187. data/sub/avm/lib/avm/sources/base/sub.rb +26 -0
  188. data/sub/avm/lib/avm/sources/base/subs.rb +67 -0
  189. data/sub/avm/lib/avm/sources/base/subs_paths.rb +32 -0
  190. data/sub/avm/lib/avm/sources/base/testing.rb +70 -0
  191. data/sub/avm/lib/avm/sources/base/update.rb +39 -0
  192. data/sub/avm/lib/avm/sources/base/update_sub.rb +57 -0
  193. data/sub/avm/lib/avm/sources/base/update_subs.rb +19 -0
  194. data/sub/avm/lib/avm/sources/base/version_bump.rb +29 -0
  195. data/sub/avm/lib/avm/sources/base.rb +51 -0
  196. data/sub/avm/lib/avm/sources/configuration/rubocop.rb +26 -0
  197. data/sub/avm/lib/avm/sources/configuration.rb +59 -0
  198. data/sub/avm/lib/avm/sources/runner.rb +40 -0
  199. data/sub/avm/lib/avm/sources/tests/builder.rb +96 -0
  200. data/sub/avm/lib/avm/sources/tests/performer.rb +35 -0
  201. data/sub/avm/lib/avm/sources/tests/result.rb +15 -0
  202. data/sub/avm/lib/avm/sources/tests/single.rb +75 -0
  203. data/sub/avm/lib/avm/sources/tests.rb +11 -0
  204. data/sub/avm/lib/avm/sources/update_error.rb +8 -0
  205. data/sub/avm/lib/avm/sources.rb +9 -0
  206. data/sub/avm/lib/avm/sync.rb +94 -0
  207. data/sub/avm/lib/avm/version.rb +5 -0
  208. data/sub/avm/lib/avm/version_number.rb +45 -0
  209. data/sub/avm/lib/avm/with/application_stereotype.rb +33 -0
  210. data/sub/avm/lib/avm/with/extra_subcommands.rb +44 -0
  211. data/sub/avm/lib/avm.rb +7 -0
  212. data/sub/avm/locale/en.yml +6 -0
  213. data/sub/avm/locale/pt-BR.yml +6 -0
  214. data/sub/avm/spec/lib/avm/applications/base/entries_spec.rb +31 -0
  215. data/sub/avm/spec/lib/avm/applications/base/entries_spec_files/config.yml +12 -0
  216. data/sub/avm/spec/lib/avm/applications/base_spec.rb +23 -0
  217. data/sub/avm/spec/lib/avm/applications/base_spec_fixture.yml +3 -0
  218. data/sub/avm/spec/lib/avm/file_formats/base_spec.rb +11 -0
  219. data/sub/avm/spec/lib/avm/instances/base_spec.rb +107 -0
  220. data/sub/avm/spec/lib/avm/instances/base_spec_files/config.yml +50 -0
  221. data/sub/avm/spec/lib/avm/launcher/instances/base_spec.rb +43 -0
  222. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/avm-tools.gemspec +29 -0
  223. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/lib/avm/tools/version.rb +7 -0
  224. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/avm-tools_stub/lib/avm/tools.rb +6 -0
  225. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/lib/ruby_gem_stub/version.rb +5 -0
  226. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/lib/ruby_gem_stub.rb +3 -0
  227. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/projects/ruby_gem_stub/ruby_gem_stub.gemspec +16 -0
  228. data/sub/avm/spec/lib/avm/launcher/instances/base_spec_files/settings.yaml +5 -0
  229. data/sub/avm/spec/lib/avm/patches/eac_config/entry_path_spec.rb +28 -0
  230. data/sub/avm/spec/lib/avm/scms/auto_commit/file_resource_name_spec.rb +21 -0
  231. data/sub/avm/spec/lib/avm/scms/base_spec.rb +7 -0
  232. data/sub/avm/spec/lib/avm/sources/base_spec.rb +7 -0
  233. data/sub/avm/spec/lib/avm/sources/runner_spec.rb +9 -0
  234. data/sub/avm/spec/rubocop_spec.rb +3 -0
  235. data/sub/avm/spec/spec_helper.rb +4 -0
  236. data/sub/avm-eac_php_base0/Gemfile +2 -2
  237. data/sub/avm-eac_php_base0/avm-eac_php_base0.gemspec +5 -4
  238. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/executables.rb +1 -1
  239. data/sub/avm-eac_php_base0/lib/avm/eac_php_base0/version.rb +1 -1
  240. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/file_formats/base_spec.rb +1 -1
  241. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/source_generators/base_spec.rb +1 -1
  242. data/sub/avm-eac_php_base0/spec/lib/avm/eac_php_base0/sources/base_spec.rb +1 -1
  243. data/sub/avm-eac_php_base0/spec/rubocop_spec.rb +1 -1
  244. data/sub/avm-eac_php_base0/spec/spec_helper.rb +1 -1
  245. metadata +237 -5
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module Runners
7
+ class Base
8
+ enable_abstract_methods
9
+
10
+ class << self
11
+ def command_argument
12
+ stereotype_name.underscore.dasherize
13
+ end
14
+
15
+ def stereotype_name
16
+ name.split('::')[-3]
17
+ end
18
+ end
19
+
20
+ delegate :command_argument, :stereotype_name, to: :class
21
+
22
+ def to_s
23
+ stereotype_name
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ class FileResourceName
9
+ require_sub __FILE__, include_modules: true
10
+ enable_simple_cache
11
+ common_constructor :source_root, :path do
12
+ self.source_root = source_root.to_pathname
13
+ self.path = path.to_pathname
14
+ end
15
+
16
+ def class_name
17
+ file_format.file_resource_name(relative_path)
18
+ end
19
+
20
+ def commit_message
21
+ r = class_name
22
+ r += ': remove' unless path.file?
23
+ "#{r}."
24
+ end
25
+
26
+ def relative_path
27
+ path.expand_path.relative_path_from(source_root.expand_path)
28
+ end
29
+
30
+ private
31
+
32
+ # @return [Avm::FileFormats::Base]
33
+ def file_format_uncached
34
+ ::Avm::Registry.file_formats.detect(path)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/commit_info'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Scms
8
+ module AutoCommit
9
+ class ForFile
10
+ enable_speaker
11
+ enable_simple_cache
12
+ enable_listable
13
+
14
+ common_constructor :scm, :path, :rules do
15
+ self.path = path.to_pathname.expand_path(scm.path)
16
+ end
17
+
18
+ COMMITS_SEARCH_INTERVAL = 'origin/master..HEAD'
19
+
20
+ def scm_relative_path
21
+ path.to_pathname.relative_path_from(scm.path)
22
+ end
23
+
24
+ def run
25
+ start_banner
26
+ run_commit || warn("No rule returned commit information for \"#{path}\"")
27
+ end
28
+
29
+ private
30
+
31
+ # @return [Boolean]
32
+ def changed?
33
+ scm.changed_files.any? { |cf| cf.path == scm_relative_path }
34
+ end
35
+
36
+ def commit_info_uncached
37
+ rules.lazy.map { |rule| rule.with_file(self).commit_info }.find(&:present?)
38
+ .if_present { |v| v.path(path) }
39
+ end
40
+
41
+ def start_banner
42
+ infov 'Path', path
43
+ infov ' Commits found', commits.count
44
+ end
45
+
46
+ def run_commit
47
+ return false if commit_info.blank?
48
+
49
+ infov ' Commit info', commit_info
50
+ if changed?
51
+ scm.run_commit(commit_info)
52
+ success ' Commited'
53
+ else
54
+ warn " File \"#{path}\" unchanged"
55
+ end
56
+
57
+ true
58
+ end
59
+
60
+ def commits_uncached
61
+ scm.current_milestone_interval.commits
62
+ .select { |c| c.changed_files.include?(path.relative_path_from(scm.path)) }
63
+ .reject(&:fixup?).each_with_index
64
+ .map { |commit, index| CommitDelegator.new(commit, index) }
65
+ end
66
+
67
+ class CommitDelegator < ::SimpleDelegator
68
+ attr_reader :index
69
+
70
+ def initialize(commit, index)
71
+ super(commit)
72
+ @index = index
73
+ end
74
+
75
+ def position
76
+ index + 1
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/commit_info'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Scms
8
+ module AutoCommit
9
+ module Rules
10
+ class Base
11
+ class << self
12
+ def keys
13
+ [long_key, short_key]
14
+ end
15
+
16
+ def long_key
17
+ name.demodulize.variableize
18
+ end
19
+
20
+ def short_key
21
+ long_key[0, 1]
22
+ end
23
+ end
24
+
25
+ def with_file(file)
26
+ self.class.const_get('WithFile').new(self, file)
27
+ end
28
+
29
+ class WithFile
30
+ common_constructor :rule, :file
31
+
32
+ def new_commit_info
33
+ ::Avm::Scms::CommitInfo.new
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/auto_commit/rules/base'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ module Rules
9
+ class Last < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
+ def commit_info
12
+ file.commits.last.if_present { |v| new_commit_info.fixup(v) }
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/auto_commit/rules/base'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ module Rules
9
+ class Manual < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
+ enable_speaker
12
+
13
+ SKIP_OPTION = 's'
14
+
15
+ def commit_info
16
+ return nil unless file.commits.any?
17
+
18
+ commits_banner
19
+ input('Which commit?', list: commits_by_position).if_present do |v|
20
+ new_commit_info.fixup(v)
21
+ end
22
+ end
23
+
24
+ def commits_banner
25
+ file.commits.each_with_index do |commit, _index|
26
+ infov " #{commit.position}", commit
27
+ end
28
+ infov " #{SKIP_OPTION}", 'skip'
29
+ end
30
+
31
+ def commits_by_position
32
+ (file.commits.map { |commit| [commit.position.to_s, commit] } + [[SKIP_OPTION, nil]])
33
+ .to_h
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/auto_commit/rules/base'
4
+ require 'avm/scms/auto_commit/file_resource_name'
5
+
6
+ module Avm
7
+ module Scms
8
+ module AutoCommit
9
+ module Rules
10
+ class New < ::Avm::Scms::AutoCommit::Rules::Base
11
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
12
+ def auto_commit_path
13
+ ::Avm::Scms::AutoCommit::FileResourceName.new(file.scm.path, file.path)
14
+ end
15
+
16
+ def commit_info
17
+ new_commit_info.message(auto_commit_path.commit_message)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/auto_commit/rules/base'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ module Rules
9
+ class Nth < ::Avm::Scms::AutoCommit::Rules::Base
10
+ SHORT_KEY = 't'
11
+
12
+ class << self
13
+ def short_key
14
+ SHORT_KEY
15
+ end
16
+ end
17
+
18
+ common_constructor :number do
19
+ self.number = number.to_i
20
+ end
21
+
22
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
23
+ def commit_info
24
+ file.commits(number - 1).if_present { |v| new_commit_info.fixup(v) }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/auto_commit/rules/base'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ module Rules
9
+ class Unique < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
+ def commit_info
12
+ return nil unless file.commits.count == 1
13
+
14
+ new_commit_info.fixup(file.commits.first)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ EacRubyUtils.require_sub __FILE__
6
+
7
+ module Avm
8
+ module Scms
9
+ module AutoCommit
10
+ module Rules
11
+ RULES_CLASSES = %w[last manual new nth unique]
12
+ .map { |key| ::Avm::Scms::AutoCommit::Rules.const_get(key.camelcase) }
13
+
14
+ class << self
15
+ # @return [Array<Avm::Scms::AutoCommit::Rules>]
16
+ def all
17
+ RULES_CLASSES
18
+ end
19
+
20
+ def parse(string)
21
+ parts = string.split(':')
22
+
23
+ klass = rule_class_by_key(parts.shift)
24
+ klass.new(*parts)
25
+ end
26
+
27
+ def rule_class_by_key(key)
28
+ RULES_CLASSES.find { |klass| klass.keys.include?(key) } ||
29
+ raise("Rule not find with key \"#{key}\" (Available: " \
30
+ "#{RULES_CLASSES.flat_map(&:keys).join(', ')})")
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ module AutoCommit
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class Base
8
+ module Commits
9
+ # @return [Avm::Scms::Commit,NilClass]
10
+ def commit_if_change(_message = nil)
11
+ raise_abstract_method __method__
12
+ end
13
+
14
+ # @return [Avm::Scms::Commit]
15
+ def head_commit
16
+ raise_abstract_method __method__
17
+ end
18
+
19
+ # @param commit_to_reset [Avm::Scms::Commit]
20
+ # @param commit_info [Avm::Scms::CommitInfo]
21
+ # @return [Avm::Scms::Commit]
22
+ def reset_and_commit(_commit_to_reset, _commit_info)
23
+ raise_abstract_method __method__
24
+ end
25
+
26
+ # @param commit_info [Avm::Scms::CommitInfo]
27
+ # @return [Avm::Scms::Commit]
28
+ def run_commit(_commit_info)
29
+ raise_abstract_method __method__
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class Base
8
+ module Milestones
9
+ # @return [Avm::Scms::Interval]
10
+ def current_milestone_interval
11
+ interval(current_milestone_base_commit, head_commit)
12
+ end
13
+
14
+ # @return [Avm::Scms::Commit]
15
+ def current_milestone_base_commit
16
+ raise_abstract_method __method__
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/with/application_stereotype'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module Scms
8
+ class Base
9
+ require_sub __FILE__, include_modules: true
10
+ enable_abstract_methods
11
+ enable_simple_cache
12
+ include ::Avm::With::ApplicationStereotype
13
+ abstract_methods :update, :valid?
14
+ common_constructor :path do
15
+ self.path = path.to_pathname
16
+ end
17
+
18
+ # @return [Avm::Scms::ChangedFile]
19
+ def changed_files
20
+ raise_abstract_method __method__
21
+ end
22
+
23
+ # @return [Avm::Scms::Interval]
24
+ def interval(_from, _to)
25
+ raise_abstract_method __method__
26
+ end
27
+
28
+ def name
29
+ self.class.name.demodulize
30
+ end
31
+
32
+ # @return [Pathname]
33
+ def relative_path_from_parent_scm
34
+ parent_scm.if_present(nil) do |v|
35
+ path.relative_path_from(v.path)
36
+ end
37
+ end
38
+
39
+ # @return [Enumerable<Avm::Scms::Base>]
40
+ def subs
41
+ raise_abstract_method __method__
42
+ end
43
+
44
+ def to_s
45
+ name
46
+ end
47
+
48
+ private
49
+
50
+ # @return [Avm::Scms::Base]
51
+ def parent_scm_uncached
52
+ ::Avm::Registry.scms.detect_by_path_optional(path.parent)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class ChangedFile
8
+ enable_abstract_methods
9
+
10
+ # @return [Pathname]
11
+ def absolute_path
12
+ path.expand_path(scm.path)
13
+ end
14
+
15
+ # @return [Pathname]
16
+ def path
17
+ raise_abstract_method __method__
18
+ end
19
+
20
+ # @return [Avm::Scms::Base]
21
+ def scm
22
+ raise_abstract_method __method__
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class Commit
8
+ enable_abstract_methods
9
+
10
+ # @return [Array<Pathname>]
11
+ def changed_files
12
+ raise_abstract_method __method__
13
+ end
14
+
15
+ def deploy_to_env_path(_target_env, _target_path)
16
+ raise_abstract_method __method__
17
+ end
18
+
19
+ # @return [Boolean]
20
+ def fixup?
21
+ raise_abstract_method __method__
22
+ end
23
+
24
+ def id
25
+ raise_abstract_method __method__
26
+ end
27
+
28
+ # @param other [Avm::Scms::Commit]
29
+ # @return [Avm::Scms::Commit]
30
+ def merge_with(_other)
31
+ raise_abstract_method __method__
32
+ end
33
+
34
+ # @return [Array<Pathname>]
35
+ def no_scm_changed_files
36
+ changed_files.reject { |path| scm_file?(path) }
37
+ end
38
+
39
+ # @param new_message [String]
40
+ def reword(_new_message)
41
+ raise_abstract_method __method__
42
+ end
43
+
44
+ # @return [Array<Pathname>]
45
+ def scm_changed_files
46
+ changed_files.select { |path| scm_file?(path) }
47
+ end
48
+
49
+ # @param path [Pathname]
50
+ # @return [TrueClass,FalseClass]
51
+ def scm_file?(_path)
52
+ raise_abstract_method __method__
53
+ end
54
+
55
+ # @return [String]
56
+ def subject
57
+ raise_abstract_method __method__
58
+ end
59
+
60
+ # @return [String]
61
+ def to_s
62
+ "#{subject} [#{id}]"
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class CommitInfo
8
+ class << self
9
+ # @param source [Avm::Scms::CommitInfo, String]
10
+ # @return [Avm::Scms::CommitInfo]
11
+ def assert(source)
12
+ return source if source.is_a?(self)
13
+ return new if source.nil?
14
+ return new.message(source) if source.is_a?(::String)
15
+ return assert(source.call) if source.is_a?(::Proc)
16
+
17
+ raise "Unmapped assertion for #{source.to_debug}"
18
+ end
19
+ end
20
+
21
+ enable_immutable
22
+
23
+ immutable_accessor :fixup, :message
24
+ immutable_accessor :path, type: :array
25
+
26
+ def to_s
27
+ "#{self.class.name.demodulize}[#{attributes_to_s}]"
28
+ end
29
+
30
+ private
31
+
32
+ # @return [String]
33
+ def attributes_to_s
34
+ %w[fixup message].map { |m| [m, send(m)] }.reject { |m| m[1].blank? }
35
+ .map { |m| m.join(': ') }.join(',')
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module Scms
5
+ class Inflector
6
+ class << self
7
+ def default_instance
8
+ @default_instance ||= new
9
+ end
10
+ end
11
+
12
+ ISSUE_POINTER_NAME_PREFIX = 'issue_'
13
+ POINTER_NAME_TO_ISSUE_PATTERN = /\A#{Regexp.quote(ISSUE_POINTER_NAME_PREFIX)}(\d+)\z/.freeze
14
+ POINTER_NAME_TO_ISSUE_PARSER = POINTER_NAME_TO_ISSUE_PATTERN.to_parser { |m| m[1] }
15
+
16
+ # @return [String, nil]
17
+ def pointer_name_to_issue_id(pointer_name)
18
+ POINTER_NAME_TO_ISSUE_PARSER.parse(pointer_name)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class Interval
8
+ enable_abstract_methods
9
+
10
+ common_constructor :scm, :from, :to
11
+
12
+ # @return [Array<Avm::Scms::Commit>]
13
+ def commits
14
+ raise_abstract_method __method__
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/scms/base'
4
+ require 'avm/scms/commit'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module Scms
9
+ class Null < ::Avm::Scms::Base
10
+ class Commit < ::Avm::Scms::Commit
11
+ common_constructor :scm
12
+ end
13
+ end
14
+ end
15
+ end