metanorma-cli 1.16.10 → 1.17.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 826947482a6b6504d9e8b6f0270fbf9c21c7ea4aaf28987fae188a75d9785130
4
- data.tar.gz: 70cdc4d3ae532c8119586898cc9b2fe2de7ebe47544131ba72b46be26c9efe67
3
+ metadata.gz: f002b87450dab7938a159523e3fa09a6ea580d8c42ac529f4bb5b4700f6a9601
4
+ data.tar.gz: d6bc7ec2d3f6c2e0b2cfd6d2c2548464e30e25ed8361fa5ebaaab7ef501e72b6
5
5
  SHA512:
6
- metadata.gz: 3566044e7574ecba68e89cde656d0fa1931b970a1898d1d9fe90ce9cf9fbafc1a5d0456f75bafb18392a399ef3c157d599d89f53e4a414c23ec882c3582ea2a3
7
- data.tar.gz: 8535140d5d93309cf295523b85fe368ad81e8c967ee65d65194232a78f7593748e1018b2b6de4dd5d429238c77ac6b7ba0cdc85b7cc71eb980ffcb6387f98929
6
+ metadata.gz: b27546bb7529b629709a7c5c58edb9186207a79906c8386f231fc301fc45e53682b39bd56dc80c2a513c703365d67e4712345da8b46e13ea4f5d9908a5813a79
7
+ data.tar.gz: 53391d057121fc210138ae3f0816823ced2afe28b84b1dce39f130771cc862d17236fa6e00bd4492ac6a13a784084767003d9ff09ba8958be02f0fdd217b7aea
@@ -8,6 +8,7 @@ require "metanorma/cli/thor_with_config"
8
8
  require "metanorma/cli/commands/config"
9
9
  require "metanorma/cli/commands/template_repo"
10
10
  require "metanorma/cli/commands/site"
11
+ require "metanorma/cli/commands/diff"
11
12
  require "mnconvert"
12
13
  require_relative "flavor"
13
14
 
@@ -15,8 +16,8 @@ module Metanorma
15
16
  module Cli
16
17
  class Command < ThorWithConfig
17
18
  class_option :progress, aliases: "-s", type: :boolean, default: false,
18
- desc: "Show progress for long running tasks" \
19
- " (like download)"
19
+ desc: "Show progress for long running tasks " \
20
+ "(like download)"
20
21
 
21
22
  desc "new NAME", "Create new Metanorma document"
22
23
  option :type, aliases: "-t", required: true, desc: "Document type"
@@ -40,28 +41,28 @@ module Metanorma
40
41
  option :wrapper, aliases: "-w", type: :boolean,
41
42
  desc: "Create wrapper folder for HTML output"
42
43
  option :asciimath, aliases: "-a", type: :boolean,
43
- desc: "Keep Asciimath in XML output instead of" \
44
- " converting it to MathM"
44
+ desc: "Keep Asciimath in XML output instead of " \
45
+ "converting it to MathM"
45
46
  option :datauriimage, aliases: "-d", type: :boolean,
46
47
  desc: "Encode HTML output images as data URIs"
47
48
  option :relaton, aliases: "-R",
48
- desc: "Export Relaton XML for document to nominated" \
49
- " filename"
49
+ desc: "Export Relaton XML for document to nominated " \
50
+ "filename"
50
51
  option :extract, aliases: "-e",
51
- desc: "Export sourcecode fragments from this document" \
52
- " to nominated directory"
52
+ desc: "Export sourcecode fragments from this document " \
53
+ "to nominated directory"
53
54
  option :version, aliases: "-v",
54
55
  desc: "Print version of code (accompanied with -t)"
55
56
  option :log_messages, aliases: "-L",
56
57
  desc: "Display available log messages " \
57
- "(accompanied with -t)"
58
+ "(accompanied with -t)"
58
59
  option :output_dir, aliases: "-o",
59
60
  desc: "Directory to save compiled files"
60
61
  option :strict, aliases: "-S", type: :boolean,
61
62
  desc: "Strict compilation: abort if there are any errors"
62
63
  option :agree_to_terms,
63
64
  type: :boolean,
64
- desc: "Agree / Disagree with all third-party licensing terms "\
65
+ desc: "Agree / Disagree with all third-party licensing terms " \
65
66
  "presented (WARNING: do know what you are agreeing with!)"
66
67
  option :install_fonts, type: :boolean, default: true,
67
68
  desc: "Install required fonts"
