diff --git a/Library/Homebrew/dev-cmd/update-test.rb b/Library/Homebrew/dev-cmd/update-test.rb index e6d09edf565ff..8bb643b21c3fa 100644 --- a/Library/Homebrew/dev-cmd/update-test.rb +++ b/Library/Homebrew/dev-cmd/update-test.rb @@ -1,14 +1,12 @@ -# typed: false +# typed: true # frozen_string_literal: true require "cli/parser" module Homebrew extend T::Sig - module_function - sig { returns(CLI::Parser) } - def update_test_args + def self.update_test_args Homebrew::CLI::Parser.new do description <<~EOS Run a test of `brew update` with a new repository clone. @@ -27,7 +25,7 @@ def update_test_args end end - def update_test + def self.update_test args = update_test_args.parse # Avoid `update-report.rb` tapping Homebrew/homebrew-core @@ -51,10 +49,12 @@ def update_test "master" end - start_commit = nil + # Utils.popen_read returns a String without a block argument, but that isn't easily typed. We thus label this + # as untyped for now. + start_commit = T.let("", T.untyped) end_commit = "HEAD" cd HOMEBREW_REPOSITORY do - start_commit = if (commit = args.commit) + start_commit = if (commit = T.let(args.commit, T.nilable(String))) commit elsif (date = args.before) Utils.popen_read("git", "rev-list", "-n1", "--before=#{date}", "origin/master").chomp @@ -78,7 +78,7 @@ def update_test start_commit = Utils.popen_read("git", "rev-parse", start_commit).chomp odie "Could not find start commit!" if start_commit.empty? - end_commit = Utils.popen_read("git", "rev-parse", end_commit).chomp + end_commit = T.cast(Utils.popen_read("git", "rev-parse", end_commit).chomp, String) odie "Could not find end commit!" if end_commit.empty? if Utils.popen_read("git", "branch", "--list", "master").blank? @@ -114,7 +114,7 @@ def update_test safe_system "git", "reset", "--hard", start_commit # update ENV["PATH"] - ENV["PATH"] = PATH.new(ENV.fetch("PATH")).prepend(curdir/"bin") + ENV["PATH"] = PATH.new(ENV.fetch("PATH")).prepend(curdir/"bin").to_s # run brew help to install portable-ruby (if needed) quiet_system "brew", "help" @@ -139,7 +139,7 @@ def update_test FileUtils.rm_rf "update-test" unless args.keep_tmp? end - def git_tags + def self.git_tags tags = Utils.popen_read("git", "tag", "--list", "--sort=-version:refname") if tags.blank? tags = if (HOMEBREW_REPOSITORY/".git/shallow").exist? diff --git a/Library/Homebrew/extend/git_repository.rb b/Library/Homebrew/extend/git_repository.rb index a91ec91704529..6e21970e31d80 100644 --- a/Library/Homebrew/extend/git_repository.rb +++ b/Library/Homebrew/extend/git_repository.rb @@ -117,6 +117,6 @@ def popen_git(*args, safe: false, err: nil) raise "Git is unavailable" end - T.unsafe(Utils).popen_read(Utils::Git.git, *args, safe: safe, chdir: self, err: err).chomp.presence + Utils.popen_read(Utils::Git.git, *args, safe: safe, chdir: self, err: err).chomp.presence end end diff --git a/Library/Homebrew/extend/io.rb b/Library/Homebrew/extend/io.rb index f5d36dfc84f8b..383b8213c918e 100644 --- a/Library/Homebrew/extend/io.rb +++ b/Library/Homebrew/extend/io.rb @@ -1,4 +1,4 @@ -# typed: false +# typed: true # frozen_string_literal: true class IO @@ -6,17 +6,19 @@ def readline_nonblock(sep = $INPUT_RECORD_SEPARATOR) line = +"" buffer = +"" - loop do - break if buffer == sep + begin + loop do + break if buffer == sep - read_nonblock(1, buffer) - line.concat(buffer) - end + read_nonblock(1, buffer) + line.concat(buffer) + end - line.freeze - rescue IO::WaitReadable, EOFError => e - raise e if line.empty? + line.freeze + rescue IO::WaitReadable, EOFError + raise if line.empty? - line.freeze + line.freeze + end end end