diff options
Diffstat (limited to 'bin/bundle')
-rwxr-xr-x | bin/bundle | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/bin/bundle b/bin/bundle new file mode 100755 index 0000000..50da5fd --- /dev/null +++ b/bin/bundle | |||
@@ -0,0 +1,109 @@ | |||
1 | #!/usr/bin/env ruby | ||
2 | # frozen_string_literal: true | ||
3 | |||
4 | # | ||
5 | # This file was generated by Bundler. | ||
6 | # | ||
7 | # The application 'bundle' is installed as part of a gem, and | ||
8 | # this file is here to facilitate running it. | ||
9 | # | ||
10 | |||
11 | require "rubygems" | ||
12 | |||
13 | m = Module.new do | ||
14 | module_function | ||
15 | |||
16 | def invoked_as_script? | ||
17 | File.expand_path($0) == File.expand_path(__FILE__) | ||
18 | end | ||
19 | |||
20 | def env_var_version | ||
21 | ENV["BUNDLER_VERSION"] | ||
22 | end | ||
23 | |||
24 | def cli_arg_version | ||
25 | return unless invoked_as_script? # don't want to hijack other binstubs | ||
26 | return unless "update".start_with?(ARGV.first || " ") # must be running `bundle update` | ||
27 | bundler_version = nil | ||
28 | update_index = nil | ||
29 | ARGV.each_with_index do |a, i| | ||
30 | if update_index && update_index.succ == i && a.match?(Gem::Version::ANCHORED_VERSION_PATTERN) | ||
31 | bundler_version = a | ||
32 | end | ||
33 | next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/ | ||
34 | bundler_version = $1 | ||
35 | update_index = i | ||
36 | end | ||
37 | bundler_version | ||
38 | end | ||
39 | |||
40 | def gemfile | ||
41 | gemfile = ENV["BUNDLE_GEMFILE"] | ||
42 | return gemfile if gemfile && !gemfile.empty? | ||
43 | |||
44 | File.expand_path("../Gemfile", __dir__) | ||
45 | end | ||
46 | |||
47 | def lockfile | ||
48 | lockfile = | ||
49 | case File.basename(gemfile) | ||
50 | when "gems.rb" then gemfile.sub(/\.rb$/, ".locked") | ||
51 | else "#{gemfile}.lock" | ||
52 | end | ||
53 | File.expand_path(lockfile) | ||
54 | end | ||
55 | |||
56 | def lockfile_version | ||
57 | return unless File.file?(lockfile) | ||
58 | lockfile_contents = File.read(lockfile) | ||
59 | return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/ | ||
60 | Regexp.last_match(1) | ||
61 | end | ||
62 | |||
63 | def bundler_requirement | ||
64 | @bundler_requirement ||= | ||
65 | env_var_version || | ||
66 | cli_arg_version || | ||
67 | bundler_requirement_for(lockfile_version) | ||
68 | end | ||
69 | |||
70 | def bundler_requirement_for(version) | ||
71 | return "#{Gem::Requirement.default}.a" unless version | ||
72 | |||
73 | bundler_gem_version = Gem::Version.new(version) | ||
74 | |||
75 | bundler_gem_version.approximate_recommendation | ||
76 | end | ||
77 | |||
78 | def load_bundler! | ||
79 | ENV["BUNDLE_GEMFILE"] ||= gemfile | ||
80 | |||
81 | activate_bundler | ||
82 | end | ||
83 | |||
84 | def activate_bundler | ||
85 | gem_error = activation_error_handling do | ||
86 | gem "bundler", bundler_requirement | ||
87 | end | ||
88 | return if gem_error.nil? | ||
89 | require_error = activation_error_handling do | ||
90 | require "bundler/version" | ||
91 | end | ||
92 | return if require_error.nil? && Gem::Requirement.new(bundler_requirement).satisfied_by?(Gem::Version.new(Bundler::VERSION)) | ||
93 | warn "Activating bundler (#{bundler_requirement}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_requirement}'`" | ||
94 | exit 42 | ||
95 | end | ||
96 | |||
97 | def activation_error_handling | ||
98 | yield | ||
99 | nil | ||
100 | rescue StandardError, LoadError => e | ||
101 | e | ||
102 | end | ||
103 | end | ||
104 | |||
105 | m.load_bundler! | ||
106 | |||
107 | if m.invoked_as_script? | ||
108 | load Gem.bin_path("bundler", "bundle") | ||
109 | end | ||