commands/box: Introduce a StateFile for keeping track of downloaded boxes
This commit is contained in:
parent
670a441a99
commit
17fd5f9e4e
|
@ -40,6 +40,7 @@ module VagrantPlugins
|
||||||
:box_url => argv[1],
|
:box_url => argv[1],
|
||||||
:box_force => options[:force],
|
:box_force => options[:force],
|
||||||
:box_download_insecure => options[:insecure],
|
:box_download_insecure => options[:insecure],
|
||||||
|
:box_state_file => StateFile.new(@env.home_path.join('boxes.json'))
|
||||||
})
|
})
|
||||||
|
|
||||||
# Success, exit status 0
|
# Success, exit status 0
|
||||||
|
|
|
@ -11,5 +11,7 @@ module VagrantPlugins
|
||||||
Command::Root
|
Command::Root
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
autoload :StateFile, File.expand_path("../state_file", __FILE__)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
require "json"
|
||||||
|
|
||||||
|
module VagrantPlugins
|
||||||
|
module CommandBox
|
||||||
|
# This is a helper to deal with the boxes state file that Vagrant
|
||||||
|
# uses to track the boxes that have been downloaded.
|
||||||
|
class StateFile
|
||||||
|
def initialize(path)
|
||||||
|
@path = path
|
||||||
|
|
||||||
|
@data = {}
|
||||||
|
@data = JSON.parse(@path.read) if @path.exist?
|
||||||
|
@data["boxes"] ||= {}
|
||||||
|
end
|
||||||
|
|
||||||
|
# Add a downloaded box to the state file.
|
||||||
|
#
|
||||||
|
# @param [Box] box The Box object that was added
|
||||||
|
# @param [String] url The URL from where the box was downloaded
|
||||||
|
def add_box(box, url)
|
||||||
|
box_key = "#{box.name}-#{box.provider}"
|
||||||
|
|
||||||
|
@data["boxes"][box_key] = {
|
||||||
|
"url" => url,
|
||||||
|
"downloaded_at" => Time.now.utc.to_s
|
||||||
|
}
|
||||||
|
|
||||||
|
save!
|
||||||
|
end
|
||||||
|
|
||||||
|
# This saves the state back into the state file.
|
||||||
|
def save!
|
||||||
|
@path.open("w+") do |f|
|
||||||
|
f.write(JSON.dump(@data))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue