eac_tools 0.48.1 → 0.50.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +21 -21
  3. data/lib/eac_tools/version.rb +1 -1
  4. data/sub/avm/avm.gemspec +2 -2
  5. data/sub/avm/lib/avm/registry/sources.rb +21 -0
  6. data/sub/avm/lib/avm/scms/auto_commit/file_resource_name/ruby.rb +23 -0
  7. data/sub/avm/lib/avm/scms/auto_commit/file_resource_name.rb +31 -0
  8. data/sub/avm/lib/avm/scms/auto_commit/for_file.rb +72 -0
  9. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules/base.rb +3 -2
  10. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules/last.rb +4 -4
  11. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules/manual.rb +5 -10
  12. data/sub/avm/lib/avm/scms/auto_commit/rules/new.rb +24 -0
  13. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules/nth.rb +4 -4
  14. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules/unique.rb +4 -4
  15. data/sub/{avm-git/lib/avm/git → avm/lib/avm/scms}/auto_commit/rules.rb +7 -2
  16. data/sub/avm/lib/avm/scms/auto_commit.rb +11 -0
  17. data/sub/avm/lib/avm/scms/base/commits.rb +27 -0
  18. data/sub/avm/lib/avm/scms/base/milestones.rb +21 -0
  19. data/sub/avm/lib/avm/scms/base.rb +8 -2
  20. data/sub/avm/lib/avm/scms/changed_file.rb +26 -0
  21. data/sub/avm/lib/avm/scms/commit.rb +15 -0
  22. data/sub/avm/lib/avm/scms/commit_info.rb +20 -0
  23. data/sub/avm/lib/avm/scms/interval.rb +18 -0
  24. data/sub/avm/lib/avm/scms.rb +9 -0
  25. data/sub/avm/lib/avm/sources/base/stereotype.rb +18 -0
  26. data/sub/avm/lib/avm/version.rb +1 -1
  27. data/sub/{avm-git/spec/lib/avm/git/auto_commit_path_spec.rb → avm/spec/lib/avm/scms/auto_commit/file_resource_name_spec.rb} +2 -2
  28. data/sub/avm-git/avm-git.gemspec +3 -3
  29. data/sub/avm-git/lib/avm/git/scms/git/changed_file.rb +16 -0
  30. data/sub/avm-git/lib/avm/git/scms/git/changed_files.rb +24 -0
  31. data/sub/avm-git/lib/avm/git/scms/git/commit.rb +10 -0
  32. data/sub/avm-git/lib/avm/git/scms/git/commits.rb +57 -0
  33. data/sub/avm-git/lib/avm/git/scms/git/interval.rb +31 -0
  34. data/sub/avm-git/lib/avm/git/scms/git/milestones.rb +21 -0
  35. data/sub/avm-git/lib/avm/git/scms/git/run_commit.rb +57 -0
  36. data/sub/avm-git/lib/avm/git/scms/git.rb +6 -35
  37. data/sub/avm-git/lib/avm/git/scms/git_subrepo.rb +2 -1
  38. data/sub/avm-git/lib/avm/git/version.rb +1 -1
  39. data/sub/avm-tools/avm-tools.gemspec +2 -2
  40. data/sub/avm-tools/lib/avm/tools/runner/git/subrepo/fix.rb +12 -4
  41. data/sub/avm-tools/lib/avm/tools/runner/{git → source}/auto_commit.rb +12 -9
  42. data/sub/avm-tools/lib/avm/tools/version.rb +1 -1
  43. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/{value.rb → item.rb} +7 -13
  44. data/sub/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +14 -4
  45. data/sub/eac_ruby_utils/lib/eac_ruby_utils/patches/pathname/assert_parent.rb +12 -0
  46. data/sub/eac_ruby_utils/lib/eac_ruby_utils/version.rb +1 -1
  47. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +10 -10
  48. data/sub/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/pathname/assert_parent_spec.rb +21 -0
  49. metadata +39 -30
  50. data/sub/avm-git/lib/avm/git/auto_commit/commit_info.rb +0 -23
  51. data/sub/avm-git/lib/avm/git/auto_commit/rules/new.rb +0 -24
  52. data/sub/avm-git/lib/avm/git/auto_commit_path/ruby.rb +0 -20
  53. data/sub/avm-git/lib/avm/git/auto_commit_path.rb +0 -28
  54. data/sub/avm-git/lib/avm/git/file_auto_fixup.rb +0 -83
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3952d236b92a07dab2d6090167fce27692d8c9a12114d77ec5cf17b55a914c91
4
- data.tar.gz: ce7c0f2f4855475d499a72a0f5e956468e79e9f38b49004fecd94400e2f24662
3
+ metadata.gz: d4beb83e6ea4860f6c6b5a5e9cc4d06bc5fb2dbea75a75d431a9c37bae9070e9
4
+ data.tar.gz: c982c7cd5fd95f92ac4d656df233600745a0a6f58cc1d662456804eda7a3a9e7
5
5
  SHA512:
6
- metadata.gz: ffc30f40ffde2c2454d4939a491dbc1671da9481be935c5a07b3fa5a65a9e2a05307238e7100620a92c8e86c99667ebb1aee589d283884a69d5a2b013a054649
7
- data.tar.gz: 6c30ff53dfe58d88fb1af3162121d36c8e7c68c056d9850b897d0e6e1b233be149e72b6f2a9d9c075db6a11da45cfa1c24b1d9c62ba6620fab223e5f97b97862
6
+ metadata.gz: 10951929bb08a90e4d521c8f04baede258a04b8a4832a7770b765395616d5e7ec57dd88b5c6631d96a7aaeb5bb10f87cb99206e33ea86e3db635bee1b72a8d69
7
+ data.tar.gz: a2134fad70db674197dade76b08aa2acfd16e4c8e6af35d5eb12b9a7447145055941e22af96e3280b8de0c1770ec6ac40486fde50fa4ba6c3e7c95f883a9db16
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eac_tools (0.48.1)
5
- avm (~> 0.57)
4
+ eac_tools (0.50.0)
5
+ avm (~> 0.59)
6
6
  avm-eac_asciidoctor_base0 (~> 0.13)
7
7
  avm-eac_generic_base0 (~> 0.8)
8
8
  avm-eac_latex_base0 (~> 0.3)
@@ -16,8 +16,8 @@ PATH
16
16
  avm-eac_ruby_base1 (~> 0.27, >= 0.27.3)
17
17
  avm-eac_webapp_base0 (~> 0.13)
18
18
  avm-eac_wordpress_base0 (~> 0.3)
19
- avm-tools (~> 0.142, >= 0.142.8)
20
- eac_ruby_utils (~> 0.109, >= 0.109.1)
19
+ avm-tools (~> 0.143)
20
+ eac_ruby_utils (~> 0.110, >= 0.110.1)
21
21
 
22
22
  PATH
23
23
  remote: sub/aranha-parsers
@@ -163,23 +163,23 @@ PATH
163
163
  PATH
164
164
  remote: sub/avm-git
165
165
  specs:
166
- avm-git (0.10.1)
167
- avm (~> 0.57)
166
+ avm-git (0.11.0)
167
+ avm (~> 0.59)
168
168
  avm-files (~> 0.6)
169
169
  eac_git (~> 0.14)
170
- eac_ruby_utils (~> 0.108)
171
- git (~> 1.12)
170
+ eac_ruby_utils (~> 0.110, >= 0.110.1)
171
+ git (~> 1.13)
172
172
 
173
173
  PATH
174
174
  remote: sub/avm-tools
175
175
  specs:
176
- avm-tools (0.142.8)
176
+ avm-tools (0.143.0)
177
177
  aranha-parsers (~> 0.14, >= 0.14.4)
178
- avm (~> 0.57)
178
+ avm (~> 0.59)
179
179
  avm-eac_ruby_base1 (~> 0.27, >= 0.27.3)
180
180
  avm-eac_ubuntu_base0 (~> 0.4)
181
181
  avm-files (~> 0.6)
182
- avm-git (~> 0.10, >= 0.10.1)
182
+ avm-git (~> 0.11)
183
183
  clipboard (~> 1.3, >= 1.3.6)
184
184
  curb (~> 0.9, >= 0.9.11)
185
185
  eac_git (~> 0.14)
@@ -191,14 +191,14 @@ PATH
191
191
  PATH
192
192
  remote: sub/avm
193
193
  specs:
194
- avm (0.57.0)
194
+ avm (0.59.0)
195
195
  aranha-parsers (~> 0.14, >= 0.14.4)
196
196
  eac_cli (~> 0.30)
197
197
  eac_config (~> 0.12)
198
198
  eac_docker (~> 0.5)
199
- eac_fs (~> 0.15)
199
+ eac_fs (~> 0.16)
200
200
  eac_git (~> 0.14)
201
- eac_ruby_utils (~> 0.107, >= 0.107.1)
201
+ eac_ruby_utils (~> 0.110, >= 0.110.1)
202
202
  eac_templates (~> 0.3, >= 0.3.2)