@@ -99,14 +100,14 @@ module Metanorma
99
100
  option :coverpage, aliases: "-c", desc: "Liquid template"
100
101
  option :agree_to_terms,
101
102
  type: :boolean,
102
- desc: "Agree / Disagree with all third-party licensing terms "\
103
+ desc: "Agree / Disagree with all third-party licensing terms " \
103
104
  "presented (WARNING: do know what you are agreeing with!)"
104
105
  option :install_fonts, type: :boolean, default: true,
105
106
  desc: "Install required fonts"
106
107
  option :continue_without_fonts,
107
108
  type: :boolean,
108
109
  desc: "Continue processing even when fonts are missing"
109
- option :strict, aliases: "-S", type: :boolean, \
110
+ option :strict, aliases: "-S", type: :boolean,
110
111
  desc: "Strict compilation: abort if there are any errors"
111
112
 
112
113
  def collection(filename = nil)
@@ -151,6 +152,31 @@ module Metanorma
151
152
  UI.say e.message
152
153
  end
153
154
 
155
+ desc "diff FILE1 FILE2", "Semantic diff of two Metanorma XML documents"
156
+ option :format, type: :string, default: "text",
157
+ desc: "Output format: text or json"
158
+ option :profile, type: :string,
159
+ desc: "canon configuration profile (built-in name " \
160
+ "or YAML path; default: metanorma)"
161
+ option :match_profile, type: :string,
162
+ desc: "canon match profile override, e.g. " \
163
+ "strict or spec_friendly"
164
+ option :show_diffs, type: :string,
165
+ desc: "Which differences to show: " \
166
+ "all|normative|informative"
167
+ option :context_lines, type: :numeric,
168
+ desc: "Context lines around each difference"
169
+ option :color, type: :boolean, default: true,
170
+ desc: "Colorise the text report"
171
+ option :input_format, type: :string,
172
+ desc: "Input format override: xml|html|json|yaml " \
173
+ "(default: by file extension)"
174
+
175
+ def diff(file1, file2)
176
+ status = Commands::Diff.new(file1, file2, options).run
177
+ exit(status) unless status.zero?
178
+ end
179
+
154
180
  desc "version", "Version of the code"
155
181
  option :type, aliases: "-t", required: false,
156
182
  desc: "Type of standard to generate"
@@ -0,0 +1,159 @@
1
+ require "json"
2
+
3
+ module Metanorma
4
+ module Cli
5
+ module Commands
6
+ # Semantic diff of two Metanorma XML documents, with lutaml/canon
7
+ # as the diff engine (metanorma-cli#442, iso-10303
8
+ # drift-tracking). Returns an exit status instead of exiting, so
9
+ # in-process callers (and specs) stay alive; the Thor command
10
+ # decides the process exit.
11
+ class Diff
12
+ EXIT_EQUIVALENT = 0
13
+ EXIT_DIFFERENT = 1
14
+ EXIT_ERROR = 2
15
+
16
+ # the canon LIBRARY does not auto-detect input format (its CLI
17
+ # does, from extensions) — detect here, overridable via
18
+ # --input-format
19
+ FORMAT_BY_EXT = {
20
+ ".xml" => :xml, ".html" => :html, ".htm" => :html,
21
+ ".json" => :json, ".yaml" => :yaml, ".yml" => :yaml
22
+ }.freeze
23
+
24
+ def initialize(file1, file2, options = {})
25
+ @file1 = file1
26
+ @file2 = file2
27
+ @options = options
28
+ end
29
+
30
+ # @return [Integer] exit status (0 equivalent / 1 different /
31
+ # 2 error); output goes to the given IO (default $stdout)
32
+ def run(out = $stdout)
33
+ return EXIT_ERROR unless files_exist?
34
+
35
+ require "canon"
36
+ format = input_format
37
+ return reject_format unless format
38
+
39
+ configure_canon
40
+ report(compare_documents(format), out)
41
+ rescue StandardError => e
42
+ warn "metanorma diff: #{e.class}: #{e.message}"
43
+ EXIT_ERROR
44
+ end
45
+
46
+ private
47
+
48
+ def files_exist?
49
+ [@file1, @file2].all? do |f|
50
+ File.file?(f) ||
51
+ (warn("metanorma diff: no such file: #{f}") && false)
52
+ end
53
+ end
54
+
55
+ # The canon "metanorma" configuration profile is the default:
56
+ # spec-friendly matching, metanorma whitespace element lists,
57
+ # normative-only display. --profile selects another canon
58
+ # profile (built-in name or a YAML path).
59
+ def configure_canon
60
+ Canon::Config.reset!
61
+ Canon::Config.instance.profile = @options[:profile] || :metanorma
62
+ end
63
+
64
+ # rubocop:disable Naming/PredicateMethod -- verbose: true makes
65
+ # equivalent? return a full ComparisonResult, not a boolean
66
+ def report(result, out)
67
+ out.puts render(result)
68
+ result.equivalent? ? EXIT_EQUIVALENT : EXIT_DIFFERENT
69
+ end
70
+
71
+ def reject_format
72
+ warn "metanorma diff: unsupported input format for " \
73
+ "#{File.extname(@file1)} — semantic diff handles " \
74
+ "#{FORMAT_BY_EXT.keys.join(', ')} (or pass --input-format)"
75
+ EXIT_ERROR
76
+ end
77
+
78
+ def input_format
79
+ if (f = @options[:input_format])
80
+ return f.to_sym
81
+ end
82
+
83
+ FORMAT_BY_EXT[File.extname(@file1).downcase]
84
+ end
85
+
86
+ def compare_documents(format)
87
+ opts = { verbose: true, format: format }
88
+ if (mp = @options[:match_profile])
89
+ opts[:match_profile] = mp.to_sym
90
+ end
91
+ Canon::Comparison.equivalent?(
92
+ File.read(@file1, encoding: "UTF-8"),
93
+ File.read(@file2, encoding: "UTF-8"),
94
+ opts,
95
+ )
96
+ end
97
+ # rubocop:enable Naming/PredicateMethod
98
+
99
+ def render(result)
100
+ case @options[:format]&.downcase
101
+ when "json" then render_json(result)
102
+ else render_text(result)
103
+ end
104
+ end
105
+
106
+ def render_text(result)
107
+ return result.diff(**text_diff_opts) unless result.equivalent?
108
+
109
+ info = result.informative_differences.size
110
+ return "Equivalent" if info.zero?
111
+
112
+ msg = "Equivalent (#{info} informative difference(s) — " \
113
+ "rerun with --show-diffs informative to view)"
114
+ if @options[:show_diffs].to_s == "informative"
115
+ "#{msg}\n#{result.diff(**text_diff_opts)}"
116
+ else
117
+ msg
118
+ end
119
+ end
120
+
121
+ def text_diff_opts
122
+ diff_opts = { use_color: color? }
123
+ if (cl = @options[:context_lines])
124
+ diff_opts[:context_lines] = cl.to_i
125
+ end
126
+ if (sd = @options[:show_diffs])
127
+ diff_opts[:show_diffs] = sd.to_sym
128
+ end
129
+ diff_opts
130
+ end
131
+
132
+ def color?
133
+ return false if @options[:color] == false
134
+
135
+ $stdout.tty?
136
+ end
137
+
138
+ # canon has no machine-readable report; serialise its DiffNode
139
+ # list ourselves — the shape iso-10303 CI can consume
140
+ def diff_to_h(diff)
141
+ { dimension: diff.dimension, reason: diff.reason,
142
+ path: diff.path, normative: diff.normative?,
143
+ before: diff.serialized_before, after: diff.serialized_after }
144
+ end
145
+
146
+ def render_json(result)
147
+ diffs = result.differences.map { |d| diff_to_h(d) }
148
+ JSON.pretty_generate(
149
+ files: { a: @file1, b: @file2 },
150
+ equivalent: result.equivalent?,
151
+ normative_count: diffs.count { |d| d[:normative] },
152
+ informative_count: diffs.count { |d| !d[:normative] },
153
+ differences: diffs,
154
+ )
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
@@ -6,7 +6,7 @@ module Metanorma
6
6
  metanorma-core metanorma-plugin-glossarist metanorma-plugin-lutaml
7
7
  metanorma-taste relaton-cli pubid glossarist fontist
8
8
  plurimath expressir xmi lutaml-model emf2svg unitsml
9
- vectory ogc-gml oscal suma).freeze
9
+ vectory ogc-gml oscal suma canon).freeze
10
10
 
