2012-03-05 8 views
6

So come specificare quali hook vengono eseguiti quando. Quello che voglio sapere è se è possibile passare la configurazione nel gancio tramite il file hgrc. Le estensioni possono farlo, ad es.Posso configurare ganci mercurial come alcune estensioni sono configurate nel file hgrc?

[extensions] 
someextension = something 

[someextension] 
some.config = 1 
some.other.config = True 

Voglio essere in grado di fare qualcosa di simile per i ganci, ad es.

[hooks] 
changegroup.mail_someone = python:something 

[changegroup.mail_someone] 
to_address = [email protected] 

È possibile qualcosa del genere? Cercare un modo per farlo non ha rivelato nulla di utile ... Se è possibile, come faccio a leggere nella configurazione nel mio gestore di hook (in-process Python)?

risposta

6

Permettetemi di rispondere per entrambi i tipi di ganci:

  • Un hook userebbero ui.config and the related methods per leggere i valori di configurazione:

    address = ui.config('changegroup.mail_someone', 'to_address') 
    

    È inoltre possibile utilizzare ui.configbool e ui.configlist a leggi i booleani e le liste, rispettivamente.

  • Un hook esterno possono utilizzare hg showconfig per estrarre il valore di configurazione:

    $ hg showconfig changegroup.mail_someone.to_address 
    

    che restituirà [email protected] su stdout. È possibile utilizzare

    $ hg showconfig changegroup.mail_someone 
    

    per visualizzare tutte le impostazioni in quella particolare sezione.

+0

Grazie. È utile. Presumibilmente, puoi accedere a questo quasi allo stesso modo con un hook interno facendo 'os.popen ('hg showconfig mail_someone.to_address')'? – Spycho

+0

@Spycho: certo, puoi farlo. Ma per un hook interno hai già un oggetto 'ui' e quindi puoi chiamare' ui.config ('mail_someone', 'to_address') 'direttamente. –

+0

ah, fantastico. È più semplice. Ho pensato di leggere da qualche parte che i metodi mercuriali interni che puoi ottenere tramite i parametri ui e repo non dovrebbero essere usati perché possono interrompersi senza preavviso? Non è questo che http://mercurial.selenic.com/wiki/MercurialApi tratta? Oppure questo non è considerato parte dell '"API interna di Mercurial"? – Spycho