Created
May 20, 2010 12:18
-
-
Save diasjorge/407502 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
require 'rubygems' | |
require 'thor' | |
class Integrate < Thor | |
desc "request [merge_request_number]", "Integrate this merge request into the repository" | |
method_option :src, :type => :string, :default => "" | |
def request(merge_request_number) | |
integrate_request(merge_request_number, options) | |
end | |
desc "to [branch]", "Merge integration into branch" | |
def to(branch) | |
merge_current_to(branch) | |
end | |
desc "fast [merge_request_number]", "Integrate this merge request into the repository and merge into staging" | |
method_option :src, :type => :string, :default => "" | |
def fast(merge_request_number) | |
integrate_request(merge_request_number, options) | |
merge_current_to("staging") | |
end | |
desc "sfast [merge_request_number]", "Integrate this merge request into the repository and merge into staging. Then Mpush" | |
method_option :src, :type => :string, :default => "" | |
def sfast(merge_request_number) | |
integrate_request(merge_request_number, options) | |
if merge_current_to("staging") | |
system %(git mpush) | |
end | |
end | |
desc "delete", "Delete integration branch" | |
def delete | |
puts %x(git branch -D integration) | |
end | |
no_tasks do | |
def get_repository_name(user) | |
case user | |
when "justlanded" | |
"just-landed/justlanded.git" | |
else | |
"~#{user}/just-landed/#{user}s-justlanded.git" | |
end | |
end | |
def get_current_branch | |
%x(git branch | grep "*" | sed 's/* //') | |
end | |
def integrate_request(merge_request_number, options = OpenStruct.new) | |
repository = | |
if options.src == "" | |
"[email protected]:#{get_repository_name("justlanded")}" | |
else | |
"[email protected]:#{get_repository_name(options.src)}" | |
end | |
unless %x(git stash) =~ /No local changes to save/ | |
puts "STASHED CONTENT" | |
end | |
if system("git checkout -b integration") | |
puts "git pull #{repository} refs/merge-requests/#{merge_request_number}" | |
puts %x(git pull #{repository} refs/merge-requests/#{merge_request_number}) | |
puts("") | |
puts "======================================================" | |
puts %x(git log --pretty=oneline --abbrev-commit staging..integration) | |
end | |
end | |
def merge_current_to(target_branch) | |
integrate_branch = get_current_branch | |
system %(git checkout #{target_branch}) | |
system %(git merge #{integrate_branch}) | |
system %(git branch -d #{integrate_branch}) | |
end | |
end | |
end | |
Integrate.start |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment