diff options
| author | Alyssa Ross | 2017-08-11 22:40:08 +0100 | 
|---|---|---|
| committer | Alyssa Ross | 2017-08-11 22:40:08 +0100 | 
| commit | 4760f4e8032694d37f934257f6a58f0164438151 (patch) | |
| tree | 4895d4928a51830e29a7ca86dc2db38613690828 | |
| parent | d6d681ca01f8acf6b8d5e66cc1ca67310e9b8913 (diff) | |
| download | brew-4760f4e8032694d37f934257f6a58f0164438151.tar.bz2 | |
Raise an exception when double loading a formula
(As proposed in #2673)
| -rw-r--r-- | Library/Homebrew/formulary.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/test/formulary_spec.rb | 10 | 
2 files changed, 12 insertions, 0 deletions
| diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb index dd67b4f24..b26846e00 100644 --- a/Library/Homebrew/formulary.rb +++ b/Library/Homebrew/formulary.rb @@ -20,6 +20,8 @@ module Formulary        raise "Formula loading disabled by HOMEBREW_DISABLE_LOAD_FORMULA!"      end +    raise "Formula #{name} has already been loaded" if const_defined?(namespace) +      mod = Module.new      const_set(namespace, mod)      begin diff --git a/Library/Homebrew/test/formulary_spec.rb b/Library/Homebrew/test/formulary_spec.rb index 234ebc93c..7a7c8811a 100644 --- a/Library/Homebrew/test/formulary_spec.rb +++ b/Library/Homebrew/test/formulary_spec.rb @@ -27,6 +27,16 @@ describe Formulary do    let(:bottle_dir) { Pathname.new("#{TEST_FIXTURE_DIR}/bottles") }    let(:bottle) { bottle_dir/"testball_bottle-0.1.#{Utils::Bottles.tag}.bottle.tar.gz" } +  describe "::load_formula" do +    it "does not allow namespace repetition" do |example| +      definition = "Foo = Class.new(Formula)" +      namespace = "Test#{example.description.hash.abs}" +      subject.load_formula("foo", "bar", definition, namespace) +      expect { subject.load_formula("foo", "bar", definition, namespace) } +        .to raise_error RuntimeError, /already.* loaded/ +    end +  end +    describe "::class_s" do      it "replaces '+' with 'x'" do        expect(subject.class_s("foo++")).to eq("Fooxx") | 
