require 'pathname' require 'tmpdir' require 'thor' require 'thor-scmversion/prerelease' require 'thor-scmversion/scm_version' require 'thor-scmversion/git_version' require 'thor-scmversion/p4_version' require 'thor-scmversion/shell_utils' require 'thor-scmversion/errors' module ThorSCMVersion class Tasks < Thor namespace "version" desc "bump TYPE [PRERELEASE_TYPE]", "Bump version number (type is major, minor, patch, prerelease or auto)" method_option :default, type: :string, aliases: "-d" def bump(type, prerelease_type = nil) current_version.bump! type, options.merge(prerelease_type: prerelease_type) begin say "Creating and pushing tags", :yellow current_version.tag say "Writing files: #{version_files.join(', ')}", :yellow write_version say "Tagged: #{current_version}", :green rescue => e say "Tagging #{current_version} failed due to error", :red say e.to_s, :red if e.respond_to? :status_code exit e.status_code else exit 1 end end end method_option :version_file_path, :type => :string, :default => nil, :desc => "An additional path to copy a VERSION file to on the file system." desc "current", "Show current SCM tagged version" def current write_version(options[:version_file_path]) say current_version.to_s end private def current_version @current_version ||= ThorSCMVersion.versioner.from_path end def write_version(version_file_path=nil) files_to_write = version_files files_to_write << File.join(File.expand_path(version_file_path), 'VERSION') if version_file_path current_version.write_version(files_to_write) end eval "def source_root ; Pathname.new File.dirname(__FILE__) ; end" def version_files [ source_root.join('VERSION') ] end end end