203
203
  filesize (~> 0.2)
204
204
  htmlbeautifier (~> 1.4, >= 1.4.2)
@@ -253,7 +253,7 @@ PATH
253
253
  PATH
254
254
  remote: sub/eac_ruby_utils
255
255
  specs:
256
- eac_ruby_utils (0.109.1)
256
+ eac_ruby_utils (0.110.1)
257
257
  activesupport (>= 4, < 7)
258
258
  addressable (~> 2.8, >= 2.8.1)
259
259
  bundler
@@ -329,7 +329,7 @@ GEM
329
329
  concurrent-ruby (~> 1.0)
330
330
  jaro_winkler (1.5.4)
331
331
  minitar (0.9)
332
- minitest (5.16.3)
332
+ minitest (5.17.0)
333
333
  multipart-post (2.2.3)
334
334
  net-ssh (4.2.0)
335
335
  nokogiri (1.13.10-x86_64-linux)
@@ -339,12 +339,12 @@ GEM
339
339
  os (1.1.4)
340
340
  parallel (1.22.1)
341
341
  parseconfig (1.1.2)
342
- parser (3.1.3.0)
342
+ parser (3.2.0.0)
343
343
  ast (~> 2.4.1)
344
344
  parslet (2.0.0)
345
345
  public_suffix (5.0.1)
346
- racc (1.6.1)
347
- rack (3.0.2)
346
+ racc (1.6.2)
347
+ rack (3.0.3)
348
348
  rainbow (3.1.1)
349
349
  rchardet (1.8.0)
350
350
  rexml (3.2.5)
@@ -355,10 +355,10 @@ GEM
355
355
  rspec-mocks (~> 3.12.0)
356
356
  rspec-core (3.12.0)
357
357
  rspec-support (~> 3.12.0)
358
- rspec-expectations (3.12.0)
358
+ rspec-expectations (3.12.2)
359
359
  diff-lcs (>= 1.2.0, < 2.0)
360
360
  rspec-support (~> 3.12.0)
361
- rspec-mocks (3.12.1)
361
+ rspec-mocks (3.12.2)
362
362
  diff-lcs (>= 1.2.0, < 2.0)
363
363
  rspec-support (~> 3.12.0)
364
364
  rspec-support (3.12.0)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacTools
4
- VERSION = '0.48.1'
4
+ VERSION = '0.50.0'
5
5
  end
data/sub/avm/avm.gemspec CHANGED
@@ -16,9 +16,9 @@ Gem::Specification.new do |s|
16
16
  s.add_dependency 'eac_cli', '~> 0.30'
17
17
  s.add_dependency 'eac_config', '~> 0.12'
18
18
  s.add_dependency 'eac_docker', '~> 0.5'
19
- s.add_dependency 'eac_fs', '~> 0.15'
19
+ s.add_dependency 'eac_fs', '~> 0.16'
20
20
  s.add_dependency 'eac_git', '~> 0.14'
21
- s.add_dependency 'eac_ruby_utils', '~> 0.107', '>= 0.107.1'
21
+ s.add_dependency 'eac_ruby_utils', '~> 0.110', '>= 0.110.1'
22
22
  s.add_dependency 'eac_templates', '~> 0.3', '>= 0.3.2'
23
23
  s.add_dependency 'filesize', '~> 0.2'
24
24
  s.add_dependency 'htmlbeautifier', '~> 1.4', '>= 1.4.2'
@@ -5,6 +5,27 @@ require 'avm/registry/with_path'
5
5
  module Avm
6
6
  module Registry
7
7
  class Sources < ::Avm::Registry::WithPath
8
+ # @return [Avm::ApplicationStereotypes::Base]
9
+ def application_stereotype_by_name(name)
10
+ ::Avm::Registry.application_stereotypes.detect(name)
11
+ end
12
+
13
+ # @return [Avm::Sources::Base, nil]
14
+ def detect_optional(*detect_args)
15
+ detect_optional_by_configuration(*detect_args) || super
16
+ end
17
+
18
+ # @return [Avm::Sources::Base, nil]
19
+ def detect_optional_by_configuration(path, *detect_args)
20
+ source_configured_stereotype_name(path).if_present do |v|
21
+ application_stereotype_by_name(v).source_class.new(path, *detect_args)
22
+ end
23
+ end
24
+
25
+ # @return [String]
26
+ def source_configured_stereotype_name(path)
27
+ ::Avm::Sources::Base.new(path).stereotype_name_by_configuration
28
+ end
8
29
  end
