kennel 1.116.2 → 1.117.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67342a80e2cd8dd1f0f2ad613cca326405bff85975ceb4253bc6180c856b03cc
4
- data.tar.gz: 587fb9a0ca21bf084e71c496c411708cc132aa80f2f7ec3c34f56b5a3b1888b4
3
+ metadata.gz: 83531b8281e71f8a5f8e307320c81f2ecf4c320da617c27777b08325f1394ed1
4
+ data.tar.gz: 1d3bce11c52a35f07a48546d37147213a8ca407e7e30710a8efaedc59be8dcd5
5
5
  SHA512:
6
- metadata.gz: 89fb1183eb9ee4db1f0a138c342a79b9f6f5b1aab962090e8f5e83d0e1c7fcbd38486106cbfd506e7da33a747a0391b3a0944c214efeffbe3a5f1854cc0d0fc4
7
- data.tar.gz: 4b5de65ad6957b45309e8e1158c0a23ac7fb95242a264d2f292f74d156481a23af5737d13236f7761664954c1f77471d6327a2febf30d5489361b0a4988545f2
6
+ metadata.gz: fddea7652c95c90fb529520ab1422f8a8dca9d27f3fd05dd6d3abb0892e831c1fb91af4455b77eba748cd635f86537d19b473eacd2004721ce0717e342efc25d
7
+ data.tar.gz: 537d25042eb17f6a86a65edba83e57001f1da160eacad93478062aec665cdad2798040a946b21bab53818fec2bed6089d1f15b22ca5fddc15e85fc5f1aa0d036
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "tempfile"
4
+
3
5
  # cache that reads everything from a single file
4
6
  # - avoids doing multiple disk reads while iterating all definitions
5
7
  # - has a global expiry to not keep deleted resources forever
@@ -44,7 +46,11 @@ module Kennel
44
46
  def persist
45
47
  dir = File.dirname(@file)
46
48
  FileUtils.mkdir_p(dir) unless File.directory?(dir)
47
- File.write(@file, Marshal.dump(@data))
49
+
50
+ Tempfile.create do |tmp|
51
+ Marshal.dump @data, tmp
52
+ File.rename tmp.path, @file
53
+ end
48
54
  end
49
55
 
50
56
  # keep the cache small to make loading it fast (5MB ~= 100ms)
data/lib/kennel/syncer.rb CHANGED
@@ -1,4 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
3
+ require "diff/lcs"
4
+
2
5
  module Kennel
3
6
  class Syncer
4
7
  DELETE_ORDER = ["dashboard", "slo", "monitor", "synthetics/tests"].freeze # dashboards references monitors + slos, slos reference monitors
@@ -196,16 +199,22 @@ module Kennel
196
199
 
197
200
  def print_diff(diff)
198
201
  diff.each do |type, field, old, new|
202
+ use_diff = false
199
203
  if type == "+"
200
204
  temp = Utils.pretty_inspect(new)
201
205
  new = Utils.pretty_inspect(old)
202
206
  old = temp
207
+ elsif old.is_a?(String) && new.is_a?(String) && (old.include?("\n") || new.include?("\n"))
208
+ use_diff = true
203
209
  else # ~ and -
204
210
  old = Utils.pretty_inspect(old)
205
211
  new = Utils.pretty_inspect(new)
206
212
  end
207
213
 
208
- if (old + new).size > 100
214
+ if use_diff
215
+ Kennel.out.puts " #{type}#{field}"
216
+ Kennel.out.puts(diff(old, new).map { |l| " #{l}" })
217
+ elsif (old + new).size > 100
209
218
  Kennel.out.puts " #{type}#{field}"
210
219
  Kennel.out.puts " #{old} ->"
211
220
  Kennel.out.puts " #{new}"
@@ -215,6 +224,26 @@ module Kennel
215
224
  end
216
225
  end
217
226
 
227
+ # display diff for multi-line strings
228
+ # must stay readable when color is off too
229
+ def diff(old, new)
230
+ Diff::LCS.sdiff(old.split("\n", -1), new.split("\n", -1)).flat_map do |diff|
231
+ case diff.action
232
+ when "-"
233
+ Utils.color(:red, "- #{diff.old_element}")
234
+ when "+"
235
+ Utils.color(:green, "+ #{diff.new_element}")
236
+ when "!"
237
+ [
238
+ Utils.color(:red, "- #{diff.old_element}"),
239
+ Utils.color(:green, "+ #{diff.new_element}")
240
+ ]
241
+ else
242
+ " #{diff.old_element}"
243
+ end
244
+ end
245
+ end
246
+
218
247
  # We've already validated the desired objects ('generated') in isolation.
219
248
  # Now that we have made the plan, we can perform some more validation.
220
249
  def validate_plan
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Kennel
3
- VERSION = "1.116.2"
3
+ VERSION = "1.117.0"
4
4
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kennel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.116.2
4
+ version: 1.117.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-31 00:00:00.000000000 Z
11
+ date: 2022-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diff-lcs
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faraday
15
29
  requirement: !ruby/object:Gem::Requirement