Bir ayrıştırma hataları için taahhüt herhangi bir php dosyasını kontrol için git pre-commit kanca yazma daha iyi bir yolu var mı?

3 Cevap php

Ne çok uzak olması

#!/bin/sh

php_syntax_check()
{
    retval=0
    for i in $(git-diff-index --name-only --cached HEAD -- | grep -e '\.php$'); do
    	if [ -f $i ]; then
    		output=$(php -l $i)
    		retval=$?
    		if [ $retval -gt 0 ]; then
    			echo "=============================================================================="
    			echo "Unstaging $i for the commit due to the follow parse errors"
    			echo "$output"
    			git reset -q HEAD $i
    		fi
    	fi
    done

    if [ $retval -gt 0 ]; then
    	exit $retval
    fi
}
php_syntax_check

3 Cevap

Taahhüt eğer bir kısmi o sahnelenen kopya çalışma kopyasını test değil, çünkü (çalışma ağacında tüm değişiklikleri kararlıyız) taahhüt, daha sonra bu make yanlış sonuçlar verebilir.

Bunu yapmanın bir yolu olabilir:

git diff --cached --name-only --diff-filter=ACMR | xargs git checkout-index --prefix=$TMPDIR/ --
find $TMPDIR -name '*.php' -print | xargs -n 1 php -l

Bir çizik uzaya sahnelenen görüntülerin bir kopyasını yapmak ve sonra orada onlara test komutunu çalıştırın hangi. Dosyaları herhangi bir yapı içinde diğer dosyaları eklerseniz, o zaman bütün deney ağacında görüntüyü sahnelenen ve sonra orada değiştirilen dosyaları test yeniden gerekebilir (bakınız: Git pre-commit hook : changed/added files).

Ben offtopic ise özür dilerim, ama bir taahhüt yapmadan önce (kod no sözdizimi hataları var olduğunu ima eder) otomatik testler çeşit çalıştırmak gerekiyor değil mi?

Eğer php5-cli kurulu var eğer PHP ön-taahhüt ve ile daha tanıdık sözdizimi kullanabilirsiniz yazabilirsiniz.

Sadece daha fazla gibi bir şey yapmak.

#!/usr/bin/php
<?php /* Your pre-commit check. */ ?>