我是编写更新脚本的过程,该脚本提取了许多存储库的最新版本,并重建了项目。我想让构建有条件,所以我尝试了
hg pull -u && ant clean build
和变化
hg pull; hg update && ant clean build
但是,即使没有任何更改,也始终会调用ant构建。我知道我可以在执行拉动之前使用hg incoming
检查更改,但这对我来说是浪费。
如何检查新的更改,而无需联系服务器两次(hg incoming
一次,hg pull
一次)?
更新:这是我的构建脚本:
update() {
TIP=$(hg tip --template "{node"})
hg pull -u
if test "$TIP" != $(hg tip --template "{node}"); then
ant clean build
fi
}
(cd repo1; update )
(cd repo2; update )
对于那些想知道为什么我每次都做一个干净的构建的人来说,有两个原因:
答案 0 :(得分:9)
您不应该只运行hg incoming
两次,因为它实际上下载所有变更集两次。这是因为您不能只是偷看远程存储库而不运行完整的hg pull
。
因此,将传入的变更集保存在捆绑中并从中拉出:
hg incoming --bundle incoming.hg && hg pull --update incoming.hg && echo "Go!"
hg incoming
命令充当以下命令的保护:&&
正在短路,因此返回非零退出代码的第一个命令将使整个构造失败并返回该退出码。这意味着当hg pull
表示没有任何内容可以提取时,hg incoming
及以下任何命令都不会被执行。
答案 1 :(得分:3)
跟进@Adam
来自hg help incoming
对于远程存储库,使用--bundle可以避免在传入后跟拉动时两次下载变更集。
...
如果有传入更改,则返回0,否则返回1.