I am the process of writing an update script, which pulls the latest version of a number of repositories, and rebuilds the projects. I wanted to make the build conditional, so I tried
hg pull -u && ant clean build
and the variation
hg pull; hg update && ant clean build
However, the ant build is always invoked, even when nothing has changed. I know that I can use hg incoming
to check for changes before doing the pull, but this feels wasteful to me.
How can I check for new changes, without having to contact the server twice (once for hg incoming
, once for hg pull
)?
UPDATE: This is my build script now:
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 )
And for people wondering why I do a clean build every time, there are two reasons for that:
- The repositories depend on each other, and when the API in one of them changes, I need to do a full rebuild to find places where these API changes break code
- The Java compiler inlines constants, also from other class files. Now, when I change a constant in a class back to a field that can change, all other class files using that constant remain untouched by a build, and this can lead to subtle bugs that I want to avoid.