Bash基于自上次拉取后文件是否已更改而设置条件
我正在写一个脚本来自动更新我们的系统。基本上,我想从远程hg存储库进行拉取和更新,然后运行一些更新脚本。现在的问题是,这些更新脚本需要一段时间才能运行,并且大多数脚本只有在配置发生更改时才需要运行 现在,我的脚本如下所示:Bash基于自上次拉取后文件是否已更改而设置条件,bash,mercurial,Bash,Mercurial,我正在写一个脚本来自动更新我们的系统。基本上,我想从远程hg存储库进行拉取和更新,然后运行一些更新脚本。现在的问题是,这些更新脚本需要一段时间才能运行,并且大多数脚本只有在配置发生更改时才需要运行 现在,我的脚本如下所示: if hg pull -u then run scripts fi 我想要的是 if hg pull -u && 'some changes was introduces in my/configuration/directory/*' t
if hg pull -u
then
run scripts
fi
我想要的是
if hg pull -u && 'some changes was introduces in my/configuration/directory/*'
then
run scripts
fi
你知道怎么做吗?你可以使用
hg status
来获取在修订之间更改的文件列表,例如在tip
和my\configuration\directory
中的父目录(tip^
)之间修改的文件:
hg status my\configuration\directory\** -m --rev "tip^:tip"
我建议pull
,检查这些文件是否已从当前revset更改,update
,如果配置已更改,则运行脚本。对我来说,这看起来比尝试存储您开始使用的revset并在更新后找出它更容易。(请注意,我对bash/grep不太熟悉,因此这是一个近似值,未经测试):
使用
hg incoming
的模板输出,您可以在拉取之前检查哪些文件将在拉取时被修改(如果有),并相应地执行操作
hg incoming--template“{files%'{file}\n'}”grep SOMESTRING
您可以使用status命令获取已更改文件的列表--也可以在不同版本之间:
HERE=`hg log --template '{node}' -r.`
hg pull -u
if hg st --rev $HERE:. | grep -q .
then
run scripts
fi
HERE=`hg log --template '{node}' -r.`
hg pull -u
if hg st --rev $HERE:. | grep -q .
then
run scripts
fi