Port Homebrew::DevCmd::PrPull
This commit is contained in:
parent
999ecf8b54
commit
dc062bea52
@ -2,6 +2,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "abstract_command"
|
||||
require "fileutils"
|
||||
require "formula"
|
||||
require "utils/bottles"
|
||||
require "tab"
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "abstract_command"
|
||||
require "fileutils"
|
||||
require "formula"
|
||||
require "cli/parser"
|
||||
require "utils/pypi"
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
require "abstract_command"
|
||||
require "cli/parser"
|
||||
require "fileutils"
|
||||
|
||||
module Homebrew
|
||||
module DevCmd
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
require "abstract_command"
|
||||
require "cli/parser"
|
||||
require "cask/cask"
|
||||
require "fileutils"
|
||||
require "formula"
|
||||
|
||||
module Homebrew
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "abstract_command"
|
||||
require "cli/parser"
|
||||
require "fileutils"
|
||||
require "formula"
|
||||
|
||||
module Homebrew
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -5,199 +5,198 @@ require "utils/git"
|
||||
require "tap"
|
||||
require "cmd/shared_examples/args_parse"
|
||||
|
||||
RSpec.describe "brew pr-pull" do
|
||||
RSpec.describe Homebrew::DevCmd::PrPull do
|
||||
let(:pr_pull) { described_class.new(["foo"]) }
|
||||
let(:formula_rebuild) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
desc "Helpful description"
|
||||
url "https://brew.sh/foo-1.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_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(:cask_rebuild) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
desc "Helpful description"
|
||||
version "1.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask_checksum) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
desc "Helpful description"
|
||||
version "1.0"
|
||||
sha256 "b"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask_version) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
version "2.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
version "1.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:tap) { Tap.fetch("Homebrew", "foo") }
|
||||
let(:formula_file) { tap.path/"Formula/foo.rb" }
|
||||
let(:cask_file) { tap.cask_dir/"food.rb" }
|
||||
let(:path) { Pathname(Tap::TAP_DIRECTORY/"homebrew/homebrew-foo") }
|
||||
|
||||
it_behaves_like "parseable arguments"
|
||||
|
||||
describe Homebrew do
|
||||
let(:formula_rebuild) do
|
||||
<<~EOS
|
||||
class Foo < Formula
|
||||
desc "Helpful description"
|
||||
url "https://brew.sh/foo-1.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_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(:cask_rebuild) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
desc "Helpful description"
|
||||
version "1.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask_checksum) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
desc "Helpful description"
|
||||
version "1.0"
|
||||
sha256 "b"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask_version) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
version "2.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:cask) do
|
||||
<<~EOS
|
||||
cask "food" do
|
||||
version "1.0"
|
||||
sha256 "a"
|
||||
url "https://brew.sh/food-\#{version}.tgz"
|
||||
end
|
||||
EOS
|
||||
end
|
||||
let(:tap) { Tap.fetch("Homebrew", "foo") }
|
||||
let(:formula_file) { tap.path/"Formula/foo.rb" }
|
||||
let(:cask_file) { tap.cask_dir/"food.rb" }
|
||||
let(:path) { Pathname(Tap::TAP_DIRECTORY/"homebrew/homebrew-foo") }
|
||||
|
||||
describe "#autosquash!" do
|
||||
it "squashes a formula or cask correctly" do
|
||||
secondary_author = "Someone Else <me@example.com>"
|
||||
(tap.path/"Formula").mkpath
|
||||
formula_file.write(formula)
|
||||
cd tap.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)"
|
||||
original_hash = `git rev-parse HEAD`.chomp
|
||||
File.write(formula_file, formula_revision)
|
||||
safe_system Utils::Git.git, "commit", formula_file, "-m", "revision"
|
||||
File.write(formula_file, formula_version)
|
||||
safe_system Utils::Git.git, "commit", formula_file, "-m", "version", "--author=#{secondary_author}"
|
||||
described_class.autosquash!(original_hash, tap:)
|
||||
expect(tap.git_repo.commit_message).to include("foo 2.0")
|
||||
expect(tap.git_repo.commit_message).to include("Co-authored-by: #{secondary_author}")
|
||||
end
|
||||
|
||||
(path/"Casks").mkpath
|
||||
cask_file.write(cask)
|
||||
cd path do
|
||||
safe_system Utils::Git.git, "add", cask_file
|
||||
safe_system Utils::Git.git, "commit", "-m", "food 1.0 (new cask)"
|
||||
original_hash = `git rev-parse HEAD`.chomp
|
||||
File.write(cask_file, cask_rebuild)
|
||||
safe_system Utils::Git.git, "commit", cask_file, "-m", "rebuild"
|
||||
File.write(cask_file, cask_version)
|
||||
safe_system Utils::Git.git, "commit", cask_file, "-m", "version", "--author=#{secondary_author}"
|
||||
described_class.autosquash!(original_hash, tap:)
|
||||
git_repo = GitRepository.new(path)
|
||||
expect(git_repo.commit_message).to include("food 2.0")
|
||||
expect(git_repo.commit_message).to include("Co-authored-by: #{secondary_author}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#signoff!" do
|
||||
it "signs off a formula or cask" do
|
||||
(tap.path/"Formula").mkpath
|
||||
formula_file.write(formula)
|
||||
cd tap.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!(tap.git_repo)
|
||||
expect(tap.git_repo.commit_message).to include("Signed-off-by:")
|
||||
|
||||
(path/"Casks").mkpath
|
||||
cask_file.write(cask)
|
||||
cd path do
|
||||
safe_system Utils::Git.git, "add", cask_file
|
||||
safe_system Utils::Git.git, "commit", "-m", "food 1.0 (new cask)"
|
||||
end
|
||||
described_class.signoff!(tap.git_repo)
|
||||
expect(tap.git_repo.commit_message).to include("Signed-off-by:")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#get_package" do
|
||||
it "returns a formula" do
|
||||
expect(described_class.get_package(tap, "foo", formula_file, formula)).to be_a(Formula)
|
||||
describe "#autosquash!" do
|
||||
it "squashes a formula or cask correctly" do
|
||||
secondary_author = "Someone Else <me@example.com>"
|
||||
(tap.path/"Formula").mkpath
|
||||
formula_file.write(formula)
|
||||
cd tap.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)"
|
||||
original_hash = `git rev-parse HEAD`.chomp
|
||||
File.write(formula_file, formula_revision)
|
||||
safe_system Utils::Git.git, "commit", formula_file, "-m", "revision"
|
||||
File.write(formula_file, formula_version)
|
||||
safe_system Utils::Git.git, "commit", formula_file, "-m", "version", "--author=#{secondary_author}"
|
||||
pr_pull.autosquash!(original_hash, tap:)
|
||||
expect(tap.git_repo.commit_message).to include("foo 2.0")
|
||||
expect(tap.git_repo.commit_message).to include("Co-authored-by: #{secondary_author}")
|
||||
end
|
||||
|
||||
it "returns nil for an unknown formula" do
|
||||
expect(described_class.get_package(tap, "foo", formula_file, "")).to be_nil
|
||||
end
|
||||
|
||||
it "returns a cask" do
|
||||
expect(described_class.get_package(tap, "foo", cask_file, cask)).to be_a(Cask::Cask)
|
||||
end
|
||||
|
||||
it "returns nil for an unknown cask" do
|
||||
expect(described_class.get_package(tap, "foo", cask_file, "")).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe "#determine_bump_subject" do
|
||||
it "correctly bumps a new formula" do
|
||||
expect(described_class.determine_bump_subject("", formula, formula_file)).to eq("foo 1.0 (new formula)")
|
||||
end
|
||||
|
||||
it "correctly bumps a new cask" do
|
||||
expect(described_class.determine_bump_subject("", cask, cask_file)).to eq("food 1.0 (new cask)")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula version" do
|
||||
expect(described_class.determine_bump_subject(formula, formula_version, formula_file)).to eq("foo 2.0")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask version" do
|
||||
expect(described_class.determine_bump_subject(cask, cask_version, cask_file)).to eq("food 2.0")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask checksum" do
|
||||
expect(described_class.determine_bump_subject(cask, cask_checksum, cask_file)).to eq("food: checksum update")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula revision with reason" do
|
||||
expect(described_class.determine_bump_subject(
|
||||
formula, formula_revision, formula_file, 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, formula_file)).to eq("foo: rebuild")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula deletion" do
|
||||
expect(described_class.determine_bump_subject(formula, "", formula_file)).to eq("foo: delete")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask deletion" do
|
||||
expect(described_class.determine_bump_subject(cask, "", cask_file)).to eq("food: delete")
|
||||
(path/"Casks").mkpath
|
||||
cask_file.write(cask)
|
||||
cd path do
|
||||
safe_system Utils::Git.git, "add", cask_file
|
||||
safe_system Utils::Git.git, "commit", "-m", "food 1.0 (new cask)"
|
||||
original_hash = `git rev-parse HEAD`.chomp
|
||||
File.write(cask_file, cask_rebuild)
|
||||
safe_system Utils::Git.git, "commit", cask_file, "-m", "rebuild"
|
||||
File.write(cask_file, cask_version)
|
||||
safe_system Utils::Git.git, "commit", cask_file, "-m", "version", "--author=#{secondary_author}"
|
||||
pr_pull.autosquash!(original_hash, tap:)
|
||||
git_repo = GitRepository.new(path)
|
||||
expect(git_repo.commit_message).to include("food 2.0")
|
||||
expect(git_repo.commit_message).to include("Co-authored-by: #{secondary_author}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#signoff!" do
|
||||
it "signs off a formula or cask" do
|
||||
(tap.path/"Formula").mkpath
|
||||
formula_file.write(formula)
|
||||
cd tap.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
|
||||
pr_pull.signoff!(tap.git_repo)
|
||||
expect(tap.git_repo.commit_message).to include("Signed-off-by:")
|
||||
|
||||
(path/"Casks").mkpath
|
||||
cask_file.write(cask)
|
||||
cd path do
|
||||
safe_system Utils::Git.git, "add", cask_file
|
||||
safe_system Utils::Git.git, "commit", "-m", "food 1.0 (new cask)"
|
||||
end
|
||||
pr_pull.signoff!(tap.git_repo)
|
||||
expect(tap.git_repo.commit_message).to include("Signed-off-by:")
|
||||
end
|
||||
end
|
||||
|
||||
describe "#get_package" do
|
||||
it "returns a formula" do
|
||||
expect(pr_pull.get_package(tap, "foo", formula_file, formula)).to be_a(Formula)
|
||||
end
|
||||
|
||||
it "returns nil for an unknown formula" do
|
||||
expect(pr_pull.get_package(tap, "foo", formula_file, "")).to be_nil
|
||||
end
|
||||
|
||||
it "returns a cask" do
|
||||
expect(pr_pull.get_package(tap, "foo", cask_file, cask)).to be_a(Cask::Cask)
|
||||
end
|
||||
|
||||
it "returns nil for an unknown cask" do
|
||||
expect(pr_pull.get_package(tap, "foo", cask_file, "")).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe "#determine_bump_subject" do
|
||||
it "correctly bumps a new formula" do
|
||||
expect(pr_pull.determine_bump_subject("", formula, formula_file)).to eq("foo 1.0 (new formula)")
|
||||
end
|
||||
|
||||
it "correctly bumps a new cask" do
|
||||
expect(pr_pull.determine_bump_subject("", cask, cask_file)).to eq("food 1.0 (new cask)")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula version" do
|
||||
expect(pr_pull.determine_bump_subject(formula, formula_version, formula_file)).to eq("foo 2.0")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask version" do
|
||||
expect(pr_pull.determine_bump_subject(cask, cask_version, cask_file)).to eq("food 2.0")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask checksum" do
|
||||
expect(pr_pull.determine_bump_subject(cask, cask_checksum, cask_file)).to eq("food: checksum update")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula revision with reason" do
|
||||
expect(pr_pull.determine_bump_subject(
|
||||
formula, formula_revision, formula_file, reason: "for fun"
|
||||
)).to eq("foo: revision for fun")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula rebuild" do
|
||||
expect(pr_pull.determine_bump_subject(formula, formula_rebuild, formula_file)).to eq("foo: rebuild")
|
||||
end
|
||||
|
||||
it "correctly bumps a formula deletion" do
|
||||
expect(pr_pull.determine_bump_subject(formula, "", formula_file)).to eq("foo: delete")
|
||||
end
|
||||
|
||||
it "correctly bumps a cask deletion" do
|
||||
expect(pr_pull.determine_bump_subject(cask, "", cask_file)).to eq("food: delete")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user