ast-merge-git 7.1.9 → 7.1.11
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/ast/merge/git/local_benchmark.rb +21 -4
- data/lib/ast/merge/git/rust_host_provider.rb +48 -0
- data/lib/ast/merge/git/version.rb +1 -1
- data/lib/ast/merge/git.rb +39 -0
- data.tar.gz.sig +0 -0
- metadata +24 -23
- metadata.gz.sig +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 686f78fdee62f2c89d428bf393ae981004be819e9a5b7e6d9c2194b9ad868097
|
|
4
|
+
data.tar.gz: 70c91a526e850e1e5d3d6e03660324989b031d621d0bc02fa4f5fd38fd99f59f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: acbf294ba68d0bbd6ea79c41798b89763dd1f68084f563ecdd8ce1250762c012bf8ab9d81423464892911b97de524e9b007c8fe01ab4e58cd1288f99ade0a575
|
|
7
|
+
data.tar.gz: d6993e74935003582d576371cc0e8ac74b06900c64322117f17da1deb917f9db0aee67d280259b4715c146814fcc05c49602650b8f553246647ab1fcc0542ae6
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
|
@@ -1049,7 +1049,8 @@ module Ast
|
|
|
1049
1049
|
item,
|
|
1050
1050
|
capture.fetch(:status),
|
|
1051
1051
|
checks,
|
|
1052
|
-
stderr: capture.fetch(:stderr, '')
|
|
1052
|
+
stderr: capture.fetch(:stderr, ''),
|
|
1053
|
+
conflict_regions: markers
|
|
1053
1054
|
)
|
|
1054
1055
|
eligible = item.dig('oracle', 'score_eligible') && !%w[unsupported excluded_ambiguous].include?(classified)
|
|
1055
1056
|
{
|
|
@@ -1217,9 +1218,13 @@ module Ast
|
|
|
1217
1218
|
'analyzed'
|
|
1218
1219
|
end
|
|
1219
1220
|
|
|
1220
|
-
def classify(item, status, checks, stderr: '')
|
|
1221
|
+
def classify(item, status, checks, stderr: '', conflict_regions: [])
|
|
1221
1222
|
expected = item.dig('expected', 'outcome')
|
|
1222
1223
|
return 'excluded_ambiguous' if expected == 'excluded_ambiguous'
|
|
1224
|
+
# Exit 1 alone also describes Ruby startup failures and other crashes.
|
|
1225
|
+
# Require an emitted marker region or the portable conflict diagnostic;
|
|
1226
|
+
# the expected oracle must never turn an unexplained failure into success.
|
|
1227
|
+
return 'error' if status == 1 && conflict_regions.empty? && !conflict_diagnostic?(stderr)
|
|
1223
1228
|
|
|
1224
1229
|
if expected == 'error'
|
|
1225
1230
|
return 'error' if status.nil?
|
|
@@ -1240,6 +1245,13 @@ module Ast
|
|
|
1240
1245
|
status >= 2 && /\A[^:\r\n]+: (?:destination_)?parse_error:/i.match?(stderr.to_s)
|
|
1241
1246
|
end
|
|
1242
1247
|
|
|
1248
|
+
def conflict_diagnostic?(stderr)
|
|
1249
|
+
# This parses a diagnostic transport header, not source syntax/ownership.
|
|
1250
|
+
# Older kernel adapters omit a separate code but still emit the
|
|
1251
|
+
# explicit category. Do not reject that established wire format.
|
|
1252
|
+
/\A[^:\r\n]+: merge_conflict: [^\s][^\r\n]*/i.match?(stderr.to_s)
|
|
1253
|
+
end
|
|
1254
|
+
|
|
1243
1255
|
def equivalence_checks(item, output)
|
|
1244
1256
|
expected = item.dig('expected', 'output', 'bytes')
|
|
1245
1257
|
exact = !expected.nil? && output == expected
|
|
@@ -1413,10 +1425,15 @@ module Ast
|
|
|
1413
1425
|
def conflict_regions(output)
|
|
1414
1426
|
ranges = []
|
|
1415
1427
|
start_byte = nil
|
|
1428
|
+
separator = false
|
|
1416
1429
|
offset = 0
|
|
1417
1430
|
output.each_line do |line|
|
|
1418
|
-
|
|
1419
|
-
|
|
1431
|
+
if line.start_with?('<<<<<<<')
|
|
1432
|
+
start_byte = offset
|
|
1433
|
+
separator = false
|
|
1434
|
+
end
|
|
1435
|
+
separator = true if start_byte && line.start_with?('=======')
|
|
1436
|
+
if start_byte && separator && line.start_with?('>>>>>>>')
|
|
1420
1437
|
ranges << { 'start_byte' => start_byte, 'end_byte' => offset + line.bytesize }
|
|
1421
1438
|
start_byte = nil
|
|
1422
1439
|
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ast/merge'
|
|
4
|
+
require 'ast/merge/typed_core_provider'
|
|
5
|
+
|
|
6
|
+
module Ast
|
|
7
|
+
module Merge
|
|
8
|
+
module Git
|
|
9
|
+
# Compatibility name only: Rust owns merge decisions and marker rendering.
|
|
10
|
+
class RustHostProvider < Ast::Merge::TypedCoreProvider
|
|
11
|
+
PROVIDER_ID = 'rust.git.json'
|
|
12
|
+
FAMILY = 'json'
|
|
13
|
+
OPERATIONS = [:merge3].freeze
|
|
14
|
+
CORE_PROVIDER = 'kernel.git.json'
|
|
15
|
+
CORE_PROFILE = 'kernel.git.json.v1'
|
|
16
|
+
PACKAGE = 'ast-merge-git'
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def package_version = Ast::Merge::Git::Version::VERSION
|
|
21
|
+
|
|
22
|
+
# path_name is context, never a substitute for the explicit dialect.
|
|
23
|
+
def additional_fields = %i[path_name labels conflict_marker_size]
|
|
24
|
+
|
|
25
|
+
def policy(_operation, request)
|
|
26
|
+
labels = request.fetch(:labels, {})
|
|
27
|
+
unless labels.is_a?(Hash) && labels.values.all? do |label|
|
|
28
|
+
label.is_a?(String)
|
|
29
|
+
end
|
|
30
|
+
raise ArgumentError,
|
|
31
|
+
'Git labels must be a Hash of text values'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
width = request[:conflict_marker_size]
|
|
35
|
+
width = Integer(width, 10) if width.is_a?(String) # Git argv is textual.
|
|
36
|
+
raise ArgumentError, 'Git marker width must be an Integer' unless width.nil? || width.is_a?(Integer)
|
|
37
|
+
|
|
38
|
+
core::OperationPolicy.from_merge3(core::ThreeWayMergePolicy.new(
|
|
39
|
+
render_policy: 'source-preserving', fallback_policy: 'none',
|
|
40
|
+
labels: labels.transform_keys(&:to_s), conflict_marker_size: width, extra: {}
|
|
41
|
+
))
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Ast::Merge::Git.register_rust_host_provider! if Ast::Merge::Git::RustHostProvider.available?
|
|
@@ -6,7 +6,7 @@ module Ast
|
|
|
6
6
|
# Version namespace for this gem.
|
|
7
7
|
module Version
|
|
8
8
|
# Current gem version.
|
|
9
|
-
VERSION = '7.1.
|
|
9
|
+
VERSION = '7.1.11'
|
|
10
10
|
end
|
|
11
11
|
# Current gem version exposed at the traditional constant location.
|
|
12
12
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/ast/merge/git.rb
CHANGED
|
@@ -12,6 +12,7 @@ module Ast
|
|
|
12
12
|
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/ModuleLength -- Git protocol translation is one cohesive adapter boundary
|
|
13
13
|
module Git
|
|
14
14
|
PACKAGE_NAME = 'ast-merge-git'
|
|
15
|
+
autoload :RustHostProvider, 'ast/merge/git/rust_host_provider'
|
|
15
16
|
EXIT_SUCCESS = 0
|
|
16
17
|
EXIT_CONFLICT = 1
|
|
17
18
|
EXIT_ERROR = 2
|
|
@@ -21,6 +22,13 @@ module Ast
|
|
|
21
22
|
invalid_provider_output
|
|
22
23
|
invalid_provider_result
|
|
23
24
|
].freeze
|
|
25
|
+
RUST_PROVIDER_FAMILIES = {
|
|
26
|
+
'bash' => 'Bash::Merge',
|
|
27
|
+
'go' => 'Go::Merge',
|
|
28
|
+
'json' => 'Json::Merge',
|
|
29
|
+
'rust' => 'Rust::Merge',
|
|
30
|
+
'typescript' => 'TypeScript::Merge'
|
|
31
|
+
}.freeze
|
|
24
32
|
|
|
25
33
|
module_function
|
|
26
34
|
|
|
@@ -32,6 +40,14 @@ module Ast
|
|
|
32
40
|
adapt_provider_result(adapter_failure(:invalid_provider_result, e.message))
|
|
33
41
|
end
|
|
34
42
|
|
|
43
|
+
def rust_host_provider
|
|
44
|
+
RustHostProvider.new
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def register_rust_host_provider!(replace: false)
|
|
48
|
+
Ast::Merge.register_provider(rust_host_provider, replace: replace)
|
|
49
|
+
end
|
|
50
|
+
|
|
35
51
|
def merge_files(base_path:, ours_path:, theirs_path:, conflict_policy: :write, **request)
|
|
36
52
|
policy = normalize_conflict_policy(conflict_policy)
|
|
37
53
|
result = merge3(
|
|
@@ -51,6 +67,7 @@ module Ast
|
|
|
51
67
|
def run(argv, env: ENV, stderr: $stderr)
|
|
52
68
|
load_provider_requirements(env['AST_MERGE_REQUIRE'])
|
|
53
69
|
request = command_request(argv, env)
|
|
70
|
+
register_explicit_rust_provider(request)
|
|
54
71
|
result = merge_files(**request)
|
|
55
72
|
emit_diagnostics(result, stderr)
|
|
56
73
|
result.dig(:git, :exit_code)
|
|
@@ -255,6 +272,28 @@ module Ast
|
|
|
255
272
|
end
|
|
256
273
|
private_class_method :load_provider_requirements
|
|
257
274
|
|
|
275
|
+
def register_explicit_rust_provider(request)
|
|
276
|
+
provider_id = request[:provider_id].to_s
|
|
277
|
+
if provider_id == 'rust.git.json'
|
|
278
|
+
register_rust_host_provider!(replace: true) if RustHostProvider.available?
|
|
279
|
+
return
|
|
280
|
+
end
|
|
281
|
+
return unless provider_id.start_with?('rust.')
|
|
282
|
+
|
|
283
|
+
family_module_name = RUST_PROVIDER_FAMILIES[request[:family].to_s]
|
|
284
|
+
return unless family_module_name
|
|
285
|
+
|
|
286
|
+
family_module = family_module_name.split('::').inject(Object) do |namespace, name|
|
|
287
|
+
break nil unless namespace.const_defined?(name, false)
|
|
288
|
+
|
|
289
|
+
namespace.const_get(name, false)
|
|
290
|
+
end
|
|
291
|
+
return unless family_module.respond_to?(:register_rust_host_provider!)
|
|
292
|
+
|
|
293
|
+
family_module.register_rust_host_provider!(replace: true)
|
|
294
|
+
end
|
|
295
|
+
private_class_method :register_explicit_rust_provider
|
|
296
|
+
|
|
258
297
|
def emit_diagnostics(result, stderr)
|
|
259
298
|
result.fetch(:diagnostics).each do |item|
|
|
260
299
|
stderr.puts("#{PACKAGE_NAME}: #{item[:category]}: #{item[:message]}")
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ast-merge-git
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.1.
|
|
4
|
+
version: 7.1.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -43,28 +43,28 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - '='
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 7.1.
|
|
46
|
+
version: 7.1.11
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - '='
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 7.1.
|
|
53
|
+
version: 7.1.11
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: tree_haver
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - '='
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 7.1.
|
|
60
|
+
version: 7.1.11
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - '='
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 7.1.
|
|
67
|
+
version: 7.1.11
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
69
|
name: version_gem
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -91,20 +91,20 @@ dependencies:
|
|
|
91
91
|
requirements:
|
|
92
92
|
- - "~>"
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: '3.
|
|
94
|
+
version: '3.1'
|
|
95
95
|
- - ">="
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
|
-
version: 3.
|
|
97
|
+
version: 3.1.8
|
|
98
98
|
type: :development
|
|
99
99
|
prerelease: false
|
|
100
100
|
version_requirements: !ruby/object:Gem::Requirement
|
|
101
101
|
requirements:
|
|
102
102
|
- - "~>"
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '3.
|
|
104
|
+
version: '3.1'
|
|
105
105
|
- - ">="
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
|
-
version: 3.
|
|
107
|
+
version: 3.1.8
|
|
108
108
|
- !ruby/object:Gem::Dependency
|
|
109
109
|
name: bundler-audit
|
|
110
110
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -182,7 +182,7 @@ dependencies:
|
|
|
182
182
|
version: '3.2'
|
|
183
183
|
- - ">="
|
|
184
184
|
- !ruby/object:Gem::Version
|
|
185
|
-
version: 3.2.
|
|
185
|
+
version: 3.2.5
|
|
186
186
|
type: :development
|
|
187
187
|
prerelease: false
|
|
188
188
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -192,7 +192,7 @@ dependencies:
|
|
|
192
192
|
version: '3.2'
|
|
193
193
|
- - ">="
|
|
194
194
|
- !ruby/object:Gem::Version
|
|
195
|
-
version: 3.2.
|
|
195
|
+
version: 3.2.5
|
|
196
196
|
- !ruby/object:Gem::Dependency
|
|
197
197
|
name: kettle-test
|
|
198
198
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -202,7 +202,7 @@ dependencies:
|
|
|
202
202
|
version: '2.0'
|
|
203
203
|
- - ">="
|
|
204
204
|
- !ruby/object:Gem::Version
|
|
205
|
-
version: 2.0.
|
|
205
|
+
version: 2.0.23
|
|
206
206
|
type: :development
|
|
207
207
|
prerelease: false
|
|
208
208
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -212,7 +212,7 @@ dependencies:
|
|
|
212
212
|
version: '2.0'
|
|
213
213
|
- - ">="
|
|
214
214
|
- !ruby/object:Gem::Version
|
|
215
|
-
version: 2.0.
|
|
215
|
+
version: 2.0.23
|
|
216
216
|
- !ruby/object:Gem::Dependency
|
|
217
217
|
name: turbo_tests2
|
|
218
218
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -222,7 +222,7 @@ dependencies:
|
|
|
222
222
|
version: '3.2'
|
|
223
223
|
- - ">="
|
|
224
224
|
- !ruby/object:Gem::Version
|
|
225
|
-
version: 3.2.
|
|
225
|
+
version: 3.2.14
|
|
226
226
|
type: :development
|
|
227
227
|
prerelease: false
|
|
228
228
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -232,7 +232,7 @@ dependencies:
|
|
|
232
232
|
version: '3.2'
|
|
233
233
|
- - ">="
|
|
234
234
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: 3.2.
|
|
235
|
+
version: 3.2.14
|
|
236
236
|
- !ruby/object:Gem::Dependency
|
|
237
237
|
name: ruby-progressbar
|
|
238
238
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -256,7 +256,7 @@ dependencies:
|
|
|
256
256
|
version: '1.0'
|
|
257
257
|
- - ">="
|
|
258
258
|
- !ruby/object:Gem::Version
|
|
259
|
-
version: 1.0.
|
|
259
|
+
version: 1.0.9
|
|
260
260
|
type: :development
|
|
261
261
|
prerelease: false
|
|
262
262
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -266,7 +266,7 @@ dependencies:
|
|
|
266
266
|
version: '1.0'
|
|
267
267
|
- - ">="
|
|
268
268
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: 1.0.
|
|
269
|
+
version: 1.0.9
|
|
270
270
|
- !ruby/object:Gem::Dependency
|
|
271
271
|
name: gitmoji-regex
|
|
272
272
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -276,7 +276,7 @@ dependencies:
|
|
|
276
276
|
version: '2.0'
|
|
277
277
|
- - ">="
|
|
278
278
|
- !ruby/object:Gem::Version
|
|
279
|
-
version: 2.0.
|
|
279
|
+
version: 2.0.15
|
|
280
280
|
type: :development
|
|
281
281
|
prerelease: false
|
|
282
282
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -286,7 +286,7 @@ dependencies:
|
|
|
286
286
|
version: '2.0'
|
|
287
287
|
- - ">="
|
|
288
288
|
- !ruby/object:Gem::Version
|
|
289
|
-
version: 2.0.
|
|
289
|
+
version: 2.0.15
|
|
290
290
|
description: "☯️ Git protocol adaptation and provider dispatch over ast-merge primitives."
|
|
291
291
|
email:
|
|
292
292
|
- floss@galtzo.com
|
|
@@ -303,6 +303,7 @@ files:
|
|
|
303
303
|
- lib/ast/merge/git/benchmark_adapter.rb
|
|
304
304
|
- lib/ast/merge/git/corpus.rb
|
|
305
305
|
- lib/ast/merge/git/local_benchmark.rb
|
|
306
|
+
- lib/ast/merge/git/rust_host_provider.rb
|
|
306
307
|
- lib/ast/merge/git/version.rb
|
|
307
308
|
- sig/ast/merge/git.rbs
|
|
308
309
|
homepage: https://github.com/structuredmerge/structuredmerge-ruby
|
|
@@ -311,10 +312,10 @@ licenses:
|
|
|
311
312
|
- PolyForm-Small-Business-1.0.0
|
|
312
313
|
metadata:
|
|
313
314
|
homepage_uri: https://structuredmerge.org
|
|
314
|
-
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.
|
|
315
|
-
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.
|
|
315
|
+
source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.11
|
|
316
|
+
changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.11/CHANGELOG.md
|
|
316
317
|
bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
|
|
317
|
-
documentation_uri: https://www.rubydoc.info/gems/ast-merge-git/7.1.
|
|
318
|
+
documentation_uri: https://www.rubydoc.info/gems/ast-merge-git/7.1.11
|
|
318
319
|
funding_uri: https://github.com/sponsors/pboling
|
|
319
320
|
wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
|
|
320
321
|
news_uri: https://www.railsbling.com/tags/ast-merge-git
|
|
@@ -344,7 +345,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
344
345
|
- !ruby/object:Gem::Version
|
|
345
346
|
version: '0'
|
|
346
347
|
requirements: []
|
|
347
|
-
rubygems_version: 4.0.
|
|
348
|
+
rubygems_version: 4.0.20
|
|
348
349
|
specification_version: 4
|
|
349
350
|
summary: "☯️ Format-neutral Git merge-driver adapter for StructuredMerge"
|
|
350
351
|
test_files: []
|
metadata.gz.sig
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
�F}� =�w�b��zF܇���,&�����N��������[/_^B��p:���s闎���p+ɰN�u���� Rڬ�p?��σfuJ�}]2���8ix�R��P'�l-�/�b^t
|