Sha256: 8ebc00437f5b5141323e692b2615180bf1111a5d1758e1c098ea21bc2f2b4187

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

require "git"
require "git-ssh-wrapper"

module GithubHerokuDeployer
  class Git

    def initialize(options)
      @ssh_enabled = options[:ssh_enabled]
      @heroku_repo = options[:heroku_repo]
      @github_repo = options[:github_repo]
    end

    def push_app_to_heroku(remote="heroku", branch="master")
      wrapper = GitSSHWrapper.new(private_key_path: "~/.ssh/id_rsa")
      repo.add_remote("heroku", @heroku_repo) unless repo.remote("heroku").url
      `cd #{repo.dir}; env #{wrapper.git_ssh} git push -f #{remote} #{branch}`
    ensure
      wrapper.unlink
    end

    def repo
      @repo ||= setup_repo
    end

    def setup_repo
      # remove_folder
      clone_or_pull
      open_repo
    end

    # def remove_folder
    #   `rm -r #{folder}`
    # end

    def folder
      @folder ||= "repos/#{Zlib.crc32(@github_repo)}"
    end

    def clone_or_pull
      !exists_locally? ? clone : pull
    end

    def exists_locally?
      File.exists?(File.join(folder, ".git", "config"))
    end

    def clone
      wrapper = GitSSHWrapper.new(private_key_path: "~/.ssh/id_rsa")
      `env #{wrapper.git_ssh} git clone #{@github_repo} #{folder}`
    ensure
      wrapper.unlink
    end

    def pull
      wrapper = GitSSHWrapper.new(private_key_path: "~/.ssh/id_rsa")
      dir = Dir.pwd # need to cd back to here
      `cd #{folder}; env #{wrapper.git_ssh} git pull; cd #{dir}`
    ensure
      wrapper.unlink
    end

    def open_repo
      ::Git.open(folder)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
github_heroku_deployer-0.0.2 lib/github_heroku_deployer/git.rb
github_heroku_deployer-0.0.1 lib/github_heroku_deployer/git.rb