Class: BottleSpecification

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
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



485
486
487
488
489
490
# File 'software_spec.rb', line 485

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.



482
483
484
# File 'software_spec.rb', line 482

def collector
  @collector
end

#repositoryObject (readonly)

Returns the value of attribute repository.



482
483
484
# File 'software_spec.rb', line 482

def repository
  @repository
end

#root_url_specsObject (readonly)

Returns the value of attribute root_url_specs.



482
483
484
# File 'software_spec.rb', line 482

def root_url_specs
  @root_url_specs
end

#tapObject

Returns the value of attribute tap.



481
482
483
# File 'software_spec.rb', line 481

def tap
  @tap
end

Instance Method Details

#checksumsObject



580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
# File 'software_spec.rb', line 580

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)


520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
# File 'software_spec.rb', line 520

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"]
  prefix_relocatable = prefix.size >= HOMEBREW_PREFIX.to_s.size && ENV["HOMEBREW_RELOCATE_BUILD_PREFIX"]

  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



492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
# File 'software_spec.rb', line 492

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



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

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)


544
545
546
# File 'software_spec.rb', line 544

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:



576
577
578
# File 'software_spec.rb', line 576

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:



510
511
512
513
514
515
516
517
# File 'software_spec.rb', line 510

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