Мерзавец предварительно получает рычаг для запуска [закрытого] PHP CodeSniffer

8
задан hakre 10 June 2012 в 15:01
поделиться

3 ответа

Может быть, это укажет вам правильное направление: (Оригинал из: http://www.squatlabs.de/versionierung/arbeiten-git-hooks на немецком языке)

#!/usr/bin/php
<?php

$output = array();
$rc     = 0;
exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc);
if ($rc == 0)  $against = 'HEAD';
else           $against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';

exec('git diff-index --cached --name-only '. $against, $output);

$needle            = '/(\.php|\.module|\.install)$/';
$exit_status = 0;

foreach ($output as $file) {
        if (!preg_match($needle, $file)) {
                // only check php files
                continue;
        }

        $lint_output = array();
        $rc              = 0;
        exec('php -l '. escapeshellarg($file), $lint_output, $rc);
        if ($rc == 0) {
                continue;
        }
        # echo implode("\n", $lint_output), "\n";
        $exit_status = 1;
}

exit($exit_status);

Вам придется отредактировать строка exec exec ('php -l ... чтобы указать на вашу установку codeniffer.

3
ответ дан 5 December 2019 в 17:35
поделиться

Хорошо, я нашел решение :)

Это доказательство концептуального кода :) для ловушки pre-receive:

#!/bin/bash

while read old_sha1 new_sha1 refname; do
    echo "ns: " $new_sha1;
    echo "os: " $old_sha1;

    echo "----"

    git ls-tree -r $new_sha1 | cut -f 3 -d ' ' | cut -f 1 | while read file; do
        git cat-file blob $file
    done; 

    echo "----"

done

exit 1

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

Вы можете поместить каждый большой двоичный объект в какой-либо временный файл, запустить все, что вам нужно в этом файле, удалить файл и так далее ...

3
ответ дан 5 December 2019 в 17:35
поделиться
2
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: