【问题标题】:Mercurial Conditional %include?Mercurial 条件 %include?
【发布时间】:2011-02-11 17:17:21
【问题描述】:

我希望项目的父目录包含一个 hgrc 文件,该文件夹中的 repo 继承自该文件,例如

~/work/
~/work/hgrc
~/work/project1/
~/work/project2/
~/personal/hgrc
~/personal/project1
~/personal/project2
~/personal/project3

工作中的任何项目都应该继承自work/hgrc,而个人中的任何项目都应该继承自personal/hgrc。我正在考虑向~/.hgrc 添加一个脚本,该脚本在克隆时会搜索父目录中的任何 hgrc 文件,如果它们存在%include 它们,但如果我在克隆它之后在它下面添加一个 hgrc 就很难看不会被包括在内。只有 5% 的时间考虑,但仍然...

【问题讨论】:

    标签: mercurial hgrc


    【解决方案1】:

    怎么样:

    %include ../hgrc
    

    在每个 repo 的 .hg/hgrc 中?您甚至可以自动执行此操作,但将其放入您的系统范围内 /etc/mercurial/hgrc:

    [hooks]
    post-clone = echo '%include ../hgrc' >> .hg/hgrc
    

    我还没有测试过那个钩子。 :)

    【讨论】:

    • 如果它不起作用我会调整它,但它似乎基本上是正确的,但是如果 ../hgrc 不存在(或者它是否安全),我如何防止它添加包含到%include 一个不存在的文件?)这仍然是比使用外部脚本更好的方法。我将坚持一段时间来做这件事,而无需物理更改 hgrc 文件(因此,如果一个不存在的 hgrc 文件,它可以处理创建一个较低的 hgrc),但如果我在一周内没有听到任何消息或者我会把你的标记为答案。
    • 几乎可以使用post-clone = if [ -e "hgrc" ]; then echo '%include ../hgrc' >> .hg/hgrc,但我需要能够直接进入克隆目录的名称。即,如果我运行hg clone proj1 proj2,我需要在.hg/hgrc 前面加上proj2/
    • @Jonathan:尝试使用环境变量HG_PATS,它提供了克隆源和 - 如果明确提供给clone 命令 - 它的目标。这些信息应该足以获得您需要的目标前缀。
    • 如果文件不存在则创建文件的常用习语:touch ../hgrc; echo '%include ../hgrc' >> .hg/hgrc。但是,如果您缺少对父目录的写访问权限,它就会结束。
    • 如果你改用update钩子,那么你已经在正确的目录中了。
    【解决方案2】:

    按照@Ry4an 的建议,这是一个适合我的示例。我将此添加到我的 ~/.hgrc 文件中,以便它可以在任何地方使用。

    [hooks]
    # This hook adds "%include ../.hgrc" to .hg/hgrc if the .hgrc file exists in
    # the top level.  This allows one to store a set of paths for example.
    # See 
    update = if [ -e .hgrc ] && touch .hg/hgrc                                  \
                             && ! grep -q '%include \.\./\.hgrc' .hg/hgrc; then \
               echo '%include ../.hgrc' >> .hg/hgrc;                            \
             fi
    

    如果文件.hgrc 存在于repo 的顶层,则此挂钩将%include ../.hgrc 行添加到.hg/hgrc 文件中。请注意,通过使用 update 钩子,我们绕过了 post-clone 克隆钩子必须尝试从环境变量中找出目标克隆的目录名称的问题。

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 2019-10-24
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      相关资源
      最近更新 更多