diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 19e28f8f3298bcf9699c11ca9b9258381b23b980..33bbe3c42af20044d032ded0864acd68c81ef41d 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -70,8 +70,8 @@ module Homebrew flag "--tag=", description: "Specify the new git commit <tag> for the formula." flag "--revision=", - depends_on: "--tag=", - description: "Specify the new git commit <revision> corresponding to the specified <tag>." + description: "Specify the new commit <revision> corresponding to the specified git <tag> "\ + "or specified <version>." switch "-f", "--force", description: "Ignore duplicate open PRs. Remove all mirrors if `--mirror` was not specified." @@ -121,6 +121,10 @@ module Homebrew def bump_formula_pr args = bump_formula_pr_args.parse + if args.revision.present? && args.tag.nil? && args.version.nil? + raise UsageError, "`--revision` must be passed with either `--tag` or `--version`!" + end + # As this command is simplifying user-run commands then let's just use a # user path, too. ENV["PATH"] = ENV["HOMEBREW_PATH"] @@ -177,21 +181,28 @@ module Homebrew check_closed_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag, args: args) unless new_version false elsif !hash_type - odie "#{formula}: no --tag= or --version= argument specified!" if !new_tag && !new_version - new_tag ||= old_tag.gsub(old_version, new_version) - if new_tag == old_tag - odie <<~EOS - You need to bump this formula manually since the new tag - and old tag are both #{new_tag}. - EOS + if !new_tag && !new_version && !new_revision + raise UsageError, "#{formula}: no --tag= or --version= argument specified!" + end + + if old_tag + new_tag ||= old_tag.gsub(old_version, new_version) + if new_tag == old_tag + odie <<~EOS + You need to bump this formula manually since the new tag + and old tag are both #{new_tag}. + EOS + end + check_closed_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag, args: args) unless new_version + resource_path, forced_version = fetch_resource(formula, new_version, old_url, tag: new_tag) + new_revision = Utils.popen_read("git -C \"#{resource_path}\" rev-parse -q --verify HEAD") + new_revision = new_revision.strip + else + odie "#{formula}: the current URL requires specifying a --revision= argument." unless new_revision end - check_closed_pull_requests(formula, tap_full_name, url: old_url, tag: new_tag, args: args) unless new_version - resource_path, forced_version = fetch_resource(formula, new_version, old_url, tag: new_tag) - new_revision = Utils.popen_read("git -C \"#{resource_path}\" rev-parse -q --verify HEAD") - new_revision = new_revision.strip false elsif !new_url && !new_version - odie "#{formula}: no --url= or --version= argument specified!" + raise UsageError, "#{formula}: no --url= or --version= argument specified!" else new_url ||= PyPI.update_pypi_url(old_url, new_version) unless new_url @@ -241,7 +252,7 @@ module Homebrew new_hash, ], ] - else + elsif new_tag [ [ formula_spec.specs[:tag], @@ -252,6 +263,24 @@ module Homebrew new_revision, ], ] + elsif new_url + [ + [ + /#{Regexp.escape(formula_spec.url)}/, + new_url, + ], + [ + formula_spec.specs[:revision], + new_revision, + ], + ] + else + [ + [ + formula_spec.specs[:revision], + new_revision, + ], + ] end old_contents = File.read(formula.path) unless args.dry_run? @@ -312,8 +341,8 @@ module Homebrew if new_formula_version < old_formula_version formula.path.atomic_write(old_contents) unless args.dry_run? odie <<~EOS - You need to bump this formula manually since changing the - version from #{old_formula_version} to #{new_formula_version} would be a downgrade. + You need to bump this formula manually since changing the version + from #{old_formula_version} to #{new_formula_version} would be a downgrade. EOS elsif new_formula_version == old_formula_version formula.path.atomic_write(old_contents) unless args.dry_run? diff --git a/docs/Manpage.md b/docs/Manpage.md index ed716a523bdcbdeb293729e91dc2dfe280e6af8e..bde9166613596f458fdd6d348cf8a22fc10bde68 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -889,7 +889,7 @@ nor vice versa. It must use whichever style specification the formula already us * `--tag`: Specify the new git commit *`tag`* for the formula. * `--revision`: - Specify the new git commit *`revision`* corresponding to the specified *`tag`*. + Specify the new commit *`revision`* corresponding to the specified git *`tag`* or specified *`version`*. * `-f`, `--force`: Ignore duplicate open PRs. Remove all mirrors if `--mirror` was not specified. diff --git a/manpages/brew.1 b/manpages/brew.1 index 5c4fd5506d2e9bdda2ff31b501a62a5e9afe6edf..00f2879d1fc42e7943ae2dbdb78672bbbcad65b2 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1236,7 +1236,7 @@ Specify the new git commit \fItag\fR for the formula\. . .TP \fB\-\-revision\fR -Specify the new git commit \fIrevision\fR corresponding to the specified \fItag\fR\. +Specify the new commit \fIrevision\fR corresponding to the specified git \fItag\fR or specified \fIversion\fR\. . .TP \fB\-f\fR, \fB\-\-force\fR