9
30
  end
10
31
  end
@@ -0,0 +1,23 @@
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
+ module Ruby
10
+ RUBY_CLASS_NAME_PATTERNS = [%r{lib/((?!.*/lib/).+)\.rb\z},
11
+ %r{app/[^/]+/(.+)\.rb\z}].freeze
12
+
13
+ def ruby_class_name
14
+ RUBY_CLASS_NAME_PATTERNS.each do |pattern|
15
+ pattern.if_match(relative_path.to_path, false) { |m| return m[1].camelize }
16
+ end
17
+ nil
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,31 @@
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
+ common_constructor :source_root, :path do
11
+ self.source_root = source_root.to_pathname
12
+ self.path = path.to_pathname
13
+ end
14
+
15
+ def class_name
16
+ ruby_class_name || relative_path.to_path
17
+ end
18
+
19
+ def commit_message
20
+ r = class_name
21
+ r += ': remove' unless path.file?
22
+ r + '.'
23
+ end
24
+
25
+ def relative_path
26
+ path.expand_path.relative_path_from(source_root.expand_path)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,72 @@
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
+ def commit_info_uncached
32
+ rules.lazy.map { |rule| rule.with_file(self).commit_info }.find(&:present?)
33
+ .if_present { |v| v.path(path) }
34
+ end
35
+
36
+ def start_banner
37
+ infov 'Path', path
38
+ infov ' Commits found', commits.count
39
+ end
40
+
41
+ def run_commit
42
+ return false if commit_info.blank?
43
+
44
+ infov ' Commit info', commit_info
45
+ scm.run_commit(commit_info)
46
+ success ' Commited'
47
+ true
48
+ end
49
+
50
+ def commits_uncached
51
+ scm.current_milestone_interval.commits
52
+ .select { |c| c.changed_files.include?(path.relative_path_from(scm.path)) }
53
+ .reject(&:fixup?).each_with_index
54
+ .map { |commit, index| CommitDelegator.new(commit, index) }
55
+ end
56
+
57
+ class CommitDelegator < ::SimpleDelegator
58
+ attr_reader :index
59
+
60
+ def initialize(commit, index)
61
+ super(commit)
62
+ @index = index
63
+ end
64
+
65
+ def position
66
+ index + 1
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avm/scms/commit_info'
3
4
  require 'eac_ruby_utils/core_ext'
4
5
 
5
6
  module Avm
6
- module Git
7
+ module Scms
7
8
  module AutoCommit
8
9
  module Rules
9
10
  class Base
@@ -29,7 +30,7 @@ module Avm
29
30
  common_constructor :rule, :file
30
31
 
31
32
  def new_commit_info
32
- ::Avm::Git::AutoCommit::CommitInfo.new
33
+ ::Avm::Scms::CommitInfo.new
33
34
  end
34
35
  end
35
36
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/git/auto_commit/rules/base'
3
+ require 'avm/scms/auto_commit/rules/base'
4
4
 
5
5
  module Avm
6
- module Git
6
+ module Scms
7
7
  module AutoCommit
8
8
  module Rules
9
- class Last < ::Avm::Git::AutoCommit::Rules::Base
10
- class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
9
+ class Last < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
11
  def commit_info
12
12
  file.commits.last.if_present { |v| new_commit_info.fixup(v) }
13
13
  end
@@ -1,16 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/git/auto_commit/rules/base'
3
+ require 'avm/scms/auto_commit/rules/base'
4
4
 
5
5
  module Avm
6
- module Git
6
+ module Scms
7
7
  module AutoCommit
8
8
  module Rules
9
- class Manual < ::Avm::Git::AutoCommit::Rules::Base
10
- class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
9
+ class Manual < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
11
  enable_speaker
12
12
 
13
- COMMIT_FORMAT = '%h - %s (%cr)'
14
13
  SKIP_OPTION = 's'
15
14
 
16
15
  def commit_info
@@ -24,7 +23,7 @@ module Avm
24
23
 
25
24
  def commits_banner
26
25
  file.commits.each_with_index do |commit, _index|
27
- infov " #{commit.position}", format_commit(commit)
26
+ infov " #{commit.position}", commit
28
27
  end
29
28
  infov " #{SKIP_OPTION}", 'skip'
30
29
  end
@@ -33,10 +32,6 @@ module Avm
33
32
  (file.commits.map { |commit| [commit.position.to_s, commit] } + [[SKIP_OPTION, nil]])
34
33
  .to_h
35
34
  end
