Problemas con el envío de datos de confirmación en el gancho posterior a la recepción a través de curl (git)

El objective de mi proyecto es registrar cada commit hecho por un desarrollador en mongodb. Configuré una
oyente nodejs que persistirá los datos recibidos en una publicación a mongo.

Estoy ejecutando un server gitolite, y cada vez que un desarrollador empuja estoy usando un gancho post-recepción para publicar las confirmaciones a través de curl en mi oyente de nodo.

Lo hago con éxito, aparte de una confirmación inicial en la que la revisión anterior es 0000000000000000000000000000000000000000 Obtengo un argumento no válido cuando bash ejecutar git log.

argumento ambiguo '8a2db961045bd4825624b16ad62e75be49dd70b6 ~ 1..8a2db961045bd4825624b16ad62e75be49dd70b6': revisión o ruta desconocidas en el tree de trabajo. Use '-' para separar las routes de las revisiones

Un fragment de mi script bash / post-receive está debajo.

 #!/bin/sh # Read git data on STDIN while read oval nval ref ; do if expr "$ref" : "^refs/heads/"; then if expr "$oval" : '0*$' >/dev/null then revspec=$nval else revspec=$oval..$nval fi other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ | grep -F -v $ref) # Get the name of the repository if [ $(git rev-parse --is-bare-repository) = true ] then REPOSITORY_BASENAME=$(basename "$PWD") else REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..)) fi REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git} for revision in `git rev-parse --not $other_branches | git rev-list --stdin $revspec`; do COMMIT_ID=$(git log $revision~1..$revision --pretty=format:'%H') DATE=$(git log $revision~1..$revision --date=short --pretty=format:'%ad') MSG=$(git log $revision~1..$revision --pretty=format:'%s') AUTHOR=$(git log $revision~1..$revision --pretty=format:'%ae') curl -s -d "commit_id=$COMMIT_ID&date=$DATE&msg=$MSG&author=$AUTHOR&project=$REPOSITORY_BASENAME" $LISTENER_RECEIVE done fi done 

No estoy exactamente seguro de cómo lidiar con esto en mi script bash / con los commands git que estoy usando.

Una opción (lazy) sería usar git log sin la información de revisión, y evitar agregar commits duplicates a mi colección usando el nombre del proyecto / git commit id. Pero eso sería lento en grandes repositorys.

No estoy seguro si va a ayudar aquí, pero en el gancho pre-commit.sample, usan este truco:

 if git rev-parse --verify HEAD >/dev/null 2>&1 then against=HEAD else # Initial commit: diff against an empty tree object against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi 

Ese último hash es el hash de un repository vacío y está codificado en git.