Sha256: 183d09217adcce8abc4e13f2b31825a566ad123b477cfd02992232e08ba04f14

Contents?: true

Size: 1.84 KB

Versions: 8

Compression:

Stored size: 1.84 KB

Contents

require 'cerberus/utils'
require 'cerberus/scm/base'

class Cerberus::SCM::Mercurial < Cerberus::SCM::Base
  
  def installed?
    exec_successful? "#{@config[:bin_path]}hg --version"
  end

  def update!
    @new =false
    if test( ?d, File.join( @path,'.hg' ) )
      r = get_localrev
      get_updates
      r_new = get_localrev
      @has_changes = r_new !=r
    else
      FileUtils.rm_rf(@path) if test(?d, @path)
      encoded_url = (@config[:scm, :url].include?(' ') ? "\"#{@config[:scm, :url]}\"" : @config[:scm, :url])
      @new = true
      @has_changes = true
      @status = execute("clone", "#{encoded_url} #{@path}", false)
      if branch = @config[:scm, :branch]
        execute('update', "-C #{branch}")
      end
    end
    extract_commit_info if @has_changes
  end

  def has_changes?
    @has_changes
  end


  def new?
    @new
  end

  def current_revision
    @revision
  end

  def last_commit_message
    @message
  end

  def last_author
    @author
  end

  def output
    @status
  end

  private
  def get_localrev
    execute("id", '-i').strip
  end
  
  def get_updates
    execute("pull", '-u')
  end

  def remote_head
    branch = @config[:scm, :branch]  || 'default'
  end

  def execute(command, parameters = nil, with_path = true)
   if with_path
     cmd = "cd #{@config[:application_root]} && #{@config[:bin_path]}hg #{command} #{parameters}"
   else
     cmd = "#{@config[:bin_path]}hg #{command} #{parameters}"
   end
   `#{cmd}`
  end

  def extract_commit_info( branch='default' )
    message =  execute("log", "-b #{ branch } -r tip --template '{author}|{date|shortdate}|{node}|{desc}'").split("|")
    m= { :author => message.shift, :date => message.shift, :revision => message.shift, :message => message.shift }
    @message = m[:message]
    @author = m[:author]
    @date = m[:date]
    @revision = m[:revision]
    m
  end

end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
cerberus-0.8.0 lib/cerberus/scm/hg.rb
cerberus-0.7.9 lib/cerberus/scm/hg.rb
edavis10-cerberus-0.7.8 lib/cerberus/scm/hg.rb
cerberus-0.7.8 lib/cerberus/scm/hg.rb
cerberus-0.7.7 lib/cerberus/scm/hg.rb
cerberus-0.7.6 lib/cerberus/scm/hg.rb
cerberus-0.7.2 lib/cerberus/scm/hg.rb
cerberus-0.7.5 lib/cerberus/scm/hg.rb