2012-01-19 16 views
9

Bir dizi deponun en son sürümünü çeken ve projeleri yeniden başlatan bir güncelleme komut dosyası yazma sürecimdeyim. Ben yapı koşullu yapmak istedi, ben de hiçbir şey değişmedi bile Ancak, ant inşa hep çağrılırMercurial: son çekme/güncellemenin değiştirilip değiştirilmediğini kontrol edin

hg pull; hg update && ant clean build 

hg pull -u && ant clean build 

ve varyasyon çalıştı. Çekme yapmadan önce değişiklikleri kontrol etmek için hg incoming kullanabileceğimi biliyorum, ama bu bana israf ediyor.

I ( hg pull için bir kez, bir kez hg incoming için) iki kez sunucuya bağlanmak zorunda kalmadan, yeni değişiklikleri kontrol edebilirsiniz nasıl

?

GÜNCELLEME: Bu artık benim yapı script:

  1. depoları:
    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) 
    

    Ve temiz bir build her zaman bunu neden bu iki nedeni vardır merak kişiler için

    Birbirine bağlı ve bir tanesi içinde API değiştiğinde, bu API değişikliklerini değiştirir yerlerde bulmak için tam bir yeniden yapmam gerekiyor
  2. Java derleyici aynı zamanda sabit diğer sınıf dosyaları. Şimdi, bir sınıftaki bir değişkeni değişebilen bir alana geri döndürdüğümde, bu sabit kullanan diğer tüm sınıf dosyaları bir yapı tarafından dokunulmadan kalır ve bu, kaçınmak istediğim ince hatalara yol açabilir.
+1

Uygun bir derleme sistemi yapmayın, okuyun: karınca değil, artımlı yapılar yapabilir mi? – jmg

+0

karınca artımlı yapılar yapabilir, ancak ince hatalardan kaçınmak istiyorum, bu yüzden her seferinde temiz bir yapıyorum. –

+1

Bu nedenle, kendi artımsal işlemlerinizin yuvarlanması, ince hataların önlenmesine nasıl yardımcı olur? –

cevap

9

sadece iki kez hg incoming koşmamalı. Bunun nedeni, tam bir hg pull numaralı tam koşulu çalıştırmadan, uzaktan depoda bir göz atma göz alamazsınız.

Yani bir paket içinde gelen changesets kaydedip bunun yerine gelen çekme: gardiyan olarak

hg incoming --bundle incoming.hg && hg pull --update incoming.hg && echo "Go!" 

hg incoming komut eylemleri aşağıdaki komutları: && bir dönüş nedenle ilk komutu devre kısa olduğu Sıfır olmayan çıkış kodu, tüm yapının bu çıkış koduyla başarısız olmasını sağlar. Bu, hg incoming'un çekilecek hiçbir şey olmadığını bildirdiği zaman hg pull ve aşağıdaki komutların hiçbir şekilde çalıştırılmadığı anlamına gelir.

+2

Aslında iki kez gelen arama değildi. Ama gelen değişikliklerin tüm değişiklikleri değiştirdiğinin farkında değildim, bu yüzden gelen ve çeken şeyleri yapmak ikişer kere indiriyor. –

+0

Garip, 'hg pull --update && echo" Go "' her zaman "echo" işlevini yerine getirir, ancak "hg pull --update incoming.hg && echo" Go "' yalnızca yeni değişiklikler yapıldığında. Bunun için bir sebep var mı? –

+0

@AdamHouldsworth: Evet, gelenler ve çekmeler gerçekten aynı şeydir (gelenler sadece değişimleri atar). Belgeler bu konuda çok açık değil, bu yüzden gelen koşmak için ucuz olduğunu düşündüğünüz için suçlanamazsınız. –

3

gelen bir çekme izlerse --bundle iki kez changesets indirirken kaçınır kullanarak, uzaktan depo için hg help incoming

den

Alıntılar @Adam için takip edin. Aksi

...

İade 0 Gelen değişiklik varsa, 1. aslında iki kez sonra tüm changesets indirir beri

İlgili konular