Skip to content

Instantly share code, notes, and snippets.

@diasjorge
Created May 20, 2010 12:18
Show Gist options
  • Save diasjorge/407502 to your computer and use it in GitHub Desktop.
Save diasjorge/407502 to your computer and use it in GitHub Desktop.
#!/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