Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 252 lines (208 sloc) 6.858 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 Joshua Hull 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 Joshua Hull 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'
ee10cd9 Joshua Hull added GemHelper to autoload
joshbuddy authored
14 autoload :GemHelper, 'bundler/gem_helper'
f414889 Kevin Moore 'bundle viz'
kevmoo authored
15 autoload :Graph, 'bundler/graph'
152a50a Rename gemfile back to bundler
Carl Lerche authored
16 autoload :Index, 'bundler/index'
17 autoload :Installer, 'bundler/installer'
f779dee First pass at lockfile parser
Carlhuda authored
18 autoload :LazySpecification, 'bundler/lazy_specification'
ba579f4 Remove temporary flex stuff
Carlhuda authored
19 autoload :LockfileParser, 'bundler/lockfile_parser'
152a50a Rename gemfile back to bundler
Carl Lerche authored
20 autoload :RemoteSpecification, 'bundler/remote_specification'
21 autoload :Resolver, 'bundler/resolver'
c0f8641 Persist spec groups to the lockfile
Carl Lerche authored
22 autoload :Runtime, 'bundler/runtime'
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
23 autoload :Settings, 'bundler/settings'
f7bfdde Actually disable system gems in .bundle/environment.rb
Carlhuda authored
24 autoload :SharedHelpers, 'bundler/shared_helpers'
529d792 Use tsort to order specifications. It makes teh crazy work.
Carl Lerche authored
25 autoload :SpecSet, 'bundler/spec_set'
152a50a Rename gemfile back to bundler
Carl Lerche authored
26 autoload :Source, 'bundler/source'
0f97e4f André Arko Gems from git need their full_gem_path fixed, even when locked
indirect authored
27 autoload :Specification, 'bundler/shared_helpers'
434fb42 First pass at output
Carlhuda authored
28 autoload :UI, 'bundler/ui'
67859e4 Moving in thor
Carlhuda authored
29
de5054a Rescue all Bundler exceptions and exit with appropriate error code
Carlhuda authored
30 class BundlerError < StandardError
31 def self.status_code(code = nil)
0ae574c DslError should inherit from Bundler::Error so its exceptions are caught...
Carlhuda authored
32 define_method(:status_code) { code }
de5054a Rescue all Bundler exceptions and exit with appropriate error code
Carlhuda authored
33 end
34 end
35
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
36 class GemfileNotFound < BundlerError; status_code(10) ; end
37 class GemNotFound < BundlerError; status_code(7) ; end
38 class GemfileError < BundlerError; status_code(4) ; end
248ca34 Raise a better error in the case that a git repo is not cloned yet.
Carl Lerche authored
39 class PathError < BundlerError; status_code(13) ; end
5894862 Print useful warnings when deprecated options are used
Yehuda Katz authored
40 class GitError < BundlerError; status_code(11) ; end
6a82ed0 André Arko Add GemspecError so it can be raised
indirect authored
41 class GemspecError < BundlerError; status_code(14) ; end
d7e1dc1 Yehuda Katz Remove standalone #git in the DSL. Instead, use the block form of #git a...
wycats authored
42 class DeprecatedError < BundlerError; status_code(12) ; end
2a24019 André Arko Print a useful error if a gemspec require fails
indirect authored
43 class GemspecError < BundlerError; status_code(14) ; end
0ae574c DslError should inherit from Bundler::Error so its exceptions are caught...
Carlhuda authored
44 class DslError < BundlerError; status_code(15) ; end
cb3ec8e Update --production to yell if the user changed their Gemfile without up...
Carlhuda authored
45 class ProductionError < BundlerError; status_code(16) ; end
0ae574c DslError should inherit from Bundler::Error so its exceptions are caught...
Carlhuda authored
46 class InvalidOption < DslError ; end
67859e4 Moving in thor
Carlhuda authored
47
3edfddb Hacked together some crap that doesn't really work
Carl Lerche authored
48 class VersionConflict < BundlerError
49 attr_reader :conflicts
50
51 def initialize(conflicts, msg = nil)
52 super(msg)
53 @conflicts = conflicts
54 end
55
56 status_code(6)
57 end
58
cf736cf Use the Lockfile's specs as LazySpecifications instead of converting the...
Carl Lerche authored
59 # Internal errors, should be rescued
60 class InvalidSpecSet < StandardError; end
61
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
62 class << self
78a6b48 Rename vendor/lock.yml to Gemfile.lock
Carl Lerche authored
63 attr_writer :ui, :bundle_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
64
65 def configure
66 @configured ||= begin
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
67 configure_gem_home_and_path
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
68 true
69 end
70 end
434fb42 First pass at output
Carlhuda authored
71
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
72 def ui
73 @ui ||= UI.new
74 end
434fb42 First pass at output
Carlhuda authored
75
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
76 def bundle_path
5b2d02f Make bundle install [PATH] namespace its gems to specific rubies
Carlhuda authored
77 # STDERR.puts settings.path
78 @bundle_path ||= Pathname.new(settings.path).expand_path(root)
5ad1279 Add the ability to set bundle env settings in a .bundleconfig file
Carl Lerche authored
79 end
80
5f26a03 Have bundler generate executable stubs into ~/.bundler/bin that will aut...
Carl Lerche authored
81 def bin_path
82 @bin_path ||= begin
25ab2dc Make generating bin stubs an option
Carl Lerche authored
83 path = settings[:bin] || "bin"
84 path = Pathname.new(path).expand_path(root)
8286722 Santiago Pastorino Don't try to create dirs if they already exists
spastorino authored
85 FileUtils.mkdir_p(path) unless File.exist?(path)
5f26a03 Have bundler generate executable stubs into ~/.bundler/bin that will aut...
Carl Lerche authored
86 Pathname.new(path).expand_path
87 end
88 end
89
1674aef No need to alias setup and require in Bundler
Carl Lerche authored
90 def setup(*groups)
9cd1836 Sam Elliott avoid warning: instance variable @setup not initialized
lenary authored
91 return @setup if defined?(@setup) && @setup
2c8d6ae André Arko Don't call #setup after loading env.rb in Bundler.load
indirect authored
92
5dfc54c André Arko Don't call exit! if Bundler.setup has an exception
indirect authored
93 if groups.empty?
94 # Load all groups, but only once
95 @setup = load.setup
96 else
97 # Figure out which groups haven't been loaded yet
98 unloaded = groups - (@completed_groups || [])
99 # Record groups that are now loaded
100 @completed_groups = groups | (@completed_groups || [])
101 # Load any groups that are not yet loaded
102 unloaded.any? ? load.setup(*unloaded) : load
4980111 André Arko Fix Bundler.setup so it can be called more than once safely
indirect authored
103 end
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
104 end
ce350cc Get a simple bbl install working
Carlhuda authored
105
1674aef No need to alias setup and require in Bundler
Carl Lerche authored
106 def require(*groups)
69acfd8 André Arko Call Bundler.setup from Bundler.require, only set up each group once
indirect authored
107 setup(*groups).require(*groups)
a8cbf77 Jeremy Kemper Group autorequire: pass :require => 'autorequire' option to gem dependen...
jeremy authored
108 end
109
625818a André Arko Clean up bundler.rb a bit
indirect authored
110 def load
91c74f4 Bundle.load and Bundle.runtime are the same thing again.
Carl Lerche authored
111 @load ||= Runtime.new(root, definition)
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
112 end
67859e4 Moving in thor
Carlhuda authored
113
3687843 Kevin Moore check only needs Environment (not Runtime)
kevmoo authored
114 def environment
115 Bundler::Environment.new(root, definition)
116 end
117
8a4dc7a Remove a little bit of crazy from Definition
Carl Lerche authored
118 def definition(unlock = nil)
119 @definition = nil if unlock
2b9094e Scope specs in the lock file by source
Carl Lerche authored
120 @definition ||= begin
121 configure
e0e79df André Arko Upgrade 0.9 lockfiles to 1.0 lockfiles in-place
indirect authored
122 upgrade_lockfile
251b9c7 Use the Gemfile's name as a base for Gemfile.lock
Carl Lerche authored
123 Definition.build(default_gemfile, default_lockfile, unlock)
2b9094e Scope specs in the lock file by source
Carl Lerche authored
124 end
ab5b1fc Add Bundler.flexdef, move locking into Environment, and lock from flex_i...
Carlhuda authored
125 end
126
eda7324 Yehuda Katz Git should never use sudo
wycats authored
127 def ruby_scope
128 "#{Gem.ruby_engine}/#{Gem::ConfigMap[:ruby_version]}"
129 end
130
131 def user_bundle_path
132 Pathname.new(Gem.user_home).join(".bundler")
133 end
134
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
135 def home
625818a André Arko Clean up bundler.rb a bit
indirect authored
136 bundle_path.join("bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
137 end
f31835e More work towards awesomeness
Carlhuda authored
138
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
139 def install_path
140 home.join("gems")
141 end
0d2492d Add more stuff for git
Carl Lerche authored
142
0d92de7 André Arko Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
143 def specs_path
144 bundle_path.join("specifications")
145 end
146
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
147 def cache
0d92de7 André Arko Add Bundler::Source::BundlerGems, to distingush from SystemGems.
indirect authored
148 bundle_path.join("cache/bundler")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
149 end
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
150
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
151 def root
2d87c36 Move <root>/vendor/cache to a Bundler class method
Carl Lerche authored
152 default_gemfile.dirname.expand_path
153 end
154
27800e7 Provide an environment variable to allow customizing the location of <ap...
Carl Lerche authored
155 def app_config_path
156 ENV['BUNDLE_APP_CONFIG'] ?
157 Pathname.new(ENV['BUNDLE_APP_CONFIG']).expand_path(root) :
158 root.join('.bundle')
159 end
160
2d87c36 Move <root>/vendor/cache to a Bundler class method
Carl Lerche authored
161 def app_cache
162 root.join("vendor/cache")
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
163 end
164
32a2eb2 First pass at getting bundler to play well when $GEM_HOME is owned by ro...
Carl Lerche authored
165 def tmp
7432798 Joshua Hull use Process.pid in the tmp directory
joshbuddy authored
166 user_bundle_path.join("tmp", Process.pid.to_s)
32a2eb2 First pass at getting bundler to play well when $GEM_HOME is owned by ro...
Carl Lerche authored
167 end
168
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
169 def settings
27800e7 Provide an environment variable to allow customizing the location of <ap...
Carl Lerche authored
170 @settings ||= Settings.new(app_config_path)
ea08895 Add the ability to specify a location with bundle install
Carl Lerche authored
171 end
172
33154fd Joshua Hull Add Bundler.with_clean_env for blocks of ruby without a bundled env
joshbuddy authored
173 def with_clean_env
174 bundled_env = ENV.to_hash
175 ENV.replace(ORIGINAL_ENV)
176 yield
177 ensure
178 ENV.replace(bundled_env.to_hash)
179 end
180
fb1e725 Make bundler/setup something you can add to your .profile. To do this, a...
Carlhuda authored
181 def default_gemfile
182 SharedHelpers.default_gemfile
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
183 end
184
251b9c7 Use the Gemfile's name as a base for Gemfile.lock
Carl Lerche authored
185 def default_lockfile
186 SharedHelpers.default_lockfile
187 end
188
16259ea Yehuda Katz Improve sudo support
wycats authored
189 WINDOWS = Config::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw)!
190 NULL = WINDOWS ? "NUL" : "/dev/null"
191
32a2eb2 First pass at getting bundler to play well when $GEM_HOME is owned by ro...
Carl Lerche authored
192 def requires_sudo?
3f350e0 Add more sanity to the cases where bundler runs commands with sudo
Carlhuda authored
193 path = bundle_path
194 path = path.parent until path.exist?
52576d5 Santiago Pastorino requires_sudo if the path is not writable and sudo command exist
spastorino authored
195 sudo_present = !`which sudo 2>#{NULL}`.empty?
3f350e0 Add more sanity to the cases where bundler runs commands with sudo
Carlhuda authored
196
bfdea45 Fix the logic for determining whether or not to use sudo
Carl Lerche authored
197 settings.allow_sudo? && !File.writable?(path) && sudo_present
3f350e0 Add more sanity to the cases where bundler runs commands with sudo
Carlhuda authored
198 end
199
200 def mkdir_p(path)
201 if requires_sudo?
202 sudo "mkdir -p '#{path}'"
203 else
204 FileUtils.mkdir_p(path)
8286722 Santiago Pastorino Don't try to create dirs if they already exists
spastorino authored
205 end unless File.exist?(path)
3f350e0 Add more sanity to the cases where bundler runs commands with sudo
Carlhuda authored
206 end
207
208 def sudo(str)
c5f25d6 Remove sudo -E, which never actually worked for what we wanted, and does...
Carlhuda authored
209 `sudo -p 'Enter your password to install the bundled RubyGems to your system: ' #{str}`
32a2eb2 First pass at getting bundler to play well when $GEM_HOME is owned by ro...
Carl Lerche authored
210 end
211
9ef6aa6 André Arko Disable rubygems more fully when unlocked
indirect authored
212 private
213
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
214 def configure_gem_home_and_path
3d82929 Separate bundle install foo and bundle install --disable-shared-gems.
Carl Lerche authored
215 if settings[:disable_shared_gems]
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
216 ENV['GEM_PATH'] = ''
9ef6aa6 André Arko Disable rubygems more fully when unlocked
indirect authored
217 ENV['GEM_HOME'] = File.expand_path(bundle_path, root)
da1ba63 Don't set $GEM_HOME unless necessary
Carl Lerche authored
218 elsif Gem.dir != bundle_path.to_s
7a7628c André Arko Don't duplicate gem paths
indirect authored
219 paths = [Gem.dir, Gem.path].flatten.compact.uniq.reject{|p| p.empty? }
55509f2 André Arko Ignore paths like GEM_HOME that are empty strings
indirect authored
220 ENV["GEM_PATH"] = paths.join(File::PATH_SEPARATOR)
739c0f3 Install bundles to ~/.bundle by default
Carlhuda authored
221 ENV["GEM_HOME"] = bundle_path.to_s
222 end
223
bc310f7 First pass at being able to set the bundle install path.
Carl Lerche authored
224 Gem.clear_paths
225 end
e0e79df André Arko Upgrade 0.9 lockfiles to 1.0 lockfiles in-place
indirect authored
226
227 def upgrade_lockfile
251b9c7 Use the Gemfile's name as a base for Gemfile.lock
Carl Lerche authored
228 lockfile = default_lockfile
e0e79df André Arko Upgrade 0.9 lockfiles to 1.0 lockfiles in-place
indirect authored
229 if lockfile.exist? && lockfile.read(3) == "---"
91c3beb André Arko Back to deleting old lockfiles for the beta release
indirect authored
230 Bundler.ui.warn "Detected Gemfile.lock generated by 0.9, deleting..."
231 lockfile.rmtree
232 # lock = YAML.load_file(lockfile)
233 #
234 # source_uris = lock["sources"].map{|s| s["Rubygems"]["uri"] }
235 # sources = [Bundler::Source::Rubygems.new({"remotes" => source_uris})]
236 #
237 # deps = lock["dependencies"].map do |name, opts|
238 # version = opts.delete("version")
239 # Bundler::Dependency.new(name, version, opts)
240 # end
241 #
242 # definition = Bundler::Definition.new(nil, deps, sources, {})
243 #
244 # File.open(lockfile, 'w') do |f|
245 # f.write definition.to_lock
246 # end
e0e79df André Arko Upgrade 0.9 lockfiles to 1.0 lockfiles in-place
indirect authored
247 end
248 end
249
ee0e2c1 Start working on the environment.rb lock file
Carl Lerche authored
250 end
a8cbf77 Jeremy Kemper Group autorequire: pass :require => 'autorequire' option to gem dependen...
jeremy authored
251 end
Something went wrong with that request. Please try again.