Mercurial条件%include?

Mercurial条件%include?,mercurial,hgrc,Mercurial,Hgrc,我希望项目的父目录包含一个hgrc文件,该文件夹中的repo从中继承,例如 ~/work/ ~/work/hgrc ~/work/project1/ ~/work/project2/ ~/personal/hgrc ~/personal/project1 ~/personal/project2 ~/personal/project3 工作中的任何项目都应该继承自work/hgrc,个人中的任何项目都应该继承自personal/hgrc。我想在~/.hgrc中添加一个脚本,在克隆时搜索父目录中的

我希望项目的父目录包含一个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%的时间考虑,但仍然…

把:

%include ../hgrc
每个回购协议的内部。hg/hgrc?您甚至可以自动执行此操作,但将其放入您的系统范围
/etc/mercurial/hgrc

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

我还没有测试过那个钩子

根据@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

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

如果它不起作用,我将调整它,但它看起来基本上是正确的,但是,如果../hgrc不存在,我如何防止它添加include(或者
%包含不存在的文件是否安全?)。我将等待一段时间,寻找一种在不改变hgrc文件的情况下实现这一点的方法(这样它可以处理创建一个较低的hgrc,如果它还不存在的话),但是如果我在一周左右没有听到任何消息,我会将你的消息标记为答案;然后回显“%include../hgrc'>>.hg/hgrc
,但我需要能够指向克隆目录的名称。也就是说,如果我运行
hg clone proj1 proj2
,我需要用
proj2/
@Jonathan预先编写
.hg/hgrc
:尝试一下环境变量,它提供克隆源,如果显式地给
clone
命令,则提供其目标。此信息应足以获取所需的目标前缀。如果文件不存在,则创建该文件的常用习惯用法为:
touch../hgrc;回声“%include../hgrc'>>.hg/hgrc
。但是,如果您缺少对父目录的写访问权限,则会出现异常。如果您改用
更新
挂钩,则您将已经位于正确的目录中。