# typed: true # frozen_string_literal: true require "formula" require "cli/parser" module Homebrew module_function sig { returns(CLI::Parser) } def bump_revision_args Homebrew::CLI::Parser.new do description <<~EOS Create a commit to increment the revision of . If no revision is present, "revision 1" will be added. EOS switch "-n", "--dry-run", description: "Print what would be done rather than doing it." switch "--remove-bottle-block", description: "Remove the bottle block in addition to bumping the revision." switch "--write-only", description: "Make the expected file modifications without taking any Git actions." flag "--message=", description: "Append to the default commit message." conflicts "--dry-run", "--write-only" named_args :formula, min: 1 end end def bump_revision args = bump_revision_args.parse # As this command is simplifying user-run commands then let's just use a # user path, too. ENV["PATH"] = PATH.new(ORIGINAL_PATHS).to_s args.named.to_formulae.each do |formula| current_revision = formula.revision new_revision = current_revision + 1 if args.dry_run? unless args.quiet? old_text = "revision #{current_revision}" new_text = "revision #{new_revision}" if current_revision.zero? ohai "add #{new_text.inspect}" else ohai "replace #{old_text.inspect} with #{new_text.inspect}" end end else Homebrew.install_bundler_gems! require "utils/ast" formula_ast = Utils::AST::FormulaAST.new(formula.path.read) if current_revision.zero? formula_ast.add_stanza(:revision, new_revision) else formula_ast.replace_stanza(:revision, new_revision) end formula_ast.remove_stanza(:bottle) if args.remove_bottle_block? formula.path.atomic_write(formula_ast.process) end message = "#{formula.name}: revision bump #{args.message}" if args.dry_run? ohai "git commit --no-edit --verbose --message=#{message} -- #{formula.path}" elsif !args.write_only? formula.path.parent.cd do safe_system "git", "commit", "--no-edit", "--verbose", "--message=#{message}", "--", formula.path end end end end end