From bf00e9c769e2f6f1482cb34d15d50a1c8c9f21eb Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Tue, 18 Aug 2009 17:42:54 -0700 Subject: Bundle the bundler runtime --- lib/bundler.rb | 2 +- lib/bundler/dependency.rb | 56 ----------------------------------- lib/bundler/manifest.rb | 13 ++++++++ lib/bundler/repository.rb | 2 +- lib/bundler/runtime.rb | 48 ++---------------------------- lib/bundler/runtime/dependency.rb | 56 +++++++++++++++++++++++++++++++++++ lib/bundler/runtime/dsl.rb | 44 +++++++++++++++++++++++++++ lib/bundler/templates/environment.erb | 6 ++-- 8 files changed, 120 insertions(+), 107 deletions(-) delete mode 100644 lib/bundler/dependency.rb create mode 100644 lib/bundler/runtime/dependency.rb create mode 100644 lib/bundler/runtime/dsl.rb diff --git a/lib/bundler.rb b/lib/bundler.rb index 8fdeb22696..f684cc914f 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -13,10 +13,10 @@ require "bundler/gem_ext" require "bundler/resolver" require "bundler/manifest_file" require "bundler/manifest" -require "bundler/dependency" require "bundler/dsl" require "bundler/cli" require "bundler/repository" +require "bundler/runtime/dependency" module Bundler VERSION = "0.5.0" diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb deleted file mode 100644 index 75d15a27fa..0000000000 --- a/lib/bundler/dependency.rb +++ /dev/null @@ -1,56 +0,0 @@ -module Bundler - class InvalidEnvironmentName < StandardError; end - - class Dependency - attr_reader :name, :version, :require_as, :only, :except - - def initialize(name, options = {}, &block) - options.each do |k, v| - options[k.to_s] = v - end - - @name = name - @version = options["version"] || ">= 0" - @require_as = Array(options["require_as"] || name) - @only = Array(options["only"]).map {|e| e.to_s } if options["only"] - @except = Array(options["except"]).map {|e| e.to_s } if options["except"] - @block = block - - if (@only && @only.include?("rubygems")) || (@except && @except.include?("rubygems")) - raise InvalidEnvironmentName, "'rubygems' is not a valid environment name" - end - end - - def in?(environment) - environment = environment.to_s - - return false unless !@only || @only.include?(environment) - return false if @except && @except.include?(environment) - true - end - - def to_s - to_gem_dependency.to_s - end - - def require(environment) - return unless in?(environment) - - @require_as.each do |file| - super(file) - end - - @block.call if @block - end - - def to_gem_dependency - @gem_dep ||= Gem::Dependency.new(name, version) - end - - def ==(o) - [name, version, require_as, only, except] == - [o.name, o.version, o.require_as, o.only, o.except] - end - - end -end diff --git a/lib/bundler/manifest.rb b/lib/bundler/manifest.rb index 22d3cacb4e..57dc90a95c 100644 --- a/lib/bundler/manifest.rb +++ b/lib/bundler/manifest.rb @@ -22,6 +22,7 @@ module Bundler # Cleanup incase fetch was a no-op repository.cleanup(gems) create_environment_file(repository.path) + create_bundler_runtime Bundler.logger.info "Done." end @@ -119,5 +120,17 @@ module Bundler end files end + + def create_bundler_runtime + here = Pathname.new(__FILE__).dirname + there = path.join("bundler") + + Bundler.logger.info "Creating the bundler runtime" + + FileUtils.rm_rf(there) + there.mkdir + FileUtils.cp(here.join("runtime.rb"), there) + FileUtils.cp_r(here.join("runtime"), there) + end end end diff --git a/lib/bundler/repository.rb b/lib/bundler/repository.rb index 8f4c562387..5882d09e13 100644 --- a/lib/bundler/repository.rb +++ b/lib/bundler/repository.rb @@ -20,7 +20,7 @@ module Bundler end def valid? - (Dir[@path.join("*")] - Dir[@path.join("{cache,doc,gems,environment.rb,specifications}")]).empty? + (Dir[@path.join("*")] - Dir[@path.join("{cache,doc,gems,bundler,environment.rb,specifications}")]).empty? end def download(spec) diff --git a/lib/bundler/runtime.rb b/lib/bundler/runtime.rb index 3af2f5cdf8..27e0254966 100644 --- a/lib/bundler/runtime.rb +++ b/lib/bundler/runtime.rb @@ -1,46 +1,2 @@ -require "bundler/dependency" - -module Bundler - class ManifestFileNotFound < StandardError; end - - def self.require(environment = nil) - ManifestBuilder.run(@gemfile, environment || :default) - end - - class ManifestBuilder - def self.run(gemfile, environment) - unless File.exist?(gemfile) - raise ManifestFileNotFound, "#{gemfile.inspect} does not exist" - end - - builder = new(environment) - builder.instance_eval(File.read(gemfile)) - builder - end - - def initialize(environment) - @environment = environment - end - - def bundle_path(*) ; end - - def bin_path(*) ; end - - def disable_rubygems(*) ; end - - def disable_system_gems(*) ; end - - def source(*) ; end - - def clear_sources(*) ; end - - def gem(name, *args, &blk) - options = args.last.is_a?(Hash) ? args.pop : {} - version = args.last - - dep = Dependency.new(name, options.merge(:version => version), &blk) - dep.require(@environment) - dep - end - end -end \ No newline at end of file +require File.join(File.dirname(__FILE__), "runtime", "dsl") +require File.join(File.dirname(__FILE__), "runtime", "dependency") \ No newline at end of file diff --git a/lib/bundler/runtime/dependency.rb b/lib/bundler/runtime/dependency.rb new file mode 100644 index 0000000000..75d15a27fa --- /dev/null +++ b/lib/bundler/runtime/dependency.rb @@ -0,0 +1,56 @@ +module Bundler + class InvalidEnvironmentName < StandardError; end + + class Dependency + attr_reader :name, :version, :require_as, :only, :except + + def initialize(name, options = {}, &block) + options.each do |k, v| + options[k.to_s] = v + end + + @name = name + @version = options["version"] || ">= 0" + @require_as = Array(options["require_as"] || name) + @only = Array(options["only"]).map {|e| e.to_s } if options["only"] + @except = Array(options["except"]).map {|e| e.to_s } if options["except"] + @block = block + + if (@only && @only.include?("rubygems")) || (@except && @except.include?("rubygems")) + raise InvalidEnvironmentName, "'rubygems' is not a valid environment name" + end + end + + def in?(environment) + environment = environment.to_s + + return false unless !@only || @only.include?(environment) + return false if @except && @except.include?(environment) + true + end + + def to_s + to_gem_dependency.to_s + end + + def require(environment) + return unless in?(environment) + + @require_as.each do |file| + super(file) + end + + @block.call if @block + end + + def to_gem_dependency + @gem_dep ||= Gem::Dependency.new(name, version) + end + + def ==(o) + [name, version, require_as, only, except] == + [o.name, o.version, o.require_as, o.only, o.except] + end + + end +end diff --git a/lib/bundler/runtime/dsl.rb b/lib/bundler/runtime/dsl.rb new file mode 100644 index 0000000000..436867b4db --- /dev/null +++ b/lib/bundler/runtime/dsl.rb @@ -0,0 +1,44 @@ +module Bundler + class ManifestFileNotFound < StandardError; end + + def self.require(environment = nil) + ManifestBuilder.run(@gemfile, environment || :default) + end + + class ManifestBuilder + def self.run(gemfile, environment) + unless File.exist?(gemfile) + raise ManifestFileNotFound, "#{gemfile.inspect} does not exist" + end + + builder = new(environment) + builder.instance_eval(File.read(gemfile)) + builder + end + + def initialize(environment) + @environment = environment + end + + def bundle_path(*) ; end + + def bin_path(*) ; end + + def disable_rubygems(*) ; end + + def disable_system_gems(*) ; end + + def source(*) ; end + + def clear_sources(*) ; end + + def gem(name, *args, &blk) + options = args.last.is_a?(Hash) ? args.pop : {} + version = args.last + + dep = Dependency.new(name, options.merge(:version => version), &blk) + dep.require(@environment) + dep + end + end +end \ No newline at end of file diff --git a/lib/bundler/templates/environment.erb b/lib/bundler/templates/environment.erb index 2c538e9273..8d474157b8 100644 --- a/lib/bundler/templates/environment.erb +++ b/lib/bundler/templates/environment.erb @@ -36,6 +36,8 @@ module Bundler add_specs_to_loaded_specs add_specs_to_index <% end -%> + + require File.join(dir, "bundler", "runtime") end <% if @rubygems -%> @@ -79,6 +81,4 @@ module Gem class VerificationError < Exception; end class SystemExitException < SystemExit; end end -<% end -%> - -require "bundler/runtime" \ No newline at end of file +<% end -%> \ No newline at end of file -- cgit v1.2.1