mirror of
https://github.com/hashicorp/vagrant.git
synced 2026-06-04 14:22:22 -04:00
Remove customized require behaviors and modify the bin executable to check for missing tools that Vagrant expects to exist when running outside of an installer.
55 lines
1.6 KiB
Ruby
55 lines
1.6 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require "fileutils"
|
|
|
|
module VagrantPlugins
|
|
module ProviderVirtualBox
|
|
module Action
|
|
# Cleans up the VirtualBox machine folder for any ".xml-prev"
|
|
# files which VirtualBox may have left over. This is a bug in
|
|
# VirtualBox. As soon as this is fixed, this middleware can and
|
|
# will be removed.
|
|
class CleanMachineFolder
|
|
def initialize(app, env)
|
|
@app = app
|
|
end
|
|
|
|
def call(env)
|
|
machine_folder = env[:machine].provider.driver.read_machine_folder
|
|
|
|
begin
|
|
clean_machine_folder(machine_folder)
|
|
rescue Errno::EPERM
|
|
raise Vagrant::Errors::MachineFolderNotAccessible,
|
|
name: env[:machine].name,
|
|
path: machine_folder
|
|
end
|
|
|
|
@app.call(env)
|
|
end
|
|
|
|
def clean_machine_folder(machine_folder)
|
|
folder = File.join(machine_folder, "*")
|
|
|
|
# Small safeguard against potentially unwanted rm-rf, since the default
|
|
# machine folder will typically always be greater than 10 characters long.
|
|
# For users with it < 10, out of luck?
|
|
return if folder.length < 10
|
|
|
|
Dir[folder].each do |f|
|
|
next unless File.directory?(f)
|
|
|
|
keep = Dir["#{f}/**/*"].find do |d|
|
|
# Find a file that doesn't have ".xml-prev" as the suffix,
|
|
# which signals that we want to keep this folder
|
|
File.file?(d) && !(File.basename(d) =~ /\.vbox-prev$/)
|
|
end
|
|
|
|
FileUtils.rm_rf(f) if !keep
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|