lib/vagrant-libvirt/version.rb in vagrant-libvirt-0.3.0 vs lib/vagrant-libvirt/version.rb in vagrant-libvirt-0.4.0

- old
+ new

@@ -1,28 +1,76 @@ +require 'open3' +require 'tmpdir' + module VagrantPlugins module ProviderLibvirt VERSION_FILE = File.dirname(__FILE__) + "/version" + GIT_ARCHIVE_VERSION = "$Format:%H %D$" + + HOMEPAGE = 'https://github.com/vagrant-libvirt/vagrant-libvirt' + def self.get_version if File.exist?(VERSION_FILE) + # built gem version = File.read(VERSION_FILE) - else + elsif self.inside_git_repository + # local repo git_version = `git describe --tags` - version_parts = git_version.split('-').first(2) # drop the git sha if it exists - if version_parts.length > 1 - # increment the patch number so that this is marked as a pre-release of the - # next possible release - main_version_parts = Gem::Version.new(version_parts[0]).segments - main_version_parts[-1] = main_version_parts.last + 1 - version_parts = main_version_parts + ["pre", version_parts[1]] + version = self.version_from_describe(git_version) + elsif !GIT_ARCHIVE_VERSION.start_with?('$Format') + # archive - format string replaced during export + hash, refs = GIT_ARCHIVE_VERSION.split(' ', 2) + + tag = refs.split(',').select { |ref| ref.strip.start_with?("tag:") }.first + if tag != nil + # tagged + version = tag.strip.split(' ').last + else + version = "" + # arbitrary branch/commit + Dir.mktmpdir do |dir| + stdout_and_stderr, status = Open3.capture2e("git -C #{dir} clone --bare #{HOMEPAGE}") + raise "failed to clone original to resolve version: #{stdout_and_stderr}" unless status.success? + + stdout_and_stderr, status = Open3.capture2e("git --git-dir=#{dir}/vagrant-libvirt.git describe --tags #{hash}") + raise "failed to determine version for #{hash}: #{stdout_and_stderr}" unless status.success? + + version = version_from_describe(stdout_and_stderr) + end + + # in this case write the version file to avoid cloning a second time + File.write(VERSION_FILE, version) end - version = version_parts.join(".") + else + # no idea + version = "9999" end return version.freeze end def self.write_version File.write(VERSION_FILE, self.get_version) + end + + private + + def self.inside_git_repository + _, status = Open3.capture2e("git rev-parse --git-dir") + + status.success? + end + + def self.version_from_describe(describe) + version_parts = describe.split('-').first(2) # drop the git sha if it exists + if version_parts.length > 1 + # increment the patch number so that this is marked as a pre-release of the + # next possible release + main_version_parts = Gem::Version.new(version_parts[0]).segments + main_version_parts[-1] = main_version_parts.last + 1 + version_parts = main_version_parts + ["pre", version_parts[1]] + end + version = version_parts.join(".") end end end