From 35e32f352d84c53fb93d4e9a9227d757ec1d5508 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Sun, 19 Aug 2012 00:33:35 -0500 Subject: factory: don't reload previously defined formulae build.rb calls Formula.factory to get a usable Formula object to pass to its install method. However, because the formula file is the actual executing script, its class is already defined, and loading it again causes the class to be re-evaluated, which, unfortunately, is not idempotent. This bug has existed for a very long time, and its side effects include duplicate entries the deps array and mirrors array, among others. Fortunately, the fix is very simple. Signed-off-by: Jack Nagel --- Library/Homebrew/formula.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'Library/Homebrew') diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 57e5f76de..773b6d746 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -377,20 +377,22 @@ class Formula else name = Formula.canonical_name(name) # If name was a path or mapped to a cached formula - if name.include? "/" - require name + if name.include? "/" # require allows filenames to drop the .rb extension, but everything else # in our codebase will require an exact and fullpath. name = "#{name}.rb" unless name =~ /\.rb$/ path = Pathname.new(name) name = path.stem + + require path unless Object.const_defined? self.class_s(name) + install_type = :from_path target_file = path.to_s else # For names, map to the path and then require - require Formula.path(name) + require Formula.path(name) unless Object.const_defined? self.class_s(name) install_type = :from_name end end -- cgit v1.2.3