Class: CacheinatorHelper

Inherits:
Object show all
Defined in:
lib/ceedling/cacheinator_helper.rb

Instance Method Summary collapse

Instance Method Details

#diff_cached_config?(cached_filepath, hash) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ceedling/cacheinator_helper.rb', line 14

def diff_cached_config?(cached_filepath, hash)
  return false if ( not @file_wrapper.exist?(cached_filepath) )

  begin
    return true if (@yaml_wrapper.load(cached_filepath) != hash)
  rescue YamlLoadException => e
    raise YamlLoadException.new(
      reason: e.reason, source: e.source, original_error: e.original_error,
      message: "Cached build configuration is corrupted or unreadable ⏩️ #{e.message}"
    )
  end

  return false
end

#diff_cached_defines?(cached_filepath, files) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/ceedling/cacheinator_helper.rb', line 29

def diff_cached_defines?(cached_filepath, files)
  changed_defines = false
  current_defines = COLLECTION_DEFINES_TEST_AND_VENDOR.reject(&:empty?)

  current_dependencies = Hash[files.collect { |source| [source, current_defines.dup] }]
  if not @file_wrapper.exist?(cached_filepath)
    @yaml_wrapper.dump(cached_filepath, current_dependencies)
    return changed_defines
  end

  dependencies = begin
    @yaml_wrapper.load(cached_filepath)
  rescue YamlLoadException => e
    raise YamlLoadException.new(
      reason: e.reason, source: e.source, original_error: e.original_error,
      message: "Cached dependency-defines data is corrupted or unreadable ⏩️ #{e.message}"
    )
  end

  common_dependencies = current_dependencies.select { |file, defines| dependencies.has_key?(file) }

  if dependencies.values_at(*common_dependencies.keys) != common_dependencies.values
    changed_defines = true
  end

  dependencies.merge!(current_dependencies)
  @yaml_wrapper.dump(cached_filepath, dependencies)

  return changed_defines
end