Skip to content

Commit

Permalink
Merge pull request #17588 from Kentzo/extract-revision
Browse files Browse the repository at this point in the history
  • Loading branch information
MikeMcQuaid authored Jun 30, 2024
2 parents 6ca4655 + 8de6d51 commit ab2b3d5
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
15 changes: 11 additions & 4 deletions Library/Homebrew/dev-cmd/extract.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ class Extract < AbstractCommand
a formula from a tap that is not `homebrew/core` use its fully-qualified form of
<user>`/`<repo>`/`<formula>.
EOS
flag "--git-revision=",
description: "Search for the specified <version> of <formula> starting at <revision> instead of HEAD."
flag "--version=",
description: "Extract the specified <version> of <formula> instead of the most recent."
switch "-f", "--force",
Expand Down Expand Up @@ -49,6 +51,7 @@ def run
destination_tap.install unless destination_tap.installed?

repo = source_tap.path
start_rev = args.git_revision || "HEAD"
pattern = if source_tap.core_tap?
[source_tap.new_formula_path(name), repo/"Formula/#{name}.rb"].uniq
else
Expand All @@ -64,7 +67,7 @@ def run
test_formula = T.let(nil, T.nilable(Formula))
result = ""
loop do
rev = rev.nil? ? "HEAD" : "#{rev}~1"
rev = rev.nil? ? start_rev : "#{rev}~1"
rev, (path,) = Utils::Git.last_revision_commit_of_files(repo, pattern, before_commit: rev)
if rev.nil? && source_tap.shallow?
odie <<~EOS
Expand Down Expand Up @@ -99,13 +102,17 @@ def run
odie "Could not find #{name}! The formula or version may not have existed." if test_formula.nil?
else
# Search in the root directory of `repository` as well as recursively in all of its subdirectories.
files = Dir[repo/"{,**/}"].filter_map do |dir|
Pathname.glob("#{dir}/#{name}.rb").find(&:file?)
files = if start_rev == "HEAD"
Dir[repo/"{,**/}"].filter_map do |dir|
Pathname.glob("#{dir}/#{name}.rb").find(&:file?)
end
else
[]
end

if files.empty?
ohai "Searching repository history"
rev, (path,) = Utils::Git.last_revision_commit_of_files(repo, pattern)
rev, (path,) = Utils::Git.last_revision_commit_of_files(repo, pattern, before_commit: start_rev)
odie "Could not find #{name}! The formula or version may not have existed." if rev.nil?
file = repo/path
version = T.must(formula_at_revision(repo, name, file, rev)).version
Expand Down
3 changes: 3 additions & 0 deletions Library/Homebrew/sorbet/rbi/dsl/homebrew/dev_cmd/extract.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit ab2b3d5

Please sign in to comment.