Sha256: de7c40bbbdaa6758ebec5e0c19d8142715f1b5172f95363136af92187ca92292

Contents?: true

Size: 1.56 KB

Versions: 7

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!
      say_status :default, :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

7 entries across 7 versions & 1 rubygems

Version Path
vendorificator-0.6.0 lib/vendorificator/vendor/git.rb
vendorificator-0.5.3 lib/vendorificator/vendor/git.rb
vendorificator-0.5.2 lib/vendorificator/vendor/git.rb
vendorificator-0.5.1 lib/vendorificator/vendor/git.rb
vendorificator-0.5.0 lib/vendorificator/vendor/git.rb
vendorificator-0.5.git.v0.4.0.63.g8e9d54d lib/vendorificator/vendor/git.rb
vendorificator-0.5.git.v0.4.0.60.g9c35209 lib/vendorificator/vendor/git.rb