【问题标题】:Overriding "@package_version@" in PHPUnit output when installing from Git repo从 Git 存储库安装时覆盖 PHPUnit 输出中的“@package_version@”
【发布时间】:2012-09-29 21:28:12
【问题描述】:

我按照this blog post 中的说明通过git submodule add 将PHPUnit 添加到项目中。一切都运行良好,除了每次执行顶部的输出如下所示:

Sebastian Bergmann 的 PHPUnit @package_version@。

看起来 PEAR 在其安装过程中用版本号替换了该值,这对我没有多大帮助,因为我使用 Git 来安装文件。

有没有人遇到过这个问题,你是如何解决/解决这个问题的?

【问题讨论】:

  • PEAR 怎么了?它是安装 PHPUnit 的首选和(同时)唯一官方支持的方式。
  • @KingCrunch 没有人说 PEAR 有什么问题。我更喜欢将外部依赖项与我的项目捆绑在一起,这样我就可以控制它部署的版本(可以在svn:externals 的文档中找到很好的理由)。如果我可以让构建脚本触发 PEAR 将特定版本的 PHPUnit 安装到项目的子目录中(即,不破坏用户可能已经安装的任何现有版本),那么我绝对感兴趣。
  • 如果您想从例如 NetBeans 的 Git 运行最新版本,这也很有帮助。它窒息是因为它无法确认 PHPUnit 版本,而不仅仅是运行并希望获得最好的结果。 :(

标签: php git phpunit


【解决方案1】:

您很好地回答了问题中的所有内容。这不是错误,而是一个特性 - 字符串 @package_version@ ​​是一个占位符,在通过 PEAR 安装软件包时会被替换。

由于您使用的是用于开发的版本(来自 GitHub 的 repo 克隆),因此您应该为此类问题做好准备。

如果您想要某个特定版本,请通过 PEAR 安装此特定版本。

我可以想到一些结帐后挂钩,可以用修订版 sha1 哈希替换字符串,但这并没有多大用处。

所以,一句话——就是这样设计的。

【讨论】:

    【解决方案2】:

    看起来不再需要了。来自PHPUnit 3.7.1's changelog

    现在在 Composer 安装或 Git 检出中使用 PHPUnit 时会显示版本号。

    【讨论】:

      【解决方案3】:

      碰巧的是,我正在处理的项目将通过 PEAR 分发,因此我将在 package.xml 文件中将 PHPUnit 列为依赖项。这也将允许用户灵活地选择她想使用哪个版本的 PHPUnit 来运行她的测试。

      【讨论】:

        【解决方案4】:

        这是我的解决方法,是的,它不是超级干净;)

        我已经编辑了我的phpunit文件,别忘了用你自己的路径替换:

        #!/usr/bin/env php
        <?php
        while (substr(getcwd(), -3) != "Project_Folder") chdir('../');
        if (in_array('--version', $argv)) {
            echo 'PHPUnit 3.6.0 by Sebastian Bergmann.';
            return;
        }
        // set main method
        define('PHPUnit_MAIN_METHOD','PHPUnit_TextUI_Command::main');
        
        // add phpunit to the include path
        $paths = scandir('./var/lib/phpunit');
        $includes = array();
        
        foreach($paths as $path){
            if (!preg_match('/^\./', $path)){
                $includes[] = './var/lib/phpunit/' . $path;
            }
        }
        set_include_path(implode(PATH_SEPARATOR,$includes).PATH_SEPARATOR.get_include_path());
        
        // set the auto loader
        require 'PHPUnit/Autoload.php';
        // execute
        PHPUnit_TextUI_Command::main();
        

        【讨论】:

          猜你喜欢
          • 2017-05-27
          • 1970-01-01
          • 2011-09-12
          • 2014-05-07
          • 1970-01-01
          • 2011-10-06
          • 2019-08-24
          • 1970-01-01
          相关资源
          最近更新 更多