3

出于某种原因,我看了看,/usr/bin/hg看到了一段奇怪的代码:

libdir = '@LIBDIR@'

if libdir != '@' 'LIBDIR' '@':
    ...

if 语句看起来像重言式/矛盾,在 Python 中'@LIBDIR@'应该总是相等'@' 'LIBDIR' '@',所以代码永远不会运行。在什么条件下会'@LIBDIR@'变成别的东西?

4

2 回答 2

3

我对 Mercurial本身并不熟悉,但对我@LIBDIR@来说,很明显它打算通过自动搜索和替换来替换为其他字符串,例如在安装脚本中。该if语句检查这实际上是否已经完成:搜索不会找到@LIBDIR@'@' 'LIBDIR' '@'因此这是一种将变量的值与其原始占位符值if进行比较的方法,而不会触发语句中占位符的替换。

换句话说,该if语句是在询问“如果在安装时指定了库路径,则对其进行验证并将其添加到 Python 模块搜索路径中”。

我个人会将这些信息放在配置文件中,因为这对用户来说更容易编辑并且不太可能被更新破坏,但看起来 Mercurial 正在使用源代码修改方法进行配置。

于 2013-10-28T22:27:01.370 回答
2

提交消息

setup/hg:总是从安装位置加载 Mercurial。

这提供了两个新功能:

  • Mercurial 可以安装到非标准位置,而无需设置 PYTHONPATH。
  • 多个安装可以从不同的位置使用 Mercurial。

我想你可以给 Dan 发电子邮件以获得更详细的答案

于 2013-10-28T21:38:28.837 回答