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
|
||||||
end
|
end
|
||||||
|
|
||||||
def determine_bump_subject(file, original_commit, path: ".", reason: nil)
|
def determine_bump_subject(old_contents, new_contents, formula_path, reason: nil)
|
||||||
full_path = Pathname.new(path)/file
|
formula_path = Pathname(formula_path)
|
||||||
formula_name = File.basename(file.chomp(".rb"))
|
formula_name = formula_path.basename.to_s.chomp(".rb")
|
||||||
|
|
||||||
new_formula = begin
|
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
|
rescue FormulaUnavailableError
|
||||||
return "#{formula_name}: delete #{reason}"
|
return "#{formula_name}: delete #{reason}".strip
|
||||||
end
|
end
|
||||||
|
|
||||||
old_formula = begin
|
old_formula = begin
|
||||||
old_file = Utils.popen_read "git", "-C", path, "show", "#{original_commit}:#{file}"
|
Formulary.from_contents(formula_name, formula_path, old_contents, :stable)
|
||||||
Formulary.from_contents(formula_name, full_path, old_file, :stable)
|
|
||||||
rescue FormulaUnavailableError
|
rescue FormulaUnavailableError
|
||||||
return "#{formula_name} #{new_formula.stable.version} (new formula)"
|
return "#{formula_name} #{new_formula.stable.version} (new formula)"
|
||||||
end
|
end
|
||||||
@ -138,20 +137,25 @@ module Homebrew
|
|||||||
if old_formula.stable.version != new_formula.stable.version
|
if old_formula.stable.version != new_formula.stable.version
|
||||||
"#{formula_name} #{new_formula.stable.version}"
|
"#{formula_name} #{new_formula.stable.version}"
|
||||||
elsif old_formula.revision != new_formula.revision
|
elsif old_formula.revision != new_formula.revision
|
||||||
"#{formula_name}: revision #{reason}"
|
"#{formula_name}: revision #{reason}".strip
|
||||||
else
|
else
|
||||||
"#{formula_name}: #{reason || "rebuild"}"
|
"#{formula_name}: #{reason || "rebuild"}".strip
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Cherry picks a single commit that modifies a single file.
|
# Cherry picks a single commit that modifies a single file.
|
||||||
# Potentially rewords this commit using `determine_bump_subject`.
|
# Potentially rewords this commit using `determine_bump_subject`.
|
||||||
def reword_formula_commit(commit, file, args:, path: ".")
|
def reword_formula_commit(commit, file, args:, path: ".")
|
||||||
formula_name = File.basename(file.chomp(".rb"))
|
formula_file = Pathname.new(path) / file
|
||||||
odebug "Cherry-picking #{file}: #{commit}"
|
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?)
|
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")
|
message = Utils.popen_read("git", "-C", path, "log", "-1", "--pretty=%B")
|
||||||
subject, body, trailers = separate_commit_message(message)
|
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?)
|
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.
|
# 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.
|
# Commit with the new subject, body, and trailers.
|
||||||
safe_system("git", "-C", path, "commit", "--quiet",
|
safe_system("git", "-C", path, "commit", "--quiet",
|
||||||
|
|||||||
@ -1,7 +1,68 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "dev-cmd/pr-pull"
|
||||||
require "cmd/shared_examples/args_parse"
|
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"
|
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
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user