Class: BottleSpecification

Inherits:
Object
  • Object
show all
Defined in:
extend/os/linux/software_spec.rb,
software_spec.rb

Constant Summary collapse

RELOCATABLE_CELLARS =
[:any, :any_skip_relocation].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid



519
520
521
522
523
524
# File 'software_spec.rb', line 519

def initialize
  @rebuild = 0
  @repository = Homebrew::DEFAULT_REPOSITORY
  @collector = Utils::Bottles::Collector.new
  @root_url_specs = {}
end

Instance Attribute Details

#collectorObject (readonly)

Returns the value of attribute collector.



516
517
518
# File 'software_spec.rb', line 516

def collector
  @collector
end

#repositoryObject (readonly)

Returns the value of attribute repository.



516
517
518
# File 'software_spec.rb', line 516

def repository
  @repository
end

#root_url_specsObject (readonly)

Returns the value of attribute root_url_specs.



516
517
518
# File 'software_spec.rb', line 516

def root_url_specs
  @root_url_specs
end

#tapObject

Returns the value of attribute tap.



515
516
517
# File 'software_spec.rb', line 515

def tap
  @tap
end

Instance Method Details

#checksumsObject



614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
# File 'software_spec.rb', line 614

def checksums
  tags = collector.tags.sort_by do |tag|
    version = tag.to_macos_version
    # Give arm64 bottles a higher priority so they are first
    priority = (tag.arch == :arm64) ? "2" : "1"
    "#{priority}.#{version}_#{tag}"
  rescue MacOSVersionError
    # Sort non-MacOS tags below MacOS tags.
    "0.#{tag}"
  end
  tags.reverse.map do |tag|
    spec = collector.specification_for(tag)
    {
      "tag"    => spec.tag.to_sym,
      "digest" => spec.checksum,
      "cellar" => spec.cellar,
    }
  end
end

#compatible_locations?(tag: Utils::Bottles.tag) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
# File 'software_spec.rb', line 554

def compatible_locations?(tag: Utils::Bottles.tag)
  cellar = tag_to_cellar(tag)

  return true if RELOCATABLE_CELLARS.include?(cellar)

  prefix = Pathname(cellar).parent.to_s

  cellar_relocatable = cellar.size >= HOMEBREW_CELLAR.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"].present?
  prefix_relocatable = prefix.size >= HOMEBREW_PREFIX.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"].present?

  compatible_cellar = cellar == HOMEBREW_CELLAR.to_s || cellar_relocatable
  compatible_prefix = prefix == HOMEBREW_PREFIX.to_s || prefix_relocatable

  compatible_cellar && compatible_prefix
end

#root_url(var = nil, specs = {}) ⇒ Object



526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
# File 'software_spec.rb', line 526

def root_url(var = nil, specs = {})
  if var.nil?
    @root_url ||= if (github_packages_url = GitHubPackages.root_url_if_match(Homebrew::EnvConfig.bottle_domain))
      github_packages_url
    else
      Homebrew::EnvConfig.bottle_domain
    end
  else
    @root_url = if (github_packages_url = GitHubPackages.root_url_if_match(var))
      github_packages_url
    else
      var
    end
    @root_url_specs.merge!(specs)
  end
end

#sha256(hash) ⇒ Object

Checksum methods in the DSL’s bottle block take a Hash, which indicates the platform the checksum applies on. Example bottle block syntax: bottle do sha256 cellar: :any_skip_relocation, big_sur: “69489ae397e4645…” sha256 cellar: :any, catalina: “449de5ea35d0e94…” end



589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
# File 'software_spec.rb', line 589

def sha256(hash)
  sha256_regex = /^[a-f0-9]{64}$/i

  # find new `sha256 big_sur: "69489ae397e4645..."` format
  tag, digest = hash.find do |key, value|
    key.is_a?(Symbol) && value.is_a?(String) && value.match?(sha256_regex)
  end

  cellar = hash[:cellar] if digest && tag

  tag = Utils::Bottles::Tag.from_symbol(tag)

  cellar ||= tag.default_cellar

  collector.add(tag, checksum: Checksum.new(digest), cellar: cellar)
end

#skip_relocation?(tag: Utils::Bottles.tag) ⇒ Boolean

Does the Bottle this BottleSpecification belongs to need to be relocated?

Parameters:

Returns:

  • (Boolean)


8
9
10
# File 'extend/os/linux/software_spec.rb', line 8

def skip_relocation?(tag: Utils::Bottles.tag)
  false
end

#tag?(tag, no_older_versions: false) ⇒ Boolean

Parameters:

Returns:

  • (Boolean)


578
579
580
# File 'software_spec.rb', line 578

def tag?(tag, no_older_versions: false)
  collector.tag?(tag, no_older_versions: no_older_versions)
end

#tag_specification_for(tag, no_older_versions: false) ⇒ Utils::Bottles::TagSpecification?

Parameters:

Returns:



610
611
612
# File 'software_spec.rb', line 610

def tag_specification_for(tag, no_older_versions: false)
  collector.specification_for(tag, no_older_versions: no_older_versions)
end

#tag_to_cellar(tag = Utils::Bottles.tag) ⇒ Symbol, String

Parameters:

Returns:



544
545
546
547
548
549
550
551
# File 'software_spec.rb', line 544

def tag_to_cellar(tag = Utils::Bottles.tag)
  spec = collector.specification_for(tag)
  if spec.present?
    spec.cellar
  else
    tag.default_cellar
  end
end