summaryrefslogtreecommitdiff
path: root/lib/bundler/postit_trampoline.rb
blob: 7406612e5baa4db2e992bbd7a438b6ebe1e2f58c (plain)
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
# frozen_string_literal: true

postit_lib = File.expand_path("../vendor/postit/lib", __FILE__)
$:.unshift(postit_lib)
require "postit"
require "rubygems"

environment = BundlerVendoredPostIt::Environment.new([])
version = Gem::Requirement.new(environment.bundler_version)

installed_version =
  if defined?(Bundler::VERSION)
    Bundler::VERSION
  else
    File.read(File.expand_path("../version.rb", __FILE__)) =~ /VERSION = "(.+)"/
    $1
  end
installed_version &&= Gem::Version.new(installed_version)

if !version.satisfied_by?(installed_version)
  begin
    installer = BundlerVendoredPostIt::Installer.new(version)
    installer.install!
  rescue => e
    abort <<-EOS.strip
Installing the inferred bundler version (#{version}) failed.
If you'd like to update to the current bundler version (#{installed_version}) in this project, run `bundle update --bundler`.
The error was: #{e}
    EOS
  end

  Gem.loaded_specs.delete("bundler") unless defined?(Bundler)
  gem "bundler", version
  $:.delete(File.expand_path("../..", __FILE__))
else
  begin
    gem "bundler", version
  rescue LoadError
    $:.unshift(File.expand_path("../..", __FILE__))
  end
end

running_version = begin
  require "bundler/version"
  Bundler::VERSION
rescue LoadError, NameError
  nil
end

if !Gem::Version.correct?(running_version.to_s) || !version.satisfied_by?(Gem::Version.create(running_version))
  abort "The running bundler (#{running_version}) does not match the required `#{version}`"
end

$:.delete_at($:.find_index(postit_lib))