11
11
  EXPORT_CONFIG_FLAVOR_FILES = [
12
12
  "metanorma/*/*.adoc",
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Cli
3
- VERSION = "1.16.10".freeze
3
+ VERSION = "1.17.0".freeze
4
4
  end
5
5
  end
@@ -26,28 +26,29 @@ Gem::Specification.new do |spec|
26
26
  spec.required_ruby_version = Gem::Requirement.new(">= 3.3.0")
27
27
 
28
28
  spec.add_dependency "metanorma-ietf", "~> 3.7.0"
29
- spec.add_dependency "metanorma-iso", "~> 3.4.2"
29
+ spec.add_dependency "metanorma-iso", "~> 3.5.0"
30
30
  spec.add_dependency "mnconvert"
31
31
  # spec.add_dependency "thor", "~> 1.0" # inherited from vectory
32
32
  # spec.add_dependency "metanorma-gb", "~> 1.5.0"
33
- spec.add_dependency "metanorma-bipm", "~> 2.8.0"
34
- spec.add_dependency "metanorma-cc", "~> 2.8.0"
35
- spec.add_dependency "metanorma-generic", "~> 3.4.0"
36
- spec.add_dependency "metanorma-iec", "~> 2.8.0"
37
- spec.add_dependency "metanorma-ribose", "~> 2.8.0"
38
- spec.add_dependency "metanorma-standoc", "~> 3.4.3"
33
+ spec.add_dependency "metanorma-bipm", "~> 2.9.0"
34
+ spec.add_dependency "metanorma-cc", "~> 2.9.0"
35
+ spec.add_dependency "metanorma-generic", "~> 3.5.0"
36
+ spec.add_dependency "metanorma-iec", "~> 2.9.0"
37
+ spec.add_dependency "metanorma-ribose", "~> 2.9.0"
38
+ spec.add_dependency "metanorma-standoc", "~> 3.5.0"
39
39
  # spec.add_dependency 'metanorma-mpfa', "~> 0.9.0"
40
40
  spec.add_dependency "git", ">= 3.0"
41
41
  spec.add_dependency "lutaml-model"
42
42
  spec.add_dependency "metanorma", "~> 2.5.1"
43
- spec.add_dependency "metanorma-iho", "~> 1.3.0"
44
- spec.add_dependency "metanorma-itu", "~> 2.8.0"
43
+ spec.add_dependency "metanorma-iho", "~> 1.4.0"
44
+ spec.add_dependency "metanorma-itu", "~> 2.9.0"
45
45
  # spec.add_dependency "metanorma-nist", "~> 2.7.0"
46
46
  spec.add_dependency "liquid", "~> 5"
47
- spec.add_dependency "metanorma-ieee", "~> 1.6.0"
48
- spec.add_dependency "metanorma-jis", "~> 1.1.0"
49
- spec.add_dependency "metanorma-ogc", "~> 2.9.0"
50
- spec.add_dependency "metanorma-plateau", "~> 1.2.0"
47
+ spec.add_dependency "metanorma-ieee", "~> 1.7.0"
48
+ spec.add_dependency "metanorma-jis", "~> 1.2.0"
49
+ spec.add_dependency "metanorma-ogc", "~> 2.10.0"
50
+ spec.add_dependency "metanorma-plateau", "~> 1.3.0"
51
+ spec.add_dependency "canon", ">= 0.2.12"
51
52
  spec.add_dependency "relaton-cli", ">= 0.8.2"
52
53
  spec.add_dependency "socksify"
53
54
  spec.add_dependency "suma", "~> 0.5.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.10
4
+ version: 1.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: 3.4.2
32
+ version: 3.5.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 3.4.2
39
+ version: 3.5.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: mnconvert
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -57,84 +57,84 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 2.8.0
60
+ version: 2.9.0
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: 2.8.0
67
+ version: 2.9.0
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: metanorma-cc
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 2.8.0
74
+ version: 2.9.0
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: 2.8.0
81
+ version: 2.9.0
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: metanorma-generic
84
84
  requirement: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: 3.4.0
88
+ version: 3.5.0
89
89
  type: :runtime
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: 3.4.0
95
+ version: 3.5.0
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: metanorma-iec
98
98
  requirement: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: 2.8.0
102
+ version: 2.9.0
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: 2.8.0
109
+ version: 2.9.0
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: metanorma-ribose
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: 2.8.0
116
+ version: 2.9.0
117
117
  type: :runtime
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: 2.8.0
123
+ version: 2.9.0
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: metanorma-standoc
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: 3.4.3
130
+ version: 3.5.0
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: 3.4.3
137
+ version: 3.5.0
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: git
140
140
  requirement: !ruby/object:Gem::Requirement
@@ -183,28 +183,28 @@ dependencies:
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: 1.3.0
186
+ version: 1.4.0
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: 1.3.0
193
+ version: 1.4.0
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: metanorma-itu
196
196
  requirement: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: 2.8.0
200
+ version: 2.9.0
201
201
  type: :runtime
202
202
  prerelease: false
203
203
  version_requirements: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - "~>"
206
206
  - !ruby/object:Gem::Version
207
- version: 2.8.0
207
+ version: 2.9.0
208
208
  - !ruby/object:Gem::Dependency
209
209
  name: liquid
210
210
  requirement: !ruby/object:Gem::Requirement
@@ -225,56 +225,70 @@ dependencies:
225
225
  requirements:
226
226
  - - "~>"
227
227
  - !ruby/object:Gem::Version
228
- version: 1.6.0
228
+ version: 1.7.0
229
229
  type: :runtime
230
230
  prerelease: false
231
231
  version_requirements: !ruby/object:Gem::Requirement
232
232
  requirements:
233
233
  - - "~>"
234
234
  - !ruby/object:Gem::Version
235
- version: 1.6.0
235
+ version: 1.7.0
236
236
  - !ruby/object:Gem::Dependency
237
237
  name: metanorma-jis
238
238
  requirement: !ruby/object:Gem::Requirement
239
239
  requirements:
240
240
  - - "~>"
241
241
  - !ruby/object:Gem::Version
242
- version: 1.1.0
242
+ version: 1.2.0
243
243
  type: :runtime
244
244
  prerelease: false
245
245
  version_requirements: !ruby/object:Gem::Requirement
246
246
  requirements:
247
247
  - - "~>"
248
248
  - !ruby/object:Gem::Version
249
- version: 1.1.0
249
+ version: 1.2.0
250
250
  - !ruby/object:Gem::Dependency
251
251
  name: metanorma-ogc
252
252
  requirement: !ruby/object:Gem::Requirement
253
253
  requirements:
254
254
  - - "~>"
255
255
  - !ruby/object:Gem::Version
256
- version: 2.9.0
256
+ version: 2.10.0
257
257
  type: :runtime
258
258
  prerelease: false
259
259
  version_requirements: !ruby/object:Gem::Requirement
260
260
  requirements:
261
261
  - - "~>"
262
262
  - !ruby/object:Gem::Version
263
- version: 2.9.0
263
+ version: 2.10.0
264
264
  - !ruby/object:Gem::Dependency
265
265
  name: metanorma-plateau
266
266
  requirement: !ruby/object:Gem::Requirement
267
267
  requirements:
268
268
  - - "~>"
269
269
  - !ruby/object:Gem::Version
270
- version: 1.2.0
270
+ version: 1.3.0
271
271
  type: :runtime
272
272
  prerelease: false
273
273
  version_requirements: !ruby/object:Gem::Requirement
274
274
  requirements:
275
275
  - - "~>"
276
276
  - !ruby/object:Gem::Version
277
- version: 1.2.0
277
+ version: 1.3.0
278
+ - !ruby/object:Gem::Dependency
279
+ name: canon
280
+ requirement: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">="
283
+ - !ruby/object:Gem::Version
284
+ version: 0.2.12
285
+ type: :runtime
286
+ prerelease: false
287
+ version_requirements: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - ">="
290
+ - !ruby/object:Gem::Version
291
+ version: 0.2.12
278
292
  - !ruby/object:Gem::Dependency
279
293
  name: relaton-cli
280
294
  requirement: !ruby/object:Gem::Requirement
@@ -349,6 +363,7 @@ files:
349
363
  - lib/metanorma/cli/collection.rb
350
364
  - lib/metanorma/cli/command.rb
351
365
  - lib/metanorma/cli/commands/config.rb
366
+ - lib/metanorma/cli/commands/diff.rb
352
367
  - lib/metanorma/cli/commands/site.rb
353
368
  - lib/metanorma/cli/commands/template_repo.rb
354
369
  - lib/metanorma/cli/compiler.rb
@@ -385,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
385
400
  - !ruby/object:Gem::Version
386
401
  version: '0'
387
402
  requirements: []
388
- rubygems_version: 4.0.10
403
+ rubygems_version: 4.0.18
389
404
  specification_version: 4
390
405
  summary: Metanorma is the standard of standards; the metanorma gem allows you to create
391
406
  any standard document type supported by Metanorma.