2010-03-16 12 views

risposta

2

Penso che tu abbia ragione che in precommit il messaggio non esiste ancora. se usi pretxncommit lo farà, ma non sono sicuro al 100% di ciò che ti permette di fare in quel momento poiché la transazione è quasi completa.

+0

Si scopre che fa parte della risposta (utilizzando pretxncommit). Pubblicherò una risposta con i dettagli. – davidavr

8

Si scopre ci sono due cose sbagliato con il mio approccio iniziale:

  1. Come jk rilevare, l'evento precommit avviene prima che il commit in modo non esiste i metadati per il commit in lavorazione ancora. Utilizzando invece pretxncommit, i metadati esistono, ma la transazione non è stata ancora inserita nel database.
  2. L'utilizzo di changectx = repo[None] fornisce il contesto di modifica per la directory di lavoro. Ma vogliamo le informazioni per il commit corrente in modo che utilizzando changectx = repo['tip'] invece ci fornisca i metadati più recenti.

Si noti che se si utilizza changectx = repo['tip'] con l'evento precommit, ci troveremo a ottenere l'ultimo commit elaborato, non quella attuale si sta lavorando.

+0

sì, ero un po 'preoccupato per questo dal libro però "Questo hook può accedere ai metadati associati al changeset quasi nuovo, ma non dovrebbe fare nulla di permanente con questi dati. Inoltre non deve modificare la directory di lavoro." –

+2

Questo è il motivo per cui chiedere e rispondere alla propria domanda è incoraggiato su Stack Overflow. Più di un anno dopo, questa risposta mi ha davvero aiutato mentre stavo esaminando la [documentazione molto scarsa] (http://mercurial.selenic.com/wiki/MercurialApi) disponibile per l'API HG. –

Problemi correlati