dev-cmd/pr-pull: tests for bump subject
This commit is contained in:
parent
146664b45f
commit
d116087af6
@ -118,19 +118,18 @@ module Homebrew
|
||||
end
|
||||
end
|
||||
|
||||
def determine_bump_subject(file, original_commit, path: ".", reason: nil)
|
||||
full_path = Pathname.new(path)/file
|
||||
formula_name = File.basename(file.chomp(".rb"))
|
||||
def determine_bump_subject(old_contents, new_contents, formula_path, reason: nil)
|
||||
formula_path = Pathname(formula_path)
|
||||
formula_name = formula_path.basename.to_s.chomp(".rb")
|
||||
|
||||
new_formula = begin
|
||||
Formulary::FormulaLoader.new(formula_name, full_path).get_formula(:stable)
|
||||
Formulary.from_contents(formula_name, formula_path, new_contents, :stable)
|
||||
rescue FormulaUnavailableError
|
||||
return "#{formula_name}: delete #{reason}"
|
||||
return "#{formula_name}: delete #{reason}".strip
|
||||
end
|
||||
|
||||
old_formula = begin
|
||||
old_file = Utils.popen_read "git", "-C", path, "show", "#{original_commit}:#{file}"
|
||||
Formulary.from_contents(formula_name, full_path, old_file, :stable)
|
||||
Formulary.from_contents(formula_name, formula_path, old_contents, :stable)
|
||||
rescue FormulaUnavailableError
|
||||
return "#{formula_name} #{new_formula.stable.version} (new formula)"
|
||||
end
|
||||
@ -138,20 +137,25 @@ module Homebrew
|
||||
if old_formula.stable.version != new_formula.stable.version
|
||||
"#{formula_name} #{new_formula.stable.version}"
|
||||
elsif old_formula.revision != new_formula.revision
|
||||
"#{formula_name}: revision #{reason}"
|
||||
"#{formula_name}: revision #{reason}".strip
|
||||
else
|
||||
"#{formula_name}: #{reason || "rebuild"}"
|
||||
"#{formula_name}: #{reason || "rebuild"}".strip
|
||||
end
|
||||
end
|
||||
|
||||
# Cherry picks a single commit that modifies a single file.
|
||||
# Potentially rewords this commit using `determine_bump_subject`.
|
||||
def reword_formula_commit(commit, file, args:, path: ".")
|
||||
formula_name = File.basename(file.chomp(".rb"))
|
||||
odebug "Cherry-picking #{file}: #{commit}"
|
||||
formula_file = Pathname.new(path) / file
|
||||
formula_name = formula_file.basename.to_s.chomp(".rb")
|
||||
|
||||
odebug "Cherry-picking #{formula_file}: #{commit}"
|
||||
Utils::Git.cherry_pick!(path, commit, verbose: args.verbose?, resolve: args.resolve?)
|
||||
|
||||
bump_subject = determine_bump_subject(file, "HEAD^", path: path, reason: args.message).strip
|
||||
old_formula = Utils::Git.file_at_commit(path, file, "HEAD^")
|
||||
new_formula = Utils::Git.file_at_commit(path, file, "HEAD")
|
||||
|
||||
bump_subject = determine_bump_subject(old_formula, new_formula, formula_file, reason: args.message)
|
||||
message = Utils.popen_read("git", "-C", path, "log", "-1", "--pretty=%B")
|
||||
subject, body, trailers = separate_commit_message(message)
|
||||
|
||||
@ -201,7 +205,10 @@ module Homebrew
|
||||
Utils::Git.cherry_pick!(path, "--no-commit", *commits, verbose: args.verbose?, resolve: args.resolve?)
|
||||
|
||||
# Determine the bump subject by comparing the original state of the tree to its current state.
|
||||
bump_subject = determine_bump_subject(file, "#{commits.first}^", path: path, reason: args.message).strip
|
||||
formula_file = Pathname.new(path) / file
|
||||
old_formula = Utils::Git.file_at_commit(path, file, "#{commits.first}^")
|
||||
new_formula = File.read(formula_file)
|
||||
bump_subject = determine_bump_subject(old_formula, new_formula, formula_file, reason: reason)
|
||||
|
||||
# Commit with the new subject, body, and trailers.
|
||||
safe_system("git", "-C", path, "commit", "--quiet",
|
||||
|
||||
@ -1,7 +1,68 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "dev-cmd/pr-pull"
|
||||
require "cmd/shared_examples/args_parse"
|
||||
|
||||
describe "Homebrew.pr_pull_args" do
|
||||
describe Homebrew do
|
||||
describe "Homebrew.pr_pull_args" do
|
||||
it_behaves_like "parseable arguments"
|
||||
end
|
||||
|
||||
describe "#determine_bump_subject" do
|
||||
let(:formula) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
let(:formula_version) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-2.0.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
let(:formula_revision) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
revision 1
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
let(:formula_rebuild) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
desc "Helpful description"
|
||||
url "https://brew.sh/foo-1.0.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
|
||||
it "correctly bumps a new formula" do
|
||||
expect(described_class.determine_bump_subject("", formula, "foo.rb")).to eq("foo 1.0 (new formula)")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula version" do
|
||||
expect(described_class.determine_bump_subject(formula, formula_version, "foo.rb")).to eq("foo 2.0")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula revision with reason" do
|
||||
expect(described_class.determine_bump_subject(
|
||||
formula, formula_revision, "foo.rb", reason: "for fun"
|
||||
)).to eq("foo: revision for fun")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula rebuild" do
|
||||
expect(described_class.determine_bump_subject(formula, formula_rebuild, "foo.rb")).to eq("foo: rebuild")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula deletion" do
|
||||
expect(described_class.determine_bump_subject(formula, "", "foo.rb")).to eq("foo: delete")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user