Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 183 lines (154 sloc) 4.776 kB
63b636b First pass at gemfile pack
Carlhuda authored
1 require 'fileutils'
ce350cc Get a simple bbl install working
Carlhuda authored
2 require 'pathname'
88741e6 First pass at bbl lock
Carlhuda authored
3 require 'yaml'
820bb93 Rename rubygems-ext to rubygems_ext
Carl Lerche authored
4 require 'bundler/rubygems_ext'
1da7eb3 Don't generate bundler.gemspec anymore
Carlhuda authored
5 require 'bundler/version'
ea9d8e1 @joshbuddy Add Bundler.with_clean_env for blocks of ruby without a bundled env
joshbuddy authored
6
152a50a Rename gemfile back to bundler
Carl Lerche authored
7 module Bundler
ea9d8e1 @joshbuddy Add Bundler.with_clean_env for blocks of ruby without a bundled env
joshbuddy authored
8 ORIGINAL_ENV = ENV.to_hash
67859e4 Moving in thor
Carlhuda authored
9
152a50a Rename gemfile back to bundler
Carl Lerche authored
10 autoload :Definition, 'bundler/definition'
11 autoload :Dependency, 'bundler/dependency'
12 autoload :Dsl, 'bundler/dsl'
13 autoload :Environment, 'bundler/environment'
14 autoload :Index, 'bundler/index'
15 autoload :Installer, 'bundler/installer'
16 autoload :RemoteSpecification, 'bundler/remote_specification'
17 autoload :Resolver, 'bundler/resolver'
c0f8641 Persist spec groups to the lockfile
Carl Lerche authored
18 autoload :Runtime, 'bundler/runtime'
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
19 autoload :Settings, 'bundler/settings'
f7bfdde Actually disable system gems in .bundle/environment.rb
Carlhuda authored
20 autoload :SharedHelpers, 'bundler/shared_helpers'
529d792 Use tsort to order specifications. It makes teh crazy work.
Carl Lerche authored
21 autoload :SpecSet, 'bundler/spec_set'
152a50a Rename gemfile back to bundler
Carl Lerche authored
22 autoload :Source, 'bundler/source'
0f97e4f @indirect Gems from git need their full_gem_path fixed, even when locked
indirect authored
23 autoload :Specification, 'bundler/shared_helpers'
434fb42 First pass at output
Carlhuda authored
24 autoload :UI, 'bundler/ui'
67859e4 Moving in thor
Carlhuda authored
25
de5054a Rescue all Bundler exceptions and exit with appropriate error code
Carlhuda authored
26 class BundlerError < StandardError
27 def self.status_code(code = nil)
28 return @code unless code
29 @code = code
30 end
31
32 def status_code
33 self.class.status_code
34 end
35 end
36
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
37 class GemfileNotFound < BundlerError; status_code(10) ; end
38 class GemNotFound < BundlerError; status_code(7) ; end
39 class VersionConflict < BundlerError; status_code(6) ; end
40 class GemfileError < BundlerError; status_code(4) ; end
ef6a00f @indirect Print better error during install when you need to relock
indirect authored
41 class GemfileChanged < GemfileError; status_code(4) ; end
248ca34 Raise a better error in the case that a git repo is not cloned yet.
Carl Lerche authored
42 class PathError < BundlerError; status_code(13) ; end
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
43 class GitError < BundlerError; status_code(11) ; end
44 class DeprecatedMethod < BundlerError; status_code(12) ; end
45 class DeprecatedOption < BundlerError; status_code(12) ; end
ffef5a1 @wycats If an option is invalid, don't fail silently
wycats authored
46 class InvalidOption < BundlerError; status_code(15) ; end
67859e4 Moving in thor
Carlhuda authored
47
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
48 class << self
78a6b48 Rename vendor/lock.yml to Gemfile.lock
Carl Lerche authored
49 attr_writer :ui, :bundle_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
50
51 def configure
52 @configured ||= begin
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
53 configure_gem_home_and_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
54 true
55 end
56 end
434fb42 First pass at output
Carlhuda authored
57
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
58 def ui
59 @ui ||= UI.new
60 end
434fb42 First pass at output
Carlhuda authored
61
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
62 def bundle_path
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
63 @bundle_path ||= begin
58b31d8 Namespace the default bundle path to support with the ruby engine and…
Carlhuda authored
64 path = settings[:path] || "#{Gem.user_home}/.bundle/#{Gem.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}"
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
65 Pathname.new(path).expand_path(root)
66 end
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
67 end
68
0753a24 @indirect Stop infinite recursion in locked bundles that include Bundler
indirect authored
69 def gem_setup(*groups)
2c8d6ae @indirect Don't call #setup after loading env.rb in Bundler.load
indirect authored
70 return @setup if @setup
71
1f84fd9 @indirect Pretty error from Bundle.setup when gems are missing
indirect authored
72 begin
73 if groups.empty?
74 # Load all groups, but only once
75 @setup = load.setup
76 else
77 # Figure out which groups haven't been loaded yet
78 unloaded = groups - (@completed_groups || [])
79 # Record groups that are now loaded
80 @completed_groups = groups | (@completed_groups || [])
81 # Load any groups that are not yet loaded
82 unloaded.any? ? load.setup(*unloaded) : load
83 end
84 rescue Bundler::GemNotFound => e
85 STDERR.puts e.message
86 STDERR.puts "Try running `bundle install`."
87 exit!
4980111 @indirect Fix Bundler.setup so it can be called more than once safely
indirect authored
88 end
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
89 end
0753a24 @indirect Stop infinite recursion in locked bundles that include Bundler
indirect authored
90 alias setup gem_setup unless Bundler.respond_to?(:setup)
ce350cc Get a simple bbl install working
Carlhuda authored
91
0753a24 @indirect Stop infinite recursion in locked bundles that include Bundler
indirect authored
92 def gem_require(*groups)
69acfd8 @indirect Call Bundler.setup from Bundler.require, only set up each group once
indirect authored
93 setup(*groups).require(*groups)
a8cbf77 @jeremy Group autorequire: pass :require => 'autorequire' option to gem depen…
jeremy authored
94 end
0753a24 @indirect Stop infinite recursion in locked bundles that include Bundler
indirect authored
95 alias require gem_require unless Bundler.respond_to?(:require)
a8cbf77 @jeremy Group autorequire: pass :require => 'autorequire' option to gem depen…
jeremy authored
96
4c9a157 @indirect Clean up bundler.rb a bit, fix spec
indirect authored
97 def load
4980111 @indirect Fix Bundler.setup so it can be called more than once safely
indirect authored
98 @load ||= begin
99 if current_env_file?
2c8d6ae @indirect Don't call #setup after loading env.rb in Bundler.load
indirect authored
100 @gem_loaded = true
4980111 @indirect Fix Bundler.setup so it can be called more than once safely
indirect authored
101 Kernel.require env_file
102 Bundler
103 else
104 runtime
105 end
76c6bb7 @indirect Bundler.setup now loads .bundle/environment.rb if it is current
indirect authored
106 end
107 end
108
109 def runtime
4980111 @indirect Fix Bundler.setup so it can be called more than once safely
indirect authored
110 @runtime ||= Runtime.new(root, definition)
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
111 end
67859e4 Moving in thor
Carlhuda authored
112
4c9a157 @indirect Clean up bundler.rb a bit, fix spec
indirect authored
113 def definition
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
114 configure
78a6b48 Rename vendor/lock.yml to Gemfile.lock
Carl Lerche authored
115 lockfile = root.join("Gemfile.lock")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
116 if lockfile.exist?
117 Definition.from_lock(lockfile)
118 else
4c9a157 @indirect Clean up bundler.rb a bit, fix spec
indirect authored
119 Definition.from_gemfile(default_gemfile)
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
120 end
88741e6 First pass at bbl lock
Carlhuda authored
121 end
f31835e More work towards awesomeness
Carlhuda authored
122
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
123 def home
4c9a157 @indirect Clean up bundler.rb a bit, fix spec
indirect authored
124 bundle_path.join("bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
125 end
f31835e More work towards awesomeness
Carlhuda authored
126
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
127 def install_path
128 home.join("gems")
129 end
0d2492d Add more stuff for git
Carl Lerche authored
130
b42ee71 @indirect Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
131 def specs_path
132 bundle_path.join("specifications")
133 end
134
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
135 def cache
b42ee71 @indirect Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
136 bundle_path.join("cache/bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
137 end
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
138
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
139 def root
140 default_gemfile.dirname
141 end
142
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
143 def settings
144 @settings ||= Settings.new(root)
145 end
146
76c6bb7 @indirect Bundler.setup now loads .bundle/environment.rb if it is current
indirect authored
147 def env_file
148 SharedHelpers.env_file
149 end
150
ea9d8e1 @joshbuddy Add Bundler.with_clean_env for blocks of ruby without a bundled env
joshbuddy authored
151 def with_clean_env
152 bundled_env = ENV.to_hash
153 ENV.replace(ORIGINAL_ENV)
154 yield
155 ensure
156 ENV.replace(bundled_env.to_hash)
157 end
158
fb1e725 Make bundler/setup something you can add to your .profile. To do this…
Carlhuda authored
159 def default_gemfile
160 SharedHelpers.default_gemfile
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
161 end
162
9ef6aa6 @indirect Disable rubygems more fully when unlocked
indirect authored
163 private
164
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
165 def configure_gem_home_and_path
3d82929 Separate bundle install foo and bundle install --disable-shared-gems.
Carl Lerche authored
166 if settings[:disable_shared_gems]
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
167 ENV['GEM_PATH'] = ''
9ef6aa6 @indirect Disable rubygems more fully when unlocked
indirect authored
168 ENV['GEM_HOME'] = File.expand_path(bundle_path, root)
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
169 else
7a7628c @indirect Don't duplicate gem paths
indirect authored
170 paths = [Gem.dir, Gem.path].flatten.compact.uniq.reject{|p| p.empty? }
55509f2 @indirect Ignore paths like GEM_HOME that are empty strings
indirect authored
171 ENV["GEM_PATH"] = paths.join(File::PATH_SEPARATOR)
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
172 ENV["GEM_HOME"] = bundle_path.to_s
173 end
174
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
175 Gem.clear_paths
176 end
76c6bb7 @indirect Bundler.setup now loads .bundle/environment.rb if it is current
indirect authored
177
178 def current_env_file?
179 env_file.exist? && (env_file.read(100) =~ /Bundler #{Bundler::VERSION}/)
180 end
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
181 end
a8cbf77 @jeremy Group autorequire: pass :require => 'autorequire' option to gem depen…
jeremy authored
182 end
Something went wrong with that request. Please try again.