On Wed, Mar 30, 2011 at 10:04 PM, Jeff King <peff@xxxxxxxx> wrote: > On Wed, Mar 30, 2011 at 03:27:14PM +0200, Mathieu Malaterre wrote: > >> $ git push >> Counting objects: 5, done. >> Delta compression using up to 4 threads. >> Compressing objects: 100% (3/3), done. >> Writing objects: 100% (3/3), 304 bytes, done. >> Total 3 (delta 2), reused 0 (delta 0) >> error: cannot run hooks/pre-receive: No such file or directory >> To ssh://malat@xxxxxxxxxxxxxxxxxxxxxxxx/gitroot/gdcm/gdcm.old >> ! [remote rejected] master -> master (pre-receive hook declined) >> error: failed to push some refs to >> 'ssh://malat@xxxxxxxxxxxxxxxxxxxxxxxx/gitroot/gdcm/gdcm.old' > > We won't try to execute a hook that doesn't exist, so the "no such file > or directory" almost certainly means the #! interpreter is missing. > >> I tried with something as simple as : >> >> % cat pre-receive >> #!/usr/bin/ruby >> % which ruby >> /usr/bin/ruby > > This might be a stupid question, but which machine is that output from? > The pre-receive hook runs on the server, so you must have ruby there. I > ask mainly because I didn't realize sourceforge would give people > arbitrary shell access on the git boxes. > > My next guess would be that the git process runs in some kind of chroot > that doesn't have ruby in it. Makes complete sense now. I thought initially that the "no such file" refered to the actual hooks script. I naively assumed my ssh connection on sf.net gave me access to the actual git boxes (or maybe it is executed from a chroot). In any case rewriting the script in pure shell script (no bash either) seems to work ok now (*). However I am now being told that this script should rather go in the update hooks... (*) read rev_old rev_new refname ref_to_check="refs/heads/master" if [ "$refname" == "$ref_to_check" ] then merge_bases=`git merge-base ${rev_old} ${rev_new}` if [ "$merge_bases" != "$rev_old" ] then echo "Non fastward is disallowed" exit 1 fi # non-fast-forward case: git rev-list --parents $merge_bases..$rev_new \ | while read x; do set -- $x if [ "$#" != "2" ] then echo "Multiple parents: $x"; exit 1 fi; done [ $? -ne 0 ] && exit 1 fi exit 0 -- 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