Skip to content

Commit

Permalink
add 'create' task for instant creation and pushing to a GitHub repo
Browse files Browse the repository at this point in the history
  • Loading branch information
mislav committed Aug 24, 2008
1 parent 5a4cb0b commit 022dd8e
Showing 1 changed file with 44 additions and 3 deletions.
47 changes: 44 additions & 3 deletions github.thor
@@ -1,19 +1,58 @@
#!/usr/bin/env ruby
require 'rubygems'
require 'thor'

class Github < Thor
desc "track USER [BRANCH_NAME]", "track a USERs fork"
desc "track <user> [<branch-name>]", "track a fork belonging to <user>"
def track(user, branch_name = nil)
branch_name ||= user
git %(remote add #{user} git://github.com/#{user}/#{project_name}.git)
git %(fetch --no-tags #{user} master:refs/remotes/#{user}/master)
git %(branch #{branch_name} --track #{user}/master)
end

desc "update", "checkout each branch that has a remote and git pull"
def update
branches.reverse.each do |branch|
all = branches
current = all.first
last = nil
branches_with_remotes = all.reject { |branch| remote_for_branch(branch) == '' }

branches_with_remotes.reverse.each do |branch|
git %(checkout #{branch})
git 'pull -v --no-tags'
last = branch
end

git %(checkout #{current}) unless last == current
end

desc "create <repo-name>", "create a new GitHub repository and push to it"
method_options :private => :boolean, :remote => :optional, :branch => :optional
def create(repo_name, opts)
# prompt for username/password
print 'GitHub login ("user:pass"): '
STDIN.gets
auth = $_.chomp
owner = auth.split(':').first

# make a POST request to create a new repo
# WARNING: your GitHub password is being sent unencrypted over HTTP Basic auth
require 'net/http'
uri = URI.parse "http://#{auth}@github.com/repositories"
data = { 'repository[name]' => repo_name, 'repository[public]' => (!opts['private']).to_s }
response = Net::HTTP.post_form(uri, data)
response.error! if response.code >= 400

# set up a new remote and push commits to it
remote = opts['remote'] || 'origin'
branch = opts['branch'] || 'master'
git %(remote add #{remote} git@github.com:#{owner}/#{repo_name}.git), true
puts "added GitHub as remote origin; now pushing commits from #{branch} ..."
git %(push origin #{branch})
# set up tracking
git %(config branch.#{branch}.remote origin)
git %(config branch.#{branch}.merge refs/heads/master)
end

private
Expand Down Expand Up @@ -63,4 +102,6 @@ class Github < Thor
end
end
end
end
end

Github.start if __FILE__ == $0

0 comments on commit 022dd8e

Please sign in to comment.