#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, make this file executable by "chmod +x post-update". git-update-server-info export GIT_DIR=`cd $GIT_DIR; pwd` [ `expr "$GIT_DIR" : '.*/\.git'` = 0 ] && exit 0 tree_in_revlog() { ref=$1 tree=$2 found=$( tail logs/$ref | while read commit rubbish do this_tree=`git-cat-file commit $commit | awk '/^tree/ { print $2; exit }'` if [ "$this_tree" = "$tree" ] then echo $commit fi done ) [ -n "$found" ] && true } for ref do active=`git-symbolic-ref HEAD` if [ "$ref" = "$active" ] then echo "Pushing to checked out branch - updating working copy" >&2 success= if ! (cd ..; git-diff-files) | grep -q . then # save the current index just in case current_tree=`git-write-tree` if tree_in_revlog $ref $current_tree then cd .. if git-diff-index -R --name-status HEAD >&2 && git-diff-index -z --name-only --diff-filter=A HEAD | xargs -0r rm && git-reset --hard HEAD then success=1 else echo "E:unexpected error during update" >&2 fi else echo "E:uncommitted, staged changes found" >&2 fi else echo "E:unstaged changes found" >&2 fi if [ -z "$success" ] then ( echo "Non-bare repository checkout is not clean - not updating it" echo "However I AM going to update the index. Any half-staged commit" echo "in that checkout will be thrown away, but on the bright side" echo "this is probably the least confusing thing for us to do and at" echo "least we're not throwing any files somebody has changed away" git-reset --mixed HEAD echo echo "This is the new status of the upstream working copy:" git-status ) >&2 fi fi done - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html