Class: Dependabot::Gradle::FileUpdater::Wrapper::PropertiesReconciler

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/gradle/file_updater/wrapper/properties_reconciler.rb

Overview

Reconciles the ‘gradle-wrapper.properties` file after Gradle’s wrapper task has regenerated it from hardcoded defaults (see github.com/gradle/gradle/issues/36172).

The reconciliation policy is deliberately conservative: the user’s original file is the source of truth for everything (comments, ordering, custom keys, networkTimeout, retries, retryBackOffMs, validateDistributionUrl, distributionBase/Path, store paths, …). Only the keys that legitimately change for a version bump are taken from the regenerated file.

Constant Summary collapse

MANAGED_KEYS =

Keys whose value is owned by the update itself and therefore taken from the regenerated file. Everything not listed here is preserved verbatim from the user’s original file.

T.let(
  %w(distributionUrl distributionSha256Sum).freeze,
  T::Array[String]
)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original_content:, regenerated_content:) ⇒ PropertiesReconciler

Returns a new instance of PropertiesReconciler.



44
45
46
47
# File 'lib/dependabot/gradle/file_updater/wrapper/properties_reconciler.rb', line 44

def initialize(original_content:, regenerated_content:)
  @original_content = original_content
  @regenerated_content = regenerated_content
end

Class Method Details

.reconcile(original_content:, regenerated_content:) ⇒ Object



39
40
41
# File 'lib/dependabot/gradle/file_updater/wrapper/properties_reconciler.rb', line 39

def self.reconcile(original_content:, regenerated_content:)
  new(original_content: original_content, regenerated_content: regenerated_content).reconcile
end

Instance Method Details

#reconcileObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/dependabot/gradle/file_updater/wrapper/properties_reconciler.rb', line 50

def reconcile
  original_content = @original_content
  regenerated_content = @regenerated_content
  return original_content if original_content.nil? || regenerated_content.nil?

  document = PropertiesDocument.parse(original_content)
  regenerated = PropertiesDocument.parse(regenerated_content)

  MANAGED_KEYS.each do |key|
    new_value = regenerated.value_for(key)
    next if new_value.nil?

    document.upsert(key, new_value)
  end

  document.to_s
end