Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
namespace :git do task :helpers do def git_branch `git-branch | grep "*"`.strip[2..-1] end def git? `git-status` $?.exitstatus != 128 end def git_stash `git-diff-files --quiet` if $?.exitstatus == 1 stash = true clear = `git-stash list`.scan("\n").size == 0 puts "* Saving changes..." `git-stash save` else stash = false end begin yield rescue puts "* Encountered an error, backing out..." ensure if stash puts "* Applying changes..." sh "git-stash apply" `git-stash clear` if clear end end end def git_fetch sh "git#{'-svn' if git_svn?} fetch" end def git_rebase if git_svn? sh "git-rebase git-svn" else sh "git-rebase origin/master" end end def git_push if git_svn? sh "git-svn dcommit" else sh "git-push" end end def git_svn? `git-branch -a` =~ /^\s*git-svn/ end end desc "Pull new commits from the repository" task :update => %w[git:helpers] do git_stash do branch = git_branch() if branch != "master" switch = true `git-checkout master` puts "* Switching back to master..." else switch = false end puts "* Pulling in new commits..." git_fetch git_rebase if switch puts "* Porting changes into #{branch}..." `git-checkout #{branch}` sh "git-rebase master" end end end desc "Push local commits into the Wesabe repository" task :push => %w[git:update] do git_stash do puts "* Pushing changes..." git_push branch = git_branch() if branch != "master" `git-checkout master` puts "* Porting changes into master" git_rebase `git-checkout #{branch}` end end end desc "Delete the current branch and switch back to master" task :close => %w[git:helpers] do branch = git_branch() if branch == "master" $stderr.puts "* Cannot delete master branch" exit 1 end puts "* Switching to master" `git-checkout master 2>/dev/null` puts "* Deleting branch #{branch}" `git-branch -d #{branch} 2>/dev/null` if $?.exitstatus == 1 $stderr.puts "* Branch #{branch} isn't a strict subset of master, quitting" `git-checkout #{branch} 2>/dev/null` exit 1 end end desc "Create a new branch off master" task :open => %w[git:helpers] do print "* Name your branch: " newbranch = $stdin.gets.chomp branch = git_branch() if branch != "master" puts "* Switching to master" `git-checkout master` end `git-checkout -b #{newbranch}` unless $?.exitstatus.zero? puts "* Couldn't create branch #{newbranch}, switchin back to #{branch}" `git-checkout #{branch}` exit 1 end end end
This paste will be private.
From the Design Piracy series on my blog: