2013-01-31 15 views
5

kanca precommit ile taahhüt izin verin. Bu sadece bir istisna ile mükemmel çalışır. Ünite test (PHPUnit) dosyaları, tüm statik ünite test fonksiyonlarında mevcut olan bootstrap sınıfımdan geliyor, fakat aynı zamanda bootstrap sınıfı tanımının üstünde hata mesajlarını da mümkün kılıyor. Bu işlemeye çalışırken bir sınıf tanımını içeren bir dosyada bir sınıf veya işlev değil koduna sahip olamaz çünküSVN taahhüt edememek önce benim kod standardı (PSR2) doğrulamak için mevcut PreCommit kanca ben SVN kullanıyorum uyarıları

PSR2 standart, bir uyarı verecektir.

Kimse bu hatayı codeniffer kodumda veya kodumu geçerli hale getirmenin bir yolu var mı (kodumu, bootstrap sınıfının her statik işlevinde hata iletilerimi etkinleştirmek için kullanmadan)?

<?php 
namespace AlbumTest; 

use Zend\Loader\AutoloaderFactory; 
use Zend\Mvc\Service\ServiceManagerConfig; 
use Zend\ServiceManager\ServiceManager; 
use Zend\Stdlib\ArrayUtils; 
use RuntimeException; 

error_reporting(E_ALL | E_STRICT); 
chdir(__DIR__); 

class Bootstrap 
{ 
    protected static $serviceManager; 
    protected static $config; 
    protected static $bootstrap; 

    public static function init() 
    { 
     // Load the user-defined test configuration file, if it exists; otherwise, load 
     if (is_readable(__DIR__ . '/TestConfig.php')) { 
      $testConfig = include __DIR__ . '/TestConfig.php'; 
     } else { 
      $testConfig = include __DIR__ . '/TestConfig.php.dist'; 
     } 

     $zf2ModulePaths = array(); 

     if (isset($testConfig['module_listener_options']['module_paths'])) { 
      $modulePaths = $testConfig['module_listener_options']['module_paths']; 
      foreach ($modulePaths as $modulePath) { 
       if (($path = static::findParentPath($modulePath))) { 
        $zf2ModulePaths[] = $path; 
       } 
      } 
     } 

     $zf2ModulePaths = implode(PATH_SEPARATOR, $zf2ModulePaths) . PATH_SEPARATOR; 
     $zf2ModulePaths .= getenv('ZF2_MODULES_TEST_PATHS') ?: (defined('ZF2_MODULES_TEST_PATHS') 
                  ? ZF2_MODULES_TEST_PATHS : ''); 

     static::initAutoloader(); 

     // use ModuleManager to load this module and it's dependencies 
     $baseConfig = array(
      'module_listener_options' => array(
       'module_paths' => explode(PATH_SEPARATOR, $zf2ModulePaths), 
      ), 
     ); 

     $config = ArrayUtils::merge($baseConfig, $testConfig); 

     $serviceManager = new ServiceManager(new ServiceManagerConfig()); 
     $serviceManager->setService('ApplicationConfig', $config); 
     $serviceManager->get('ModuleManager')->loadModules(); 

     static::$serviceManager = $serviceManager; 
     static::$config = $config; 
    } 

    public static function getServiceManager() 
    { 
     return static::$serviceManager; 
    } 

    public static function getConfig() 
    { 
     return static::$config; 
    } 

    protected static function initAutoloader() 
    { 
     $vendorPath = static::findParentPath('vendor'); 

     if (is_readable($vendorPath . '/autoload.php')) { 
      $loader = include $vendorPath . '/autoload.php'; 
     } else { 
      $zf2Path = getenv('ZF2_PATH') ?: (defined('ZF2_PATH') 
              ? ZF2_PATH : (is_dir($vendorPath . '/ZF2/library') 
              ? $vendorPath . '/ZF2/library' : false)); 

      if (!$zf2Path) { 
       throw new RuntimeException(
        'Unable to load ZF2. Run `php composer.phar install` or define a ZF2_PATH environment variable.' 
       ); 
      } 

      include $zf2Path . '/Zend/Loader/AutoloaderFactory.php'; 

     } 

     AutoloaderFactory::factory(
      array(
       'Zend\Loader\StandardAutoloader' => array(
        'autoregister_zf' => true, 
        'namespaces' => array(
         __NAMESPACE__ => __DIR__ . '/' . __NAMESPACE__, 
        ), 
       ), 
      ) 
     ); 
    } 

    protected static function findParentPath($path) 
    { 
     $dir = __DIR__; 
     $previousDir = '.'; 
     while (!is_dir($dir . '/' . $path)) { 
      $dir = dirname($dir); 
      if ($previousDir === $dir) { 
       return false; 
      } 
      $previousDir = $dir; 
     } 
     return $dir . '/' . $path; 
    } 
} 

Bootstrap::init(); 

cevap

0

Nasıl sevdiği precommit-kanca görünüyor:

İşte dosya? Codesniffer'a göndermeden önce dinamik olarak ilk birkaç satırı kaldırabilir misiniz? Başka bir çözüm sizin bootstrap

+0

işlemekle ne zaman önceden taahhüt kanca basitçe PSR-2 kurallar için benim kodu kontrol init reportingi ayarlamak olacaktır. Çıkarma hatları tuhaf, ama bu işlev için çalışacak benim init raporlama hatayı koymak ... Bu fikrin lütfen ortaya, ama ben de diğer tüm fonksiyonlara kopyalamak zorunda kalacak olacaktır. Ve bu aradığım çözüm değil. – Sander

+0

Kod Sniffer'ınız verileri nasıl alır? Stdin'den okunması mümkün mü, ilk dosyaları silmek geçici dosyalar oluşturmadan anında yapılabilir mi? –

İlgili konular