Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 174 lines (145 sloc) 4.611 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'
33154fd @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
33154fd @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'
f414889 @kevmoo 'bundle viz'
kevmoo authored
14 autoload :Graph, 'bundler/graph'
152a50a Rename gemfile back to bundler
Carl Lerche authored
15 autoload :Index, 'bundler/index'
16 autoload :Installer, 'bundler/installer'
f779dee First pass at lockfile parser
Carlhuda authored
17 autoload :LazySpecification, 'bundler/lazy_specification'
ba579f4 Remove temporary flex stuff
Carlhuda authored
18 autoload :LockfileParser, 'bundler/lockfile_parser'
152a50a Rename gemfile back to bundler
Carl Lerche authored
19 autoload :RemoteSpecification, 'bundler/remote_specification'
20 autoload :Resolver, 'bundler/resolver'
c0f8641 Persist spec groups to the lockfile
Carl Lerche authored
21 autoload :Runtime, 'bundler/runtime'
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
22 autoload :Settings, 'bundler/settings'
f7bfdde Actually disable system gems in .bundle/environment.rb
Carlhuda authored
23 autoload :SharedHelpers, 'bundler/shared_helpers'
529d792 Use tsort to order specifications. It makes teh crazy work.
Carl Lerche authored
24 autoload :SpecSet, 'bundler/spec_set'
152a50a Rename gemfile back to bundler
Carl Lerche authored
25 autoload :Source, 'bundler/source'
0f97e4f @indirect Gems from git need their full_gem_path fixed, even when locked
indirect authored
26 autoload :Specification, 'bundler/shared_helpers'
434fb42 First pass at output
Carlhuda authored
27 autoload :UI, 'bundler/ui'
67859e4 Moving in thor
Carlhuda authored
28
de5054a Rescue all Bundler exceptions and exit with appropriate error code
Carlhuda authored
29 class BundlerError < StandardError
30 def self.status_code(code = nil)
31 return @code unless code
32 @code = code
33 end
34
35 def status_code
36 self.class.status_code
37 end
38 end
39
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
40 class GemfileNotFound < BundlerError; status_code(10) ; end
41 class GemNotFound < BundlerError; status_code(7) ; end
42 class VersionConflict < BundlerError; status_code(6) ; end
43 class GemfileError < BundlerError; status_code(4) ; end
ef6a00f @indirect Print better error during install when you need to relock
indirect authored
44 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
45 class PathError < BundlerError; status_code(13) ; end
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
46 class GitError < BundlerError; status_code(11) ; end
6a82ed0 @indirect Add GemspecError so it can be raised
indirect authored
47 class GemspecError < BundlerError; status_code(14) ; end
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
48 class DeprecatedMethod < BundlerError; status_code(12) ; end
49 class DeprecatedOption < BundlerError; status_code(12) ; end
2a24019 @indirect Print a useful error if a gemspec require fails
indirect authored
50 class GemspecError < BundlerError; status_code(14) ; end
7514b20 @wycats If an option is invalid, don't fail silently
wycats authored
51 class InvalidOption < BundlerError; status_code(15) ; end
67859e4 Moving in thor
Carlhuda authored
52
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
53 class << self
78a6b48 Rename vendor/lock.yml to Gemfile.lock
Carl Lerche authored
54 attr_writer :ui, :bundle_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
55
56 def configure
57 @configured ||= begin
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
58 configure_gem_home_and_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
59 true
60 end
61 end
434fb42 First pass at output
Carlhuda authored
62
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
63 def ui
64 @ui ||= UI.new
65 end
434fb42 First pass at output
Carlhuda authored
66
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
67 def bundle_path
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
68 @bundle_path ||= begin
8f2099b Have bundler install to $GEM_HOME by default instead of ~/.bundle. Th…
Carlhuda authored
69 path = settings[:path] || Gem.dir
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
70 Pathname.new(path).expand_path(root)
71 end
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
72 end
73
5f26a03 Have bundler generate executable stubs into ~/.bundler/bin that will …
Carl Lerche authored
74 def bin_path
75 @bin_path ||= begin
76 path = settings[:bin] || "#{Gem.user_home}/.bundler/bin"
77 FileUtils.mkdir_p(path)
78 Pathname.new(path).expand_path
79 end
80 end
81
1674aef No need to alias setup and require in Bundler
Carl Lerche authored
82 def setup(*groups)
2c8d6ae @indirect Don't call #setup after loading env.rb in Bundler.load
indirect authored
83 return @setup if @setup
84
5dfc54c @indirect Don't call exit! if Bundler.setup has an exception
indirect authored
85 if groups.empty?
86 # Load all groups, but only once
87 @setup = load.setup
88 else
89 # Figure out which groups haven't been loaded yet
90 unloaded = groups - (@completed_groups || [])
91 # Record groups that are now loaded
92 @completed_groups = groups | (@completed_groups || [])
93 # Load any groups that are not yet loaded
94 unloaded.any? ? load.setup(*unloaded) : load
4980111 @indirect Fix Bundler.setup so it can be called more than once safely
indirect authored
95 end
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
96 end
ce350cc Get a simple bbl install working
Carlhuda authored
97
1674aef No need to alias setup and require in Bundler
Carl Lerche authored
98 def require(*groups)
69acfd8 @indirect Call Bundler.setup from Bundler.require, only set up each group once
indirect authored
99 setup(*groups).require(*groups)
a8cbf77 @jeremy Group autorequire: pass :require => 'autorequire' option to gem depen…
jeremy authored
100 end
101
625818a @indirect Clean up bundler.rb a bit
indirect authored
102 def load
91c74f4 Bundle.load and Bundle.runtime are the same thing again.
Carl Lerche authored
103 @load ||= Runtime.new(root, definition)
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
104 end
67859e4 Moving in thor
Carlhuda authored
105
3687843 @kevmoo check only needs Environment (not Runtime)
kevmoo authored
106 def environment
107 Bundler::Environment.new(root, definition)
108 end
109
625818a @indirect Clean up bundler.rb a bit
indirect authored
110 def definition
2b9094e Scope specs in the lock file by source
Carl Lerche authored
111 @definition ||= begin
112 configure
113 lockfile = root.join("Gemfile.lock")
114 Definition.build(default_gemfile, lockfile)
115 end
ab5b1fc Add Bundler.flexdef, move locking into Environment, and lock from fle…
Carlhuda authored
116 end
117
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
118 def home
625818a @indirect Clean up bundler.rb a bit
indirect authored
119 bundle_path.join("bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
120 end
f31835e More work towards awesomeness
Carlhuda authored
121
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
122 def install_path
123 home.join("gems")
124 end
0d2492d Add more stuff for git
Carl Lerche authored
125
0d92de7 @indirect Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
126 def specs_path
127 bundle_path.join("specifications")
128 end
129
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
130 def cache
0d92de7 @indirect Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
131 bundle_path.join("cache/bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
132 end
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
133
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
134 def root
2d87c36 Move <root>/vendor/cache to a Bundler class method
Carl Lerche authored
135 default_gemfile.dirname.expand_path
136 end
137
138 def app_cache
139 root.join("vendor/cache")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
140 end
141
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
142 def settings
143 @settings ||= Settings.new(root)
144 end
145
33154fd @joshbuddy Add Bundler.with_clean_env for blocks of ruby without a bundled env
joshbuddy authored
146 def with_clean_env
147 bundled_env = ENV.to_hash
148 ENV.replace(ORIGINAL_ENV)
149 yield
150 ensure
151 ENV.replace(bundled_env.to_hash)
152 end
153
fb1e725 Make bundler/setup something you can add to your .profile. To do this…
Carlhuda authored
154 def default_gemfile
155 SharedHelpers.default_gemfile
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
156 end
157
9ef6aa6 @indirect Disable rubygems more fully when unlocked
indirect authored
158 private
159
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
160 def configure_gem_home_and_path
3d82929 Separate bundle install foo and bundle install --disable-shared-gems.
Carl Lerche authored
161 if settings[:disable_shared_gems]
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
162 ENV['GEM_PATH'] = ''
9ef6aa6 @indirect Disable rubygems more fully when unlocked
indirect authored
163 ENV['GEM_HOME'] = File.expand_path(bundle_path, root)
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
164 else
7a7628c @indirect Don't duplicate gem paths
indirect authored
165 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
166 ENV["GEM_PATH"] = paths.join(File::PATH_SEPARATOR)
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
167 ENV["GEM_HOME"] = bundle_path.to_s
168 end
169
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
170 Gem.clear_paths
171 end
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
172 end
a8cbf77 @jeremy Group autorequire: pass :require => 'autorequire' option to gem depen…
jeremy authored
173 end
Something went wrong with that request. Please try again.