module Thegarage::Gitx::Github
Constants
- CLIENT_URL
- GLOBAL_CONFIG_FILE
- PULL_REQUEST_FOOTER
- REVIEW_CONTEXT
Public Instance Methods
ask_without_echo(message)
click to toggle source
# File lib/thegarage/gitx/github.rb, line 173 def ask_without_echo(message) value = ask(message, echo: false) say '' value end
branch_status(branch)
click to toggle source
Get the current commit status of a branch @see developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
# File lib/thegarage/gitx/github.rb, line 49 def branch_status(branch) response = github_client.status(github_slug, branch) response.state end
create_pull_request(branch)
click to toggle source
@see developer.github.com/v3/pulls/
# File lib/thegarage/gitx/github.rb, line 61 def create_pull_request(branch) say "Creating pull request for " say "#{branch} ", :green say "against " say "#{Thegarage::Gitx::BASE_BRANCH} ", :green say "in " say github_slug, :green title = branch body = pull_request_body(branch) github_client.create_pull_request(github_slug, Thegarage::Gitx::BASE_BRANCH, branch, title, body) end
find_or_create_pull_request(branch)
click to toggle source
# File lib/thegarage/gitx/github.rb, line 21 def find_or_create_pull_request(branch) pull_request = find_pull_request(branch) pull_request ||= begin checkout_branch(branch) execute_command(Thegarage::Gitx::Cli::UpdateCommand, :update) pull_request = create_pull_request(branch) say 'Created pull request: ' say pull_request.html_url, :green pull_request end pull_request end
find_pull_request(branch)
click to toggle source
@return [Sawyer::Resource] data structure of pull request info if found @return nil if no pull request found
# File lib/thegarage/gitx/github.rb, line 37 def find_pull_request(branch) head_reference = "#{github_organization}:#{branch}" params = { head: head_reference, state: 'open' } pull_requests = github_client.pull_requests(github_slug, params) pull_requests.first end
github_client()
click to toggle source
# File lib/thegarage/gitx/github.rb, line 125 def github_client @client ||= Octokit::Client.new(:access_token => authorization_token) end
github_client_name()
click to toggle source
# File lib/thegarage/gitx/github.rb, line 120 def github_client_name timestamp = Time.now.utc.strftime('%FT%R:%S%z') client_name = "The Garage Git eXtensions #{timestamp}" end
github_organization()
click to toggle source
# File lib/thegarage/gitx/github.rb, line 147 def github_organization github_slug.split('/').first end
github_slug()
click to toggle source
@return the github slug for the current repository's remote origin url. @example
git@github.com:socialcast/thegarage/gitx.git #=> thegarage/gitx
@example
https://github.com/socialcast/thegarage/gitx.git #=> thegarage/gitx
# File lib/thegarage/gitx/github.rb, line 142 def github_slug remote = repo.config['remote.origin.url'] remote.to_s.gsub(/\.git$/,'').split(/[:\/]/).last(2).join('/') end
global_config()
click to toggle source
# File lib/thegarage/gitx/github.rb, line 155 def global_config @config ||= begin File.exists?(global_config_file) ? YAML.load_file(global_config_file) : {} end end
global_config_file()
click to toggle source
# File lib/thegarage/gitx/github.rb, line 151 def global_config_file File.expand_path(GLOBAL_CONFIG_FILE) end
pull_request_body(branch)
click to toggle source
# File lib/thegarage/gitx/github.rb, line 74 def pull_request_body(branch) changelog = run_cmd("git log #{Thegarage::Gitx::BASE_BRANCH}...#{branch} --reverse --no-merges --pretty=format:'* %s%n%b'") description = options[:description] description_template = [] description_template << "#{description}\n" if description description_template << '### Changelog' description_template << changelog description_template << PULL_REQUEST_FOOTER body = ask_editor(description_template.join("\n"), repo.config['core.editor']) body.gsub(PULL_REQUEST_FOOTER, '').chomp.strip end
save_global_config(options)
click to toggle source
# File lib/thegarage/gitx/github.rb, line 161 def save_global_config(options) config_dir = File.dirname(global_config_file) ::FileUtils.mkdir_p(config_dir, mode: 0700) unless File.exists?(config_dir) @config = global_config.merge(options) File.open(global_config_file, "a+") do |file| file.truncate(0) file.write(@config.to_yaml) end File.chmod(0600, global_config_file) end
update_review_status(pull_request, state, description)
click to toggle source
Update build status with peer review status
# File lib/thegarage/gitx/github.rb, line 55 def update_review_status(pull_request, state, description) commit_sha = pull_request.head.sha github_client.create_status(github_slug, commit_sha, state, context: REVIEW_CONTEXT, description: description) end
username()
click to toggle source
@return [String] github username (ex: 'wireframe') of the current github.user @raise error if github.user is not configured
# File lib/thegarage/gitx/github.rb, line 131 def username username = repo.config['github.user'] fail "Github user not configured. Run: `git config --global github.user 'me@email.com'`" unless username username end