mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
dev-cmd/pr-pull: refactor and test signoff!
This commit is contained in:
parent
0bb2c96cfc
commit
99a5aa07ad
@ -98,22 +98,28 @@ module Homebrew
|
|||||||
[subject, body, trailers]
|
[subject, body, trailers]
|
||||||
end
|
end
|
||||||
|
|
||||||
def signoff!(pr, tap:, args:)
|
def signoff!(path, pr: nil, dry_run: false)
|
||||||
subject, body, trailers = separate_commit_message(Utils::Git.commit_message(tap.path))
|
subject, body, trailers = separate_commit_message(Utils::Git.commit_message(path))
|
||||||
|
|
||||||
# Approving reviewers also sign-off on merge.
|
if pr
|
||||||
|
# This is a tap pull request and approving reviewers should also sign-off.
|
||||||
|
tap = Tap.from_path(path)
|
||||||
trailers += GitHub.approved_reviews(tap.user, "homebrew-#{tap.repo}", pr).map do |r|
|
trailers += GitHub.approved_reviews(tap.user, "homebrew-#{tap.repo}", pr).map do |r|
|
||||||
"Signed-off-by: #{r["name"]} <#{r["email"]}>"
|
"Signed-off-by: #{r["name"]} <#{r["email"]}>"
|
||||||
end.join("\n")
|
end.join("\n")
|
||||||
|
|
||||||
|
# Append the close message as well, unless the commit body already includes it.
|
||||||
close_message = "Closes ##{pr}."
|
close_message = "Closes ##{pr}."
|
||||||
body += "\n\n#{close_message}" unless body.include? close_message
|
body += "\n\n#{close_message}" unless body.include? close_message
|
||||||
new_message = [subject, body, trailers].join("\n\n").strip
|
end
|
||||||
|
|
||||||
if args.dry_run?
|
git_args = Utils::Git.git, "-C", path, "commit", "--amend", "--signoff", "--allow-empty", "--quiet",
|
||||||
puts "git commit --amend --signoff -m $message"
|
"--message", subject, "--message", body, "--message", trailers
|
||||||
|
|
||||||
|
if dry_run
|
||||||
|
puts(*git_args)
|
||||||
else
|
else
|
||||||
safe_system "git", "-C", tap.path, "commit", "--amend", "--signoff", "--allow-empty", "-q", "-m", new_message
|
safe_system(*git_args)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -392,7 +398,7 @@ module Homebrew
|
|||||||
original_commit = Utils.popen_read("git", "-C", tap.path, "rev-parse", "HEAD").chomp
|
original_commit = Utils.popen_read("git", "-C", tap.path, "rev-parse", "HEAD").chomp
|
||||||
cherry_pick_pr!(user, repo, pr, path: tap.path, args: args)
|
cherry_pick_pr!(user, repo, pr, path: tap.path, args: args)
|
||||||
autosquash!(original_commit, path: tap.path, args: args) if args.autosquash?
|
autosquash!(original_commit, path: tap.path, args: args) if args.autosquash?
|
||||||
signoff!(pr, tap: tap, args: args) unless args.clean?
|
signoff!(tap.path, pr: pr, dry_run: args.dry_run?) unless args.clean?
|
||||||
|
|
||||||
unless args.no_upload?
|
unless args.no_upload?
|
||||||
mirror_formulae(tap, original_commit,
|
mirror_formulae(tap, original_commit,
|
||||||
|
@ -1,39 +1,11 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "dev-cmd/pr-pull"
|
require "dev-cmd/pr-pull"
|
||||||
|
require "utils/git"
|
||||||
|
require "tap"
|
||||||
require "cmd/shared_examples/args_parse"
|
require "cmd/shared_examples/args_parse"
|
||||||
|
|
||||||
describe Homebrew 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
|
let(:formula_rebuild) do
|
||||||
<<~EOS
|
<<~EOS
|
||||||
class Foo < Formula
|
class Foo < Formula
|
||||||
@ -42,27 +14,70 @@ describe Homebrew do
|
|||||||
end
|
end
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
|
let(:formula_revision) do
|
||||||
|
<<~EOS
|
||||||
|
class Foo < Formula
|
||||||
|
url "https://brew.sh/foo-1.0.tgz"
|
||||||
|
revision 1
|
||||||
|
end
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
let(:formula_version) do
|
||||||
|
<<~EOS
|
||||||
|
class Foo < Formula
|
||||||
|
url "https://brew.sh/foo-2.0.tgz"
|
||||||
|
end
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
let(:formula) do
|
||||||
|
<<~EOS
|
||||||
|
class Foo < Formula
|
||||||
|
url "https://brew.sh/foo-1.0.tgz"
|
||||||
|
end
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
let(:formula_file) { path/"Formula/foo.rb" }
|
||||||
|
let(:path) { Tap::TAP_DIRECTORY/"homebrew/homebrew-foo" }
|
||||||
|
|
||||||
|
describe "Homebrew.pr_pull_args" do
|
||||||
|
it_behaves_like "parseable arguments"
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#signoff!" do
|
||||||
|
it "signs off a formula" do
|
||||||
|
(path/"Formula").mkpath
|
||||||
|
formula_file.write(formula)
|
||||||
|
cd path do
|
||||||
|
safe_system Utils::Git.git, "init"
|
||||||
|
safe_system Utils::Git.git, "add", formula_file
|
||||||
|
safe_system Utils::Git.git, "commit", "-m", "foo 1.0 (new formula)"
|
||||||
|
end
|
||||||
|
described_class.signoff!(path)
|
||||||
|
expect(Utils::Git.commit_message(path)).to include("Signed-off-by:")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "#determine_bump_subject" do
|
||||||
it "correctly bumps a new formula" do
|
it "correctly bumps a new formula" do
|
||||||
expect(described_class.determine_bump_subject("", formula, "foo.rb")).to eq("foo 1.0 (new formula)")
|
expect(described_class.determine_bump_subject("", formula, formula_file)).to eq("foo 1.0 (new formula)")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly bumps a formula version" do
|
it "correctly bumps a formula version" do
|
||||||
expect(described_class.determine_bump_subject(formula, formula_version, "foo.rb")).to eq("foo 2.0")
|
expect(described_class.determine_bump_subject(formula, formula_version, formula_file)).to eq("foo 2.0")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly bumps a formula revision with reason" do
|
it "correctly bumps a formula revision with reason" do
|
||||||
expect(described_class.determine_bump_subject(
|
expect(described_class.determine_bump_subject(
|
||||||
formula, formula_revision, "foo.rb", reason: "for fun"
|
formula, formula_revision, formula_file, reason: "for fun"
|
||||||
)).to eq("foo: revision for fun")
|
)).to eq("foo: revision for fun")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly bumps a formula rebuild" do
|
it "correctly bumps a formula rebuild" do
|
||||||
expect(described_class.determine_bump_subject(formula, formula_rebuild, "foo.rb")).to eq("foo: rebuild")
|
expect(described_class.determine_bump_subject(formula, formula_rebuild, formula_file)).to eq("foo: rebuild")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "correctly bumps a formula deletion" do
|
it "correctly bumps a formula deletion" do
|
||||||
expect(described_class.determine_bump_subject(formula, "", "foo.rb")).to eq("foo: delete")
|
expect(described_class.determine_bump_subject(formula, "", formula_file)).to eq("foo: delete")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user