Jestem w trakcie pisania skryptu aktualizacji, który ściąga najnowszą wersję wielu repozytoriów i odbudowuje projekty. Chciałem zrobić kompilacja warunkowa, więc próbowałemMercurial: sprawdź, czy ostatnie ciągnięcie/aktualizacja wprowadziło zmiany
hg pull -u && ant clean build
i zmienność
hg pull; hg update && ant clean build
Jednak ant build jest wywoływana zawsze, nawet wtedy, gdy nic się nie zmieniło. Wiem, że mogę użyć hg incoming
, aby sprawdzić zmiany przed wykonaniem polecenia pull, ale wydaje mi się to marnotrawstwem.
Jak mogę sprawdzić nowe zmiany, bez konieczności kontaktowania się z serwerem dwa razy (raz na hg incoming
, raz hg pull
)?
UPDATE: To jest mój build skrypt teraz:
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)
i dla ludzi, zastanawiając się, dlaczego robię czystą kompilację za każdym razem, istnieją dwa powody:
- repozytoriów zależą od siebie nawzajem, a gdy API w jednym z nich ulegnie zmianie, muszę wykonać pełną przebudowę, aby znaleźć miejsca, w których zmiany API przełamują kod
- Kompilator Java wstawia stałe, również z inne pliki klas. Teraz, kiedy zmienię stałą w klasie z powrotem na pole, które może się zmienić, wszystkie inne pliki klas używające tej stałej pozostają nietknięte przez kompilację, co może prowadzić do subtelnych błędów, których chcę uniknąć.
Nie powinien być prawidłowy system budowy, czytaj: nie mrówka, być w stanie tworzyć przyrostowe kompilacje? – jmg
mrówka może tworzyć przyrostowe kompilacje, ale chcę uniknąć subtelnych błędów, więc za każdym razem wykonuję czystą kompilację. –
, więc w jaki sposób rozwijanie własnych przyrostowych buildów pomaga uniknąć subtelnych błędów? –