36
-
37
- def format_commit(commit)
38
- commit.format(COMMIT_FORMAT)
39
- end
40
35
  end
41
36
  end
42
37
  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
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/git/auto_commit/rules/base'
3
+ require 'avm/scms/auto_commit/rules/base'
4
4
 
5
5
  module Avm
6
- module Git
6
+ module Scms
7
7
  module AutoCommit
8
8
  module Rules
9
- class Nth < ::Avm::Git::AutoCommit::Rules::Base
9
+ class Nth < ::Avm::Scms::AutoCommit::Rules::Base
10
10
  SHORT_KEY = 't'
11
11
 
12
12
  class << self
@@ -19,7 +19,7 @@ module Avm
19
19
  self.number = number.to_i
20
20
  end
21
21
 
22
- class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
22
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
23
23
  def commit_info
24
24
  file.commits(number - 1).if_present { |v| new_commit_info.fixup(v) }
25
25
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'avm/git/auto_commit/rules/base'
3
+ require 'avm/scms/auto_commit/rules/base'
4
4
 
5
5
  module Avm
6
- module Git
6
+ module Scms
7
7
  module AutoCommit
8
8
  module Rules
9
- class Unique < ::Avm::Git::AutoCommit::Rules::Base
10
- class WithFile < ::Avm::Git::AutoCommit::Rules::Base::WithFile
9
+ class Unique < ::Avm::Scms::AutoCommit::Rules::Base
10
+ class WithFile < ::Avm::Scms::AutoCommit::Rules::Base::WithFile
11
11
  def commit_info
12
12
  return nil unless file.commits.count == 1
13
13
 
@@ -5,13 +5,18 @@ require 'eac_ruby_utils/core_ext'
5
5
  ::EacRubyUtils.require_sub __FILE__
6
6
 
7
7
  module Avm
8
- module Git
8
+ module Scms
9
9
  module AutoCommit
10
10
  module Rules
11
11
  RULES_CLASSES = %w[last manual new nth unique]
12
- .map { |key| ::Avm::Git::AutoCommit::Rules.const_get(key.camelcase) }
12
+ .map { |key| ::Avm::Scms::AutoCommit::Rules.const_get(key.camelcase) }
13
13
 
14
14
  class << self
15
+ # @return [Array<Avm::Scms::AutoCommit::Rules>]
16
+ def all
17
+ RULES_CLASSES
18
+ end
19
+
15
20
  def parse(string)
16
21
  parts = string.split(':')
17
22
 
@@ -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,27 @@
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_info [Avm::Scms::CommitInfo]
20
+ # @return [Avm::Scms::Commit]
21
+ def run_commit(_commit_info)
22
+ raise_abstract_method __method__
23
+ end
24
+ end
25
+ end
26
+ end
27
+ 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
@@ -6,6 +6,7 @@ require 'eac_ruby_utils/core_ext'
6
6
  module Avm
7
7
  module Scms
8
8
  class Base
9
+ require_sub __FILE__, include_modules: true
9
10
  enable_abstract_methods
10
11
  enable_simple_cache
11
12
  include ::Avm::With::ApplicationStereotype
@@ -14,8 +15,13 @@ module Avm
14
15
  self.path = path.to_pathname
15
16
  end
16
17
 
17
- # @return [Avm::Scms::Commit,NilClass]
18
- def commit_if_change(_message = nil)
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)
19
25
  raise_abstract_method __method__
20
26
  end
21
27
 
@@ -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
@@ -16,6 +16,11 @@ module Avm
16
16
  raise_abstract_method __method__
17
17
  end
18
18
 
19
+ # @return [Boolean]
20
+ def fixup?
21
+ raise_abstract_method __method__
22
+ end
23
+
19
24
  def id
20
25
  raise_abstract_method __method__
21
26
  end
@@ -46,6 +51,16 @@ module Avm
46
51
  def scm_file?(_path)
47
52
  raise_abstract_method __method__
48
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
49
64
  end
50
65
  end
51
66
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ class CommitInfo
8
+ enable_immutable
9
+
10
+ immutable_accessor :fixup, :message
11
+ immutable_accessor :path, type: :array
12
+
13
+ def to_s
14
+ self.class.name.demodulize + '[' +
15
+ %w[fixup message].map { |m| [m, send(m)] }.reject { |m| m[1].blank? }
16
+ .map { |m| m.join(': ') }.join(',') + ']'
17
+ end
18
+ end
19
+ end
20
+ 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,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module Scms
7
+ require_sub __FILE__
8
+ end
9
+ end