【问题标题】:Using version control (SVN, CVS, etc) keywords for program logic对程序逻辑使用版本控制(SVN、CVS 等)关键字
【发布时间】:2009-10-14 23:08:39
【问题描述】:

现在在几个项目中,我使用 SVN 关键字来检索有关某些核心文件版本的一些信息。像这样的东西(PHP):

$revision = '$Revision: 1254 $'; // automatically updated each commit
$revision = preg_replace("/[^0-9]/", "");

echo "This file is at revision #" . $revision;

然而,我突然想到,通过检查$URL$ 关键字输出,我可以判断当前文件是否在标签、分支或主干上,并对程序应用不同的逻辑,例如,增加缓存时间,等等

$svnURL = '$URL: path/to/repo/tags/1.0.1/folder/file.txt $';
if (strpos($svnURL, "/tags/") !== false) {
    echo "Tagged version!";
}

这是急剧转向 WTF 领域,还是您认为这种做法可以接受?

【问题讨论】:

    标签: svn version-control cvs


    【解决方案1】:

    嗯,就我而言,这正在转向 WTF 世界。

    最好将这些东西配置为应用程序中一般位置的环境变量。

    【讨论】:

      【解决方案2】:

      在我看来,使用 SVN 关键字来影响程序逻辑有点晦涩难懂。我不觉得它符合病态的条件,但肯定需要一些解释性的 cmets。

      此外,在您的示例中,您只需回显相当于版本信息的内容。我从您写的内容中得知,您实际上打算减少标记版本的缓存时间。由于这有助于调试并且特定于您的内部实践,我可以理解您为什么要这样做。

      【讨论】:

      • 实际上,我会在标记版本上增加缓存,因为希望它已经过测试,并且可以提高性能。感谢 cmets。
      • 哦。在那种情况下,我的意见改变了,我认为这是一个非常糟糕的主意。假设您发现增加缓存值会导致用户体验出现问题?现在您必须更改源代码才能更正此问题。我只允许您询问的技术是否控制特定于调试的代码 - 绝不允许特定于发布的代码。抱歉,我没有明白你在做什么——在第一次阅读时,我以为你在做一些特定于 un 发布的版本的事情。
      • 好吧,你也可以这样做 - 但有什么区别?
      • 不同之处在于:如果您使用您提到的方法来制定仅调试代码,则发布版本可能会回退到缓存时间的其他方法。我假设 PHP 提供了一些正常的方法来调整缓存时间,而不是在您的源代码中,我不知道。如果该假设是正确的,那么不同之处在于,由于 SVN 变量与发布代码仍然从 PHP 默认设置中获取值,因此异常代码会覆盖该设置。
      【解决方案3】:

      这是一个非常糟糕的主意,IMO。如果您需要配置管理,请使用配置文件和条件。不要依赖源代码控制系统进行配置管理。

      【讨论】:

        【解决方案4】:

        不是个好主意。实现这一点的更好方法是将版本/内部版本号分配为持续集成或构建过程的一部分。这可以在 .Net 中通过在构建之前更改 AssemblyInfo.cs 文件来完成。

        【讨论】:

          【解决方案5】:

          我认为这是不可接受的,因为您将来可能会迁移到不同的源代码控制系统,因此这个纸牌屋会崩溃。它会以一种 (a) 难以检测到 (b) 难以修复的方式崩溃。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-11-22
            • 2014-03-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多