Module: Ast::Merge::Git
- Defined in:
- lib/ast/merge/git.rb,
lib/ast/merge/git/corpus.rb,
lib/ast/merge/git/version.rb,
lib/ast/merge/git/local_benchmark.rb,
sig/ast/merge/git.rbs
Overview
Adapts Git merge-driver roles and outcomes to the portable provider API.
rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/ModuleLength -- Git protocol translation is one cohesive adapter boundary
Defined Under Namespace
Modules: Version
Classes: Corpus, CorpusAcquirer, CorpusRunner, LocalBenchmark, LocalBenchmarkReport, LocalBenchmarkRunner
Constant Summary
collapse
- PACKAGE_NAME =
'ast-merge-git'
- EXIT_SUCCESS =
0
- EXIT_CONFLICT =
1
- EXIT_ERROR =
2
- CONFLICT_POLICIES =
%i[write leave_ours].freeze
- ADAPTER_ERROR_CATEGORIES =
%i[
file_error
invalid_provider_output
invalid_provider_result
].freeze
- VERSION =
Current gem version exposed at the traditional constant location.
Version::VERSION
Class Method Summary
collapse
Class Method Details
.git_exit_code(result) ⇒ Integer
60
61
62
63
64
65
66
|
# File 'lib/ast/merge/git.rb', line 60
def git_exit_code(result)
return EXIT_SUCCESS if result[:ok]
return EXIT_ERROR if adapter_error?(result)
return EXIT_CONFLICT unless result.fetch(:conflicts, []).empty?
EXIT_ERROR
end
|
.merge3(request) ⇒ Hash[Symbol, untyped]
25
26
27
28
29
30
31
|
# File 'lib/ast/merge/git.rb', line 25
def merge3(request)
normalized = normalize_request(request)
provider_result = Ast::Merge.dispatch_provider(:merge3, provider_request(normalized))
adapt_provider_result(provider_result)
rescue Ast::Merge::ProviderContract::Error, ArgumentError, KeyError => e
adapt_provider_result(adapter_failure(:invalid_provider_result, e.message))
end
|
.merge_files(base_path:, ours_path:, theirs_path:, conflict_policy: :write, **request) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/ast/merge/git.rb', line 33
def merge_files(base_path:, ours_path:, theirs_path:, conflict_policy: :write, **request)
policy = normalize_conflict_policy(conflict_policy)
result = merge3(
request.merge(
base_source: File.binread(base_path),
ours_source: File.binread(ours_path),
theirs_source: File.binread(theirs_path),
path_name: request[:path_name] || ours_path
)
)
write_result(result, ours_path, policy)
rescue SystemCallError => e
file_failure = adapt_provider_result(adapter_failure(:file_error, e.message))
file_failure.merge(git: git_report(file_failure, ours_path, policy, output_written: false))
end
|
.run(argv, env: ENV, stderr: $stderr) ⇒ Integer
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/ast/merge/git.rb', line 49
def run(argv, env: ENV, stderr: $stderr)
load_provider_requirements(env['AST_MERGE_REQUIRE'])
request = command_request(argv, env)
result = merge_files(**request)
emit_diagnostics(result, stderr)
result.dig(:git, :exit_code)
rescue ArgumentError, LoadError => e
stderr.puts("#{PACKAGE_NAME}: #{e.message}")
EXIT_ERROR
end
|