Sha256: 32e58ccf15ad34d204fcd4307bdf9b5af026808f59f912eb45780f4913132680

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

module Repomen
  # The Retriever retrieved repos and discards at will.
  #
  #   url = "git@bitbucket.org:atlassian_tutorial/helloworld.git"
  #   Retriever.new(url)
  #
  # When called with a block, the repo is automatically deleted afterwards
  #
  #   Retriever.new(url) do |local_path|
  #     # repo is cloned in +local_path+
  #   end
  #   # repo is gone
  #
  class Retriever
    include WithDefaultConfig

    attr_reader :url
    attr_reader :path
    attr_reader :service

    def initialize(url, config = default_config, &block)
      @url = url
      @service = Repo::Service.for(url)
      @handler = @service.handler_class.new(url, repo_dir(service), config)
      @retrieved = @handler.retrieve
      @path = @handler.path
      if block
        block.call(@path)
        discard_repo
      end
    end

    def branch_name
      @handler.branch_name
    end

    # Changes the branch of the retrieved repo.
    # @param name [String] name of the branch
    def change_branch(name, update_branch = false)
      @handler.change_branch(name, update_branch)
      true
    rescue Repomen::HandlerError
      false
    end
    alias :checkout_revision :change_branch

    # Removes the repo from the filesystem
    def discard_repo
      @handler.discard
    end

    # Returns +true+ if the repo was retrieved successfully
    def retrieved?
      @retrieved
    end

    # Returns the revision of the repo.
    def revision
      @handler.revision
    end

    # Returns the tag of the repo.
    def tag
      @handler.tag
    end

    def repo_name
      @service.repo_name
    end

    def service_name
      @service.name
    end

    def user_name
      @service.user_name
    end

    private

    def repo_dir(service)
      parts = [
        service.name, service.user_name, service.repo_name
        ].map(&:to_s)
      File.join(*parts)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
repomen-0.1.2 lib/repomen/retriever.rb