Bash条件取决于文件自上次拉取后是否已更改

时间:2013-11-07 08:43:07

标签: bash mercurial

我正在编写一个脚本来自动更新我们的系统。基本上我想从远程hg存储库进行拉取和更新,然后运行一些更新脚本。现在问题是这些更新脚本需要一段时间才能运行,并且只有在配置发生变化时才需要运行它们。

现在我的脚本如下所示:

if hg pull -u
  then
    run scripts
fi

我想要的是像

if hg pull -u && 'some changes was introduces in my/configuration/directory/*'
   then
      run scripts
fi

知道怎么做吗?

3 个答案:

答案 0 :(得分:1)

您可以使用hg status获取修订版之间已更改的文件列表,例如tip及其父级tip^之间修改的文件{{1 }}:

my\configuration\directory

我建议hg status my\configuration\directory\** -m --rev "tip^:tip" ,检查这些文件是否已从当前revset pull更改,然后在配置更改后运行脚本。对我来说,看起来比试图存储你开始使用的revset更容易,并在更新后弄明白。 (请注意,我对bash / grep不太好,所以这是近似的,未经测试):

update

答案 1 :(得分:1)

使用hg incoming的模板化输出,您可以在拉动之前检查,哪些文件将在拉动时修改(如果有的话)并将采取相应的行动

hg incoming --template "{files % '{file}\n'}" | grep SOMESTRING

答案 2 :(得分:1)

您可以使用status命令获取已更改文件的列表 - 也可以在不同的修订版之间:

HERE=`hg log --template '{node}' -r.`
hg pull -u
if hg st --rev $HERE:. | grep -q .
then
  run scripts
fi