Sha256: 252a1b4e2ed208202dff80bc7970553bb252cdc664405602b1319ecda9dd4463

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

require 'fileutils'
require 'vendorificator/vendor'

module Vendorificator
  class Vendor::Git < Vendor
    arg_reader :repository, :revision, :tag, :branch
    attr_reader :conjured_revision

    def conjure!
      shell.say_status :clone, repository
      MiniGit.git :clone, repository, '.'
      local_git = MiniGit.new('.')

      if tag||revision
        local_git.checkout({:b => 'vendorified'}, tag||revision)
      elsif branch
        local_git.checkout({:b => 'vendorified'}, "origin/#{branch}")
      end

      super

      @conjured_revision = local_git.capturing.rev_parse('HEAD').strip
      add_git_metadata
      FileUtils::rm_rf '.git'
    end

    def upstream_version
      tag || conjured_revision
    end

    def conjure_commit_message
      rv = "Conjured git module #{name} "
      rv << "version #{version} " if version
      rv << "from tag #{tag} " if tag
      rv << "from branch #{branch} " if branch
      rv << "at revision #{conjured_revision}"
      rv
    end

    private

    def add_git_metadata
      @metadata[:git_revision] = conjured_revision
    end

    def parse_initialize_args(args = {})
      args[:version] ||= args[:tag] if args[:tag]
      if [:revision, :tag, :branch].select { |key| args.key?(key) }.count > 1
        raise ArgumentError, "You can provide only one of: :revision, :tag, :branch"
      end

      unless args.include?(:repository)
        args[:repository] = @name
        @name = @name.split('/').last.sub(/\.git$/, '')
      end
      super args
    end
  end

  class Config
    register_module :git, Vendor::Git
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vendorificator-0.5.git.v0.4.0.17.g26d50d8 lib/vendorificator/vendor/git.rb
vendorificator-0.4.0 lib/vendorificator/vendor/git.rb