-
-
Save ericatkinson/2731240 to your computer and use it in GitHub Desktop.
Revisions
-
ryanflorence created this gist
Sep 18, 2010 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,41 @@ #!/usr/bin/env ruby # Aside from removing Ruby on Rails specific code this is taken verbatim from # mislav's git-deploy (http://github.com/mislav/git-deploy) and it's awesome # - Ryan Florence (http://ryanflorence.com) # # Install this hook to a remote repository with a working tree, when you push # to it, this hook will reset the head so the files are updated if ENV['GIT_DIR'] == '.' # this means the script has been called as a hook, not manually. # get the proper GIT_DIR so we can descend into the working copy dir; # if we don't then `git reset --hard` doesn't affect the working tree. Dir.chdir('..') ENV['GIT_DIR'] = '.git' end cmd = %(bash -c "[ -f /etc/profile ] && source /etc/profile; echo $PATH") envpath = IO.popen(cmd, 'r') { |io| io.read.chomp } ENV['PATH'] = envpath # find out the current branch head = `git symbolic-ref HEAD`.chomp # abort if we're on a detached head exit unless $?.success? oldrev = newrev = nil null_ref = '0' * 40 # read the STDIN to detect if this push changed the current branch while newrev.nil? and gets # each line of input is in form of "<oldrev> <newrev> <refname>" revs = $_.split oldrev, newrev = revs if head == revs.pop end # abort if there's no update, or in case the branch is deleted exit if newrev.nil? or newrev == null_ref # update the working copy `umask 002 && git reset --hard`