Sha256: 6b650f6c6feea4b9d486d6063ab97724c4b1dc3dc4dd759721feb5901882740f

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

require 'anvil/task'
require 'anvil/versioner'

class Gem::BumpTask < Anvil::Task
  description "Bumps a gem's version"

  parser do
    arguments %w[term]
  end

  attr_reader :term

  def initialize(term, options = {})
    @term = term
  end

  def task
    prepare_repo
    version = bump(read_version)
    write_version version

    version
  end

  protected

  def git
    @git ||= Git.open ENV['PWD']
  end

  def version_file(mode = 'r')
    File.open('VERSION', mode) do |f|
      yield f
    end
  end

  def read_version
    version_file { |f| f.read.strip }
  end

  def bump(old_version)
    new_version = Anvil::Versioner.new(old_version).bump! term
    logger.info "Bumped from #{old_version} to #{new_version}"

    new_version
  end

  def commit_and_tag(version)
    git.add 'VERSION'
    git.commit "Bump version v#{version}"
    git.add_tag "v#{version}"
    git.push
  end

  def write_version(version)
    version_file('w+') do |f|
      f.puts version
      f.close
    end

    commit_and_tag version
  end

  def prepare_repo
    fail Anvil::RepoNotClean unless clean?

    git.pull
  end

  def clean?
    git.status.changed.empty? &&
      git.status.deleted.empty? &&
      git.status.added.empty?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
anvil-core-0.0.1.pre.alpha.3 lib/tasks/gem/bump_task.rb