From 6870de3f6db5f3671158efcc6c841d9093135e3a Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 24 Apr 2014 20:09:32 -0700 Subject: [PATCH] core: add Vagrant.latest_version --- lib/vagrant/shared_helpers.rb | 18 ++++++++++++++++++ plugins/commands/version/command.rb | 19 +++++-------------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/lib/vagrant/shared_helpers.rb b/lib/vagrant/shared_helpers.rb index 55d68f200..3fb42c6f6 100644 --- a/lib/vagrant/shared_helpers.rb +++ b/lib/vagrant/shared_helpers.rb @@ -1,4 +1,5 @@ require "pathname" +require "tempfile" module Vagrant # This is the default endpoint of the Vagrant Cloud in @@ -25,6 +26,23 @@ module Vagrant ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"] end + # Returns the latest version of Vagrant that is available. + # + # This makes an HTTP call. + # + # @return [String] + def self.latest_version + # Lazy-require this so that the overhead of this file is low + require "vagrant/util/downloader" + + tf = Tempfile.new("vagrant") + tf.close + url = "http://www.vagrantup.com/latest-version.json" + Vagrant::Util::Downloader.new(url, tf.path).download! + data = JSON.parse(File.read(tf.path)) + data["version"] + end + # This returns whether or not 3rd party plugins should be loaded. # # @return [Boolean] diff --git a/plugins/commands/version/command.rb b/plugins/commands/version/command.rb index 0be91d9fd..100082440 100644 --- a/plugins/commands/version/command.rb +++ b/plugins/commands/version/command.rb @@ -1,8 +1,5 @@ require "json" require "optparse" -require "tempfile" - -require "vagrant/util/downloader" module VagrantPlugins module CommandVersion @@ -25,24 +22,18 @@ module VagrantPlugins "vagrant.version_current", version: Vagrant::VERSION)) @env.ui.machine("version-installed", Vagrant::VERSION) - # Load the latest installed version to output that. - tf = Tempfile.new("vagrant") - tf.close - url = "http://www.vagrantup.com/latest-version.json" - Vagrant::Util::Downloader.new(url, tf.path).download! - - # Parse the JSON result - data = JSON.parse(File.read(tf.path)) + # Load the latest version + latest = Vagrant.latest_version # Output latest version @env.ui.output(I18n.t( - "vagrant.version_latest", version: data["version"])) - @env.ui.machine("version-latest", data["version"]) + "vagrant.version_latest", version: latest)) + @env.ui.machine("version-latest", latest) # Determine if its a new version, and if so, output some more # information. current = Gem::Version.new(Vagrant::VERSION) - latest = Gem::Version.new(data["version"]) + latest = Gem::Version.new(latest) if current >= latest @env.ui.success(" \n" + I18n.t( "vagrant.version_latest_installed"))