Есть ли лучший способ написания GIT Pre-Commit Compart Coint, чтобы проверить любой файл PHP в фиксации для ошибок разбора? -- php поле с участием git поле с участием version-control пол Связанный проблема

Is there a better way of writing a git pre-commit hook to check any php file in a commit for parse errors?


8
vote

проблема

русский

Что я имею до сих пор, это

 <код> #!/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   
Английский оригинал

What I have so far is

#!/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 
</div
        

Список ответов

1
 
vote
vote
Лучший ответ
 

Если Commit - это частичный коммит (не все изменения в рабочем дереве преданы), то это делает неверные результаты, так как он проверяет рабочую копию и не поэтапную копию.

Один из способов сделать это может быть:

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

Что сделает копию поэтапных изображений в космос царапин, а затем запустить команду теста на них там. Если какой-либо из файлов включает в себя другие файлы в сборке, то вам, возможно, придется воссоздать все поэтапное изображение в тестовом дереве, а затем проверить измененные файлы там (см.: Git Pre-Commite Hook: изменились / добавлены файлы ).

 

If the commit is a partial commit (not all the changes in the working tree are committed), then this make give incorrect results since it tests the working copy and not the staged copy.

One way to do this could be:

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

Which would make a copy of the staged images into a scratch space and then run the test command on them there. If any of the files include other files in the build then you may have to recreate the whole staged image in the test tree and then test the changed files there (See: Git pre-commit hook : changed/added files).

</div
 
 
2
 
vote

Извините, если это оффтоп, но вы не должны запускать некоторые автоматические тесты (что будет подразумевать, что код не имеет синтаксических ошибок), прежде чем делать комбинезон?

 

I'm sorry if it's offtopic, but aren't you supposed to run some kind of automated tests (which would imply that the code has no syntax errors) before doing a commit?

</div
 
 
0
 
vote

Если у вас установлен PHP5-CLI, вы можете написать предварительный коммит в PHP и использовать синтаксис вашего более знакомого с.

Просто сделайте что-то большее, как.

 <код> if($("#someElement").data("datepicker") != null){    // datepicker initialized } 0  
 

If you've got the php5-cli installed you can write your pre-commit in PHP and use the syntax your more familiar with.

Just do something more like.

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

Мой PHP Реализация предварительного коммитана, проверяет, могут ли модифицированные файлы в Git ошибки Free Free 'и являются согласно стандартом PSR2, используя либо «PHP-код-Sniffer», либо «PHP-CS-CS-Fixer»

 <код> if($("#someElement").data("datepicker") != null){    // datepicker initialized } 1  
 

My PHP implementation of the pre-commit hook checks whether the modified files in git are 'error free' and are as per PSR2 standard using either 'php-code-sniffer' or 'php-cs-fixer'

#!/usr/local/bin/php <?php     /**          * Collect all files which have been added, copied or          * modified and store them in an array - output          */         exec('git diff --cached --name-only --diff-filter=ACM', $output);          $isViolated = 0;         $violatedFiles = array();         // $php_cs_path = "/usr/local/bin/php-cs-fixer";         $php_cs_path = "~/.composer/vendor/bin/phpcs";          foreach ($output as $fileName) {             // Consider only PHP file for processing             if (pathinfo($fileName, PATHINFO_EXTENSION) == "php") {                 $psr_output = array();                  // Put the changes to be made in $psr_output, if not as per PSR2 standard                  // php-cs-fixer                 // exec("{$php_cs_path} fix {$fileName} --rules=@PSR2 --dry-run --diff", $psr_output, $return);                  // php-code-sniffer                 exec("{$php_cs_path} --standard=PSR2 --colors -n {$fileName}", $psr_output, $return);                  if ($return != 0) {                     $isViolated = 1;                     $violatedFiles[] = $fileName;                     echo implode(" ", $psr_output), " ";                 }             }         }         if ($isViolated == 1) {             echo " ---------------------------- IMPORTANT -------------------------------- ";             echo " Please use the suggestions above to fix the code in the following file:  ";             echo " => " . implode("  => ", $violatedFiles);             echo " -----------------------------------------------------------------------   ";             exit(1);         } else {             echo "  => Committed Successfully :-)  ";             exit(0);         } 
</div
 
 

Связанный проблема

-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы  ( Php returning wrong row in mysqli prepared statment ) 
Я пытаюсь создать тщеславие URL для моего сайта, и на данный момент есть только одно имя пользователя в базе данных, которые можно ссылаться. Мой запрос верне...

1  add_menu_page не добавляет никаких страниц в WordPress  ( Add menu page doesnt add any pages in wordpress ) 
Я не могу понять, почему мой код не работает. Я разрабатываю плагин в WordPress, и я хочу иметь страницу на панели администратора. Я попробовал этот код, поло...

0  PHP Уведомление: undefined Holvil: stdclass:  ( Php notice undefined property stdclass ) 
У меня есть массив, возвращаясь из флэш-приложения, созданного в Flash Builder 4. У меня есть настройка службы, которые запросили и получают данные от DB, о...

0  Вставить арабский с помощью PDO не работает  ( Insert arabic using pdo is not working ) 
Я очень глубоко укорую в этом и посмотрите много вопросов, и это не работает Каждый раз, когда я пытаюсь вставить арабский, он показывает так (?????) <Сильн...

1  Транзакции mysql и php  ( Transactions mysql and php ) 
Я запутался ABT работает транзакциями через PHP-скрипт. В моем MySQL AutoCommit устанавливается на 1, Тем не менее, когда я запускаю скрипт ex: mysql_query ...

13  Отфильтровать номера в строке в PHP  ( Filter out numbers in a string in php ) 
Предполагая, что у меня есть эти тексты 'x34', '150px', '650dpi', 'E3R4T5' ... Как я могу получить только номера? Я имею в виду, я хочу 34, 150, 650, 345 без ...

0  Ограничение результатов Flickr API, чтобы избежать дублирования фотографий от пользователя?  ( Limiting a results flickr api to avoid duplicate photos from a user ) 
пытается выводить изображения Flickr из определенного местоположения, не используя ни одного геолокации, но только строка местоположения, но это проблема для ...

5  Экспорт SVG в PDF в автономном TideSDK WebApp  ( Exporting svg to pdf in a offline tidesdk webapp ) 
У меня есть приложение Offline HTML5 / CSS / JS, построенное с TIDESDK, в котором гистограмма нарисована с HighCharts в качестве SVG «Tag», используя данные, ...

1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования  ( Php profiling code and strict environment improving my coding ) 
Я хотел бы обновить свою локальную рабочую среду, чтобы быть более строгим, чтобы улучшить мой код. Я знаю, что мой код в порядке, но как с большинством вещей...

1  Разбор XML-документа с PHP с использованием петли «Foreach»  ( Parsing xml document with php using foreach loop ) 
Я новичок в php, mysql и xml ... и пытался обернуть голову вокруг классов, объектов, массивов и петель. Я работаю над анализатором, который извлекает данные и...

1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP  ( Yii with bootstrap extension alias bootstrap widgets tbnavbar is invalid make ) 
Я пытаюсь использовать Расширение Bootstrap с Yii, но я продолжаю получать Ошибка, упомянутая в заголовке, я дважды проверил мой файл конфигурации, но я не ...

1  Symfony 3.4.3 - Контейнер обслуживания: Ошибка требует, чтобы вы предоставляете значение для  ( Symfony 3 4 3 service container error requires that you provide a value for t ) 
Я потратил много времени, но я не решил это Я хотел бы пройти в LoggerInterface в действии моего контроллера Вот мой Service.yml <код> # Learn more about ...

1  Как мне позвонить сценарий Perl с моим контроллером Symfony2?  ( How do i call a perl script from my symfony2 controller ) 
Я пытаюсь реализовать автоматическую отправку в систему управления информацией из-за моего приложения Symfony2. Кто-то еще написал сценарий Perl для представл...

0  Файл не загружается в Интернете (офлайн / локальные работы)  ( File not being uploaded online offline local works ) 
Чехол: Загрузка аватаров. Это работает в автономном режиме на моем localhost, но после того, как поместил его онлайн в 000webhost Provider, это больше не рабо...

0  Почему мой счет на массиве хранится в переменной сессии удваивает?  ( Why does my array count stored in a session variable doubles ) 
У меня есть таблица, которая содержит следующие столбцы .. И я сохранил данные этой таблицы в переменную сеанса <код> $sql = "SELECT * from `basic_info...

Связанный проблема

-1  PHP возвращает неправильную строку в MySQLI подготовленной статусы 
1  add_menu_page не добавляет никаких страниц в WordPress 
0  PHP Уведомление: undefined Holvil: stdclass: 
0  Вставить арабский с помощью PDO не работает 
1  Транзакции mysql и php 
13  Отфильтровать номера в строке в PHP 
0  Ограничение результатов Flickr API, чтобы избежать дублирования фотографий от пользователя? 
5  Экспорт SVG в PDF в автономном TideSDK WebApp 
1  PHP: профилированный код и строгая среда ~ улучшение моего кодирования 
1  Разбор XML-документа с PHP с использованием петли «Foreach» 
1  Yii с расширением загрузки, псевдоним «Bootstrap.widgets.tbnavbar» недействителен. Убедитесь, что он указывает на существующий файл PHP 
1  Symfony 3.4.3 - Контейнер обслуживания: Ошибка требует, чтобы вы предоставляете значение для 
1  Как мне позвонить сценарий Perl с моим контроллером Symfony2? 
0  Файл не загружается в Интернете (офлайн / локальные работы) 
0  Почему мой счет на массиве хранится в переменной сессии удваивает? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.