1

我正在编写一个用于自动更新我们的系统的脚本。基本上我想从远程 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

知道怎么做吗?

4

3 回答 3

1

您可以使用hg status来获取在修订之间已更改的文件列表,例如在tip和它的 parent( tip^)之间修改的文件my\configuration\directory

hg status my\configuration\directory\** -m  --rev "tip^:tip"

我建议您pull检查这些文件是否已从当前修订集更改,update然后在您的配置发生更改时运行您的脚本。对我来说,这看起来比尝试存储您开始使用的修订集并在更新后弄清楚它更容易。(请注意,我不擅长使用 bash/grep,所以这是近似值且未经测试):

hg pull
cfgChngd = hg status -m my\config\dir\** -m  --rev tip | grep "M my\config\"
hg update
if cfgChngd
    runAllTheScripts
fi
于 2013-11-07T17:05:19.093 回答
1

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

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

于 2013-11-09T05:34:04.573 回答
1

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

HERE=`hg log --template '{node}' -r.`
hg pull -u
if hg st --rev $HERE:. | grep -q .
then
  run scripts
fi
于 2013-11-10T08:58:34.537 回答