avm 0.3.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/lib/avm/data/instance/files_unit.rb +40 -0
  3. data/lib/avm/data/instance/package.rb +18 -0
  4. data/lib/avm/data/instance/unit.rb +17 -0
  5. data/lib/avm/{git/issue.rb → data/instance.rb} +2 -2
  6. data/lib/avm/data/package/dump.rb +119 -0
  7. data/lib/avm/data/package/load.rb +48 -0
  8. data/lib/avm/data/package.rb +42 -0
  9. data/lib/avm/data/unit.rb +94 -0
  10. data/lib/avm/jobs/base.rb +62 -0
  11. data/lib/avm/jobs/variables_source.rb +22 -0
  12. data/lib/avm/{git/organize.rb → jobs.rb} +2 -4
  13. data/lib/avm/path_string.rb +27 -0
  14. data/lib/avm/registry/base.rb +65 -0
  15. data/lib/avm/registry.rb +29 -0
  16. data/lib/avm/rspec/setup.rb +22 -0
  17. data/lib/avm/rspec/shared_examples/in_avm_registry.rb +11 -0
  18. data/lib/avm/rspec/shared_examples/not_in_avm_registry.rb +14 -0
  19. data/lib/avm/rspec.rb +9 -0
  20. data/lib/avm/scms/base.rb +28 -0
  21. data/lib/avm/scms/commit.rb +43 -0
  22. data/lib/avm/source_stereotypes/base.rb +21 -0
  23. data/lib/avm/sources/base.rb +67 -0
  24. data/lib/avm/sources/configuration/_locale.rb +16 -0
  25. data/lib/avm/sources/configuration/_rubocop.rb +24 -0
  26. data/lib/avm/sources/configuration/_tests.rb +27 -0
  27. data/lib/avm/sources/configuration.rb +55 -0
  28. data/lib/avm/sources.rb +9 -0
  29. data/lib/avm/sync.rb +94 -0
  30. data/lib/avm/version.rb +1 -1
  31. metadata +80 -68
  32. data/lib/avm/files/appendable/file_content.rb +0 -24
  33. data/lib/avm/files/appendable/plain_directory.rb +0 -25
  34. data/lib/avm/files/appendable/resource_base.rb +0 -13
  35. data/lib/avm/files/appendable/tar_output_command.rb +0 -26
  36. data/lib/avm/files/appendable/templatized_directory.rb +0 -29
  37. data/lib/avm/files/appendable.rb +0 -55
  38. data/lib/avm/files/appender.rb +0 -11
  39. data/lib/avm/files/deploy.rb +0 -71
  40. data/lib/avm/files/formatter/formats/base.rb +0 -62
  41. data/lib/avm/files/formatter/formats/generic_plain.rb +0 -34
  42. data/lib/avm/files/formatter/formats/html.rb +0 -45
  43. data/lib/avm/files/formatter/formats/javascript.rb +0 -23
  44. data/lib/avm/files/formatter/formats/json.rb +0 -27
  45. data/lib/avm/files/formatter/formats/php.rb +0 -21
  46. data/lib/avm/files/formatter/formats/python.rb +0 -21
  47. data/lib/avm/files/formatter/formats/ruby.rb +0 -22
  48. data/lib/avm/files/formatter/formats/xml.rb +0 -27
  49. data/lib/avm/files/formatter/formats.rb +0 -13
  50. data/lib/avm/files/formatter/utf8_assert.rb +0 -72
  51. data/lib/avm/files/formatter.rb +0 -90
  52. data/lib/avm/files/info.rb +0 -24
  53. data/lib/avm/files/rotate.rb +0 -107
  54. data/lib/avm/files.rb +0 -9
  55. data/lib/avm/git/auto_commit/commit_info.rb +0 -23
  56. data/lib/avm/git/auto_commit/rules/base.rb +0 -39
  57. data/lib/avm/git/auto_commit/rules/last.rb +0 -19
  58. data/lib/avm/git/auto_commit/rules/manual.rb +0 -45
  59. data/lib/avm/git/auto_commit/rules/new.rb +0 -24
  60. data/lib/avm/git/auto_commit/rules/nth.rb +0 -31
  61. data/lib/avm/git/auto_commit/rules/unique.rb +0 -21
  62. data/lib/avm/git/auto_commit/rules.rb +0 -31
  63. data/lib/avm/git/auto_commit_path/ruby.rb +0 -20
  64. data/lib/avm/git/auto_commit_path.rb +0 -28
  65. data/lib/avm/git/commit/class_methods.rb +0 -31
  66. data/lib/avm/git/commit/deploy.rb +0 -38
  67. data/lib/avm/git/commit/deploy_methods.rb +0 -19
  68. data/lib/avm/git/commit/diff_tree_line.rb +0 -32
  69. data/lib/avm/git/commit/file.rb +0 -46
  70. data/lib/avm/git/commit.rb +0 -59
  71. data/lib/avm/git/file_auto_fixup.rb +0 -83
  72. data/lib/avm/git/issue/complete/commits.rb +0 -42
  73. data/lib/avm/git/issue/complete/git_subrepos.rb +0 -23
  74. data/lib/avm/git/issue/complete/local_branch.rb +0 -54
  75. data/lib/avm/git/issue/complete/local_tag.rb +0 -39
  76. data/lib/avm/git/issue/complete/push.rb +0 -54
  77. data/lib/avm/git/issue/complete/remote.rb +0 -33
  78. data/lib/avm/git/issue/complete/test.rb +0 -45
  79. data/lib/avm/git/issue/complete/tracker.rb +0 -28
  80. data/lib/avm/git/issue/complete/validation.rb +0 -31
  81. data/lib/avm/git/issue/complete/validations.rb +0 -53
  82. data/lib/avm/git/issue/complete/working_tree.rb +0 -19
  83. data/lib/avm/git/issue/complete.rb +0 -51
  84. data/lib/avm/git/issue/deliver.rb +0 -56
  85. data/lib/avm/git/organize/reference_update.rb +0 -34
  86. data/lib/avm/git/organize/repository.rb +0 -76
  87. data/lib/avm/git/revision_test.rb +0 -106
  88. data/lib/avm/git/subrepo_check/parent.rb +0 -51
  89. data/lib/avm/git/subrepo_check/remote.rb +0 -89
  90. data/lib/avm/git/subrepo_check/show_result.rb +0 -32
  91. data/lib/avm/git/subrepo_check.rb +0 -38
  92. data/lib/avm/git/subrepo_checks.rb +0 -59
  93. data/lib/avm/git.rb +0 -10
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- module Organize
8
- class Repository
9
- enable_simple_cache
10
- common_constructor :eac_git_local
11
-
12
- def collected_references
13
- @collected_references || []
14
- end
15
-
16
- def collect_subrepos
17
- collect_references_with_pattern(
18
- %r{\Asubrepo/},
19
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
20
- )
21
- collect_references_with_pattern(
22
- %r{\Aheads/subrepo/},
23
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
24
- )
25
- end
26
-
27
- def collect_originals
28
- collect_references_with_pattern(
29
- %r{\Aoriginal/},
30
- ::Avm::Git::Organize::ReferenceUpdate::OPERATION_REMOVE
31
- )
32
- end
33
-
34
- def all_branches
35
- eac_git_local.execute!
36
- end
37
-
38
- delegate :to_s, to: :eac_git_local
39
-
40
- private
41
-
42
- def all_references
43
- ::Pathname.glob("#{refs_root}/**/*").select(&:file?)
44
- .map { |p| p.relative_path_from(refs_root).to_path }
45
- end
46
-
47
- def reference_update_by_ref(reference)
48
- collected_references.find { |ru| ru.reference == reference }
49
- end
50
-
51
- def collect_reference(reference, operation)
52
- new_ru = ::Avm::Git::Organize::ReferenceUpdate.new(self, reference, operation)
53
- reference_update_by_ref(new_ru.reference).if_present do |ru_found|
54
- raise "Reference #{new_ru} already added (#{ru_found})"
55
- end
56
- @collected_references ||= []
57
- @collected_references << new_ru
58
- end
59
-
60
- def collect_references_with_pattern(pattern, operation)
61
- references_with_pattern(pattern).each do |reference|
62
- collect_reference(reference, operation)
63
- end
64
- end
65
-
66
- def references_with_pattern(pattern)
67
- all_references.select { |reference| pattern.if_match(reference, false) }
68
- end
69
-
70
- def refs_root_uncached
71
- eac_git_local.root_path / '.git' / 'refs'
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,106 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/fs_cache'
4
- require 'eac_ruby_utils/core_ext'
5
- require 'eac_ruby_utils/ruby'
6
-
7
- module Avm
8
- module Git
9
- class RevisionTest
10
- enable_simple_cache
11
- enable_speaker
12
- common_constructor :git, :sha1, :options
13
-
14
- def banner
15
- infov 'Revision to test', sha1
16
- ::EacRubyUtils::Speaker.context.on(::EacCli::Speaker.new(err_line_prefix: ' ')) do
17
- revision_banner
18
- end
19
- end
20
-
21
- def successful_label
22
- successful?.to_s.send((successful? ? :green : :red))
23
- end
24
-
25
- def to_s
26
- sha1
27
- end
28
-
29
- def successful?
30
- successful
31
- end
32
-
33
- private
34
-
35
- def checkout_revision
36
- infom 'Checking out revision...'
37
- git.execute!('checkout', sha1)
38
- end
39
-
40
- def commit_uncached
41
- ::Avm::Git::Commit.new(git, sha1)
42
- end
43
-
44
- def git_absolute_path
45
- ::File.expand_path(git.to_s)
46
- end
47
-
48
- def revision_banner
49
- infov '* Subject', commit.subject
50
- infov '* Success?', successful_label
51
- infov '* STDOUT', stdout_cache.content_path
52
- infov '* STDERR', stderr_cache.content_path
53
- end
54
-
55
- def root_cache
56
- ::Avm.fs_cache.child('git', 'revision_test', git_absolute_path.parameterize, sha1,
57
- options.fetch(:test_command).to_s.parameterize)
58
- end
59
-
60
- def run_test
61
- infom "Running test command \"#{::Shellwords.join(test_command_args)}\"" \
62
- " on \"#{git_absolute_path}\"..."
63
- result = ::EacRubyUtils::Ruby.on_clean_environment { test_command.execute }
64
- infom 'Test done'
65
- write_result_cache(result)
66
- end
67
-
68
- def stdout_cache
69
- root_cache.child('stdout')
70
- end
71
-
72
- def stderr_cache
73
- root_cache.child('stderr')
74
- end
75
-
76
- def successful_cache
77
- root_cache.child('successful')
78
- end
79
-
80
- def successful_uncached
81
- if options.fetch(:no_cache) || !successful_cache.cached?
82
- checkout_revision
83
- run_test
84
- end
85
- successful_cache.read == 'true'
86
- end
87
-
88
- def test_command
89
- ::EacRubyUtils::Envs.local.command(*test_command_args).chdir(git.to_s)
90
- end
91
-
92
- def test_command_args
93
- r = ::Shellwords.split(options.fetch(:test_command).to_s)
94
- return r if r.any?
95
-
96
- raise 'No command found'
97
- end
98
-
99
- def write_result_cache(result)
100
- stdout_cache.write(result[:stdout])
101
- stderr_cache.write(result[:stderr])
102
- successful_cache.write(result[:exit_code].zero? ? 'true' : 'false')
103
- end
104
- end
105
- end
106
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/result'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module Git
8
- class SubrepoCheck
9
- module Parent
10
- def fix_parent
11
- return if parent_result.success?
12
-
13
- info(' Fixing...')
14
- self.parent_hash = expected_parent_hash
15
- info_banner
16
- end
17
-
18
- private
19
-
20
- def expected_parent_hash_uncached
21
- subrepo.local.rev_parse("#{last_file_change_rev}^")
22
- end
23
-
24
- def last_file_change_rev
25
- subrepo.local.command('log', '-n', '1', '--pretty=format:%H', '--',
26
- subrepo.config_relative_path.to_path).execute!.strip
27
- end
28
-
29
- def parent_hash
30
- subrepo.parent_commit_id
31
- end
32
-
33
- def parent_hash=(new_hash)
34
- subrepo.config.parent_commit_id = new_hash
35
- subrepo.write_config
36
- end
37
-
38
- def parent_hash_ok?
39
- return false if expected_parent_hash.blank? || parent_hash.blank?
40
-
41
- expected_parent_hash == parent_hash
42
- end
43
-
44
- def parent_result_uncached
45
- ::Avm::Result.success_or_error(parent_hash_ok?,
46
- parent_hash.presence || blank_text)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/result'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module Git
8
- class SubrepoCheck
9
- module Remote
10
- private
11
-
12
- def fetch_uncached
13
- subrepo.command('clean').execute!
14
- subrepo.command('fetch').execute!
15
- end
16
-
17
- def check_remote_disabled?
18
- !check_remote?
19
- end
20
-
21
- def check_remote_disabled_result
22
- ::Avm::Result.neutral('Check remote disabled')
23
- end
24
-
25
- def local_descend_remote?
26
- local_id.present? && remote_id.present? && subrepo.local.descendant?(local_id, remote_id)
27
- end
28
-
29
- def local_descend_remote_result
30
- ::Avm::Result.pending(remote_result_value)
31
- end
32
-
33
- def local_id_uncached
34
- fetch
35
- subrepo.command('branch', '--force').execute!
36
- subrepo.local.rev_parse("subrepo/#{subrepo.subpath}")
37
- end
38
-
39
- def remote_descend_local?
40
- local_id.present? && remote_id.present? && subrepo.local.descendant?(remote_id, local_id)
41
- end
42
-
43
- def remote_descend_local_result
44
- ::Avm::Result.outdated(remote_result_value)
45
- end
46
-
47
- def remote_branches
48
- ['', 'refs/heads/', 'refs/tags/'].map { |prefix| "#{prefix}#{subrepo.remote_branch}" }
49
- end
50
-
51
- def remote_id_uncached
52
- ls_result = subrepo.remote.ls
53
- remote_branches.each do |b|
54
- return ls_result[b] if ls_result[b].present?
55
- end
56
- nil
57
- end
58
-
59
- def remote_result_uncached
60
- %w[check_remote_disabled same_ids local_descend_remote remote_descend_local]
61
- .each do |condition|
62
- return send("#{condition}_result") if send("#{condition}?")
63
- end
64
-
65
- ::Avm::Result.error(remote_result_value)
66
- end
67
-
68
- def remote_result_value
69
- local_s = local_id.presence || blank_text
70
- remote_s = remote_id.presence || blank_text
71
-
72
- if local_s == remote_s
73
- "[L/R=#{local_s}]"
74
- else
75
- "[L=#{local_s}, R=#{remote_s}]"
76
- end
77
- end
78
-
79
- def same_ids?
80
- local_id.present? && remote_id.present? && local_id == remote_id
81
- end
82
-
83
- def same_ids_result
84
- ::Avm::Result.success(remote_result_value)
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- class SubrepoCheck
8
- module ShowResult
9
- def show_result
10
- out(subrepo.subpath.to_path.cyan)
11
- out_attr('parent', parent_result.label)
12
- run_fix_parent
13
- out_attr('remote', remote_result.label)
14
- out("\n")
15
- end
16
-
17
- def run_fix_parent
18
- return unless fix_parent?
19
- return unless parent_result.error?
20
-
21
- out('|Fixing...'.white)
22
- self.parent_hash = expected_parent_hash
23
- out_attr('new parent', parent_result.label)
24
- end
25
-
26
- def out_attr(key, value)
27
- out('|' + "#{key}=".white + value)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/core_ext'
4
-
5
- module Avm
6
- module Git
7
- class SubrepoCheck
8
- require_sub __FILE__, include_modules: true
9
- enable_speaker
10
- enable_simple_cache
11
-
12
- BLANK_TEXT = 'BLANK'
13
-
14
- common_constructor :subrepo, :options
15
-
16
- def blank_text
17
- BLANK_TEXT
18
- end
19
-
20
- def check_remote?
21
- options.fetch(:check_remote) ? true : false
22
- end
23
-
24
- def fix_parent?
25
- options.fetch(:fix_parent) ? true : false
26
- end
27
-
28
- private
29
-
30
- def result_uncached
31
- return ::Avm::Result.error('Parent failed') if parent_result.error?
32
- return ::Avm::Result.error('Remote failed') if remote_result.error?
33
-
34
- ::Avm::Result.success('Parent and remote ok')
35
- end
36
- end
37
- end
38
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'avm/git/subrepo_check'
4
- require 'eac_ruby_utils/core_ext'
5
-
6
- module Avm
7
- module Git
8
- class SubrepoChecks
9
- enable_speaker
10
- enable_simple_cache
11
- attr_accessor :check_remote, :fix_parent
12
- common_constructor :repository
13
-
14
- def add_all_subrepos
15
- add_subrepos(
16
- *repository.command('subrepo', '-q', 'status').execute!.split("\n").map(&:strip)
17
- .select(&:present?)
18
- )
19
- end
20
-
21
- def add_subrepos(*subpath_list)
22
- subpath_list.each do |subpath|
23
- subpaths.add(subpath)
24
- end
25
- reset_cache
26
- self
27
- end
28
-
29
- def check_options
30
- { fix_parent: fix_parent, check_remote: check_remote }
31
- end
32
-
33
- def show_result
34
- checks.each(&:show_result)
35
- infov 'Result', result.label
36
- end
37
-
38
- private
39
-
40
- def checks_uncached
41
- subpaths.map do |subpath|
42
- ::Avm::Git::SubrepoCheck.new(repository.subrepo(subpath), check_options)
43
- end
44
- end
45
-
46
- def result_uncached
47
- error_count = checks.count { |check| check.result.error? }
48
- ::Avm::Result.success_or_error(
49
- error_count.zero?,
50
- "#{error_count} of #{checks.count} subrepos failed"
51
- )
52
- end
53
-
54
- def subpaths
55
- @subpaths ||= ::Set.new
56
- end
57
- end
58
- end
59
- end
data/lib/avm/git.rb DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'eac_ruby_utils/require_sub'
4
- ::EacRubyUtils.require_sub(__FILE__)
5
-
6
- module Avm
7
- module Git
8
- DEFAULT_REMOTE_NAME = 'origin'
9
- end
10
- end