Re: error: cannot run hooks/pre-receive: No such file or directory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]