1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
require 'fileutils'
require 'pathname'
require 'yaml'
require 'bundler/rubygems'
module Bundler
VERSION = "0.9.3"
autoload :Definition, 'bundler/definition'
autoload :Dependency, 'bundler/dependency'
autoload :Dsl, 'bundler/dsl'
autoload :Environment, 'bundler/environment'
autoload :Index, 'bundler/index'
autoload :Installer, 'bundler/installer'
autoload :RemoteSpecification, 'bundler/remote_specification'
autoload :Resolver, 'bundler/resolver'
autoload :Runtime, 'bundler/runtime'
autoload :Settings, 'bundler/settings'
autoload :Source, 'bundler/source'
autoload :Specification, 'bundler/specification'
autoload :UI, 'bundler/ui'
class BundlerError < StandardError
def self.status_code(code = nil)
return @code unless code
@code = code
end
def status_code
self.class.status_code
end
end
class GemfileNotFound < BundlerError; status_code(10) ; end
class GemNotFound < BundlerError; status_code(7) ; end
class VersionConflict < BundlerError; status_code(6) ; end
class GemfileError < BundlerError; status_code(4) ; end
class GitError < BundlerError; status_code(11) ; end
class DeprecatedMethod < BundlerError; status_code(12) ; end
class DeprecatedOption < BundlerError; status_code(12) ; end
class << self
attr_writer :ui, :bundle_path
def configure
@configured ||= begin
configure_gem_home_and_path
true
end
end
def ui
@ui ||= UI.new
end
def bundle_path
@bundle_path ||= begin
path = settings[:path] || "#{Gem.user_home}/.bundle"
Pathname.new(path).expand_path(root)
end
end
def setup(*groups)
gemfile = default_gemfile
load(gemfile).setup(*groups)
end
def require(*groups)
gemfile = default_gemfile
load(gemfile).require(*groups)
end
def load(gemfile = default_gemfile)
root = Pathname.new(gemfile).dirname
Runtime.new root, definition(gemfile)
end
def definition(gemfile = default_gemfile)
configure
root = Pathname.new(gemfile).dirname
lockfile = root.join("Gemfile.lock")
if lockfile.exist?
Definition.from_lock(lockfile)
else
Definition.from_gemfile(gemfile)
end
end
def home
Pathname.new(bundle_path).join("bundler")
end
def install_path
home.join("gems")
end
def cache
home.join("cache")
end
def root
default_gemfile.dirname
end
def settings
@settings ||= Settings.new(root)
end
private
def default_gemfile
current = Pathname.new(Dir.pwd)
until current.root?
filename = current.join("Gemfile")
return filename if filename.exist?
current = current.parent
end
raise GemfileNotFound, "The default Gemfile was not found"
end
def configure_gem_home_and_path
if path = settings[:path]
ENV['GEM_HOME'] = File.expand_path(path, root)
ENV['GEM_PATH'] = ''
else
gem_home, gem_path = Gem.dir, Gem.path
ENV["GEM_PATH"] = [gem_home, gem_path].flatten.compact.join(File::PATH_SEPARATOR)
ENV["GEM_HOME"] = bundle_path.to_s
end
Gem.clear_paths
end
end
end
|