lib/gitmine.rb in gitmine-0.1.5 vs lib/gitmine.rb in gitmine-0.1.6

- old
+ new

@@ -2,8 +2,99 @@ require 'grit' require 'yaml' require 'httparty' -%w(gitmine issue commit cli).each do |filename| +class Gitmine + + def self.list + gm = Gitmine.new + gm.commits.each do |commit| + status = commit.issue ? commit.issue.status : 'N/A' + puts "#{commit.id[0..6]} #{status.ljust(12)} #{commit.committer.name.ljust(15)} #{commit.message[0..50].gsub("\n", '')}" + end + end + + def initialize + @repo = Grit::Repo.new(ENV['PWD']) + @branch = File.read('./.git/HEAD').match(/^ref: refs\/heads\/(.+)/)[1] + end + + def commits + @repo.commits(@branch).map do |c| + Commit.new(c) + end + end + + + # TODO specs + def self.branch(branch_name) + issue_id = branch_name[/^\d+/] + original_branch = File.read('./.git/HEAD').match(/^ref: refs\/heads\/(.+)/)[1] + + raise "Invalid branch name. It should look like 123-my-branch" unless branch_name[/^\d+-/] + + issue = Issue.find(issue_id) + + raise "Issue ##{issue_id} does not exists" if issue.nil? + + puts yellow("Create the branch #{branch_name}") + run_cmd("git checkout -b #{branch_name}") + + puts yellow("Push it to origin") + run_cmd("git push origin #{branch_name}") + + puts yellow("Make the local branch tracking the remote") + run_cmd("git branch --set-upstream #{branch_name} origin/#{branch_name}") + + puts yellow("Adding a note to the Issue ##{issue_id}") + note = "Branch *#{branch_name}* created from #{original_branch}" + if Config.github + note << %{ - "See on Github":https://github.com/#{Config.github}/tree/#{branch_name}} + note << %{ - "Compare on Github":https://github.com/#{Config.github}/compare/#{original_branch}...#{branch_name}} + end + end + + # TODO specs + def self.checkout(issue_id) + local_branch = LocalBranch.find(issue_id).name + if local_branch + run_cmd("git checkout #{local_branch}") + return + end + + remote_branch = RemoteBranch.find(issue_id).name + if remote_branch + run_cmd("git checkout -b #{remote_branch} origin/#{remote_branch}") + return + end + + raise "Can't find branch starting with #{issue_id}" + end + + # TODO specs + def self.delete(issue_id) + RemoteBranch.find(issue_id).delete + end + + # TODO specs + def self.reviewed(issue_id) + issue = Issue.find(issue_id) + + puts yellow("Merge #{issue_id} to master and push") + issue.local_branch.merge_to_master + + puts yellow("Delete remote branch") + issue.remote_branch.delete + + puts yellow("Delete hudson jobs") + issue.delete_hudson_jobs + + puts yellow("Set Ticket status to 'reviewed'") + issue.update_status("reviewed") + end +end + + +%w(config issue commit cli colors branch git hudson_job).each do |filename| require File.dirname(__FILE__) + "/gitmine/#{filename}.rb" end