2010-03-29 12 views
8

मैं PHP कोडसिंफर के साथ अपने रिमोट गिट भंडार में किए गए कोड को देखना चाहता हूं और यदि कोई समस्या कोड मानकों को अस्वीकार कर देता है तो इसे अस्वीकार कर दें। क्या किसी के पास गिट रिमोट रिपोजिटरी पर इसका उपयोग करने का उदाहरण है या उदाहरण के लिए प्री-प्राप्त हुक के साथ इसका उपयोग कैसे करें? धन्यवाद।गिट प्री-हुक प्राप्त करने के लिए हुक प्री-हिप प्राप्त करें PHP CodeSniffer

उत्तर

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); 

आप कार्यकारी लाइन कार्यकारी संपादित करने के लिए होगा ('php -l ... अपने codesniffer को इंगित करने के । स्थापना

+0

दुर्भाग्य से यह के साथ पहले से प्राप्त हुक :( – Ralphz

+0

Nop, तो आपको काम नहीं करता है क्लाइंट की तरफ एक पूर्व प्रतिबद्ध बनाने के लिए है, लेकिन आप ट्रैक कर सकते हैं हुक ताकि प्रत्येक डेवलपर्स को हुक खींचना पड़ेगा। AFAIK, आप सर्वर दबाते समय सामग्री का परीक्षण नहीं कर सकते ... :( – FMaz008

3

मैं समाधान :)

पाया इससे इस बीमारी प्राप्त हुक के लिए अवधारणा कोड :) का सबूत है ठीक है:

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

यह उदाहरण कोड केवल दूरस्थ भंडार द्वारा प्राप्त ब्लॉब्स प्रिंट करेगा, लेकिन किसी को ऐसा कुछ करने की आवश्यकता है (मुझे आशा है)।

आप कुछ अस्थायी फ़ाइल रन जो कुछ भी आप इस फाइल पर की जरूरत है फ़ाइल और इतने पर हटाना में हर ब्लॉब डाल सकते हैं ...

+0

धन्यवाद, इससे बहुत मदद मिली –

2

मैं एक पूर्व प्राप्त Git हुक विकसित PHP, जावास्क्रिप्ट और सीएसएस फ़ाइलों के कोड स्टाइल की जांच करने के लिए PHPCodeSniffer पर आधारित है।

मेरे स्क्रिप्ट Github से उपलब्ध है: https://github.com/blueicefield/PHP_CodeSniffer_GIT_Hook

+0

क्या आप अपना उत्तर किसी उदाहरण के साथ बढ़ा सकते हैं? ऊपर दिए गए उत्तर में बैश उदाहरण की तरह? तो यह अकेले उत्तर से कैसे उपयोग किया जाए? – hakre

संबंधित मुद्दे