Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash基于自上次拉取后文件是否已更改而设置条件_Bash_Mercurial - Fatal编程技术网

Bash基于自上次拉取后文件是否已更改而设置条件

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

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

你知道怎么做吗?

你可以使用
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