andre (owner)

Revisions

  • 23f96a Sat Feb 14 15:12:20 -0800 2009
gist: 64519 Download_button fork
public
Public Clone URL: git://gist.github.com/64519.git
Embed All Files: show embed
mergefrom.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#! /usr/bin/env ruby
 
require "open3" # for reading stderr
 
# A dirt-simple script to merge a pull request from someone on github.
# Andre Lewis, 2009
#
# Assumptions:
# 1. you're currently working on master
# 2. you've already reviewed the pull request and have decided to include it.
#
# usage:
# mergefrom git://github.com/foo/bar.git
#
# or, optionally, to merge a specific commit:
#
# mergefrom git://github.com/foo/bar.git 25fe7ea
#
#
# What it does:
# 1. adds the remote repo
# 2. checks out the remote repo as a local branch
# 3. pulls from the remote master or specific commit you provided
# 4. switches back to master
# 5. (with your confirmation) merges the just-checked out branch
# 6. (with your confirmation) deletes your just-checked out branch
 
 
url=ARGV[0] # Looks like: git://github.com/andre/geokit-gem.git
commit=ARGV[1] # Looks like: 25fe7ea
 
# quick method to execute a command and print the output
def exe(cmd)
  puts "EXECUTING: #{cmd}"
  failed=nil
  Open3.popen3(cmd) do |stdin, stdout, stderr|
    out=stdout.read
    err=stderr.read
    puts out if out !=''
    puts err if err !=''
    failed = err=~/^fatal|^error/i
  end
  
  # give an option to continue if something went wrong
  if failed
    puts "Continue? [y|N]"
    s=STDIN.gets.chomp.downcase
    if s!='y'
      puts "STOPPING ..."
      exit
    end
  end
end
 
# bail if the url is blank or not a git url
if url.nil? || !url =~/^git/
  puts "USAGE: mergefrom git://github.com/foo/bar.git"
  puts "optionally, include a specific commit as the second argument: mergefrom git://github.com/foo/bar.git 25fe7ea"
  exit
end
 
# format the commit if the commit argument is non-blank
commit = (commit.nil? || commit == '') ? '' : ":#{commit}"
 
# extract the branchname, or create it from the url
url=~/^git:\/\/github.com\/(\w+)\//
branch=$1 || url.gsub('git:','').gsub(/\W/i,'')
 
puts "checking out #{url} as local branch #{branch}"
 
exe "git remote add -f #{branch} #{url}"
exe "git checkout -b #{branch}/master"
exe "git pull #{branch} master#{commit}"
exe "git checkout master"
 
merge_command = "git merge #{branch}/master"
delete_branch_command = "git merge #{branch}/master"
 
puts "Checked out the branch, and now switched back to master. Do you want to merge now? [Y|n]"
s=STDIN.gets.chomp.downcase
if s != 'n'
  exe merge_command
  puts "merged. delete branch? [Y|n]"
  s=STDIN.gets.chomp.downcase
  if s != 'n'
    exe delete_branch_command
  else
    puts "to delete: #{delete_branch_command}"
  end
else
  puts "to merge: #{merge_command}"
  puts "to delete_branch: #{delete_branch_command}"
end
puts "to push: git push"
puts "DONE"