2009-09-12 9 views
5

Ho un piccolo progetto di codice Google privato. Per un SCM uso Mercurial. E per la build locale mi piacerebbe usare nant.Come usare mercurial da nant

Quindi, fondamentalmente:

  1. Vorrei scaricare i file sorgente da un repository Mercurial noto utilizzando un compito Nant
  2. vorrei ottenere in qualche modo il numero di revisione del repository in modo che possa assemblare un bel po 'di numero di versione di montaggio

Lo script di build non verrà utilizzato per l'integrazione continua, ma solo per nightly build e la produzione costruisce.

Grazie per l'aiuto

risposta

4

Non so Nant, ma in (reale) formica, dobbiamo solo utilizzare l'attività <exec> per invocare il binario hg. A seconda del clean che desideri avviare, puoi eseguire clone o solo pull ed eseguire hg id -i per ottenere il numero di revisione in modo pulito. Un'altra cosa da considerare è l'utilizzo dei link di archivio sull'interfaccia web remota (essenzialmente il comando hg archive via HTTP) e basta usare wget (non l'equivalente attività nant) per tirare giù l'archivio tip, che ha un link semplice e coerente, e quindi è possibile ottenere l'id di revisione dall'interno del file hg_archival.txt dell'archivio.

+0

Ciò funzionerebbe ma allo stesso tempo implicherebbe che l'utente finale dello script debba avere installato mercurial localmente. Speravo onestamente che fossero disponibili alcune estensioni di taks – Dejan

+0

Non penso che troverai alcun codice non mercuriale che attualmente parla il protocollo del filo mercuriale, ed è in python. Quindi potresti provare a eseguirlo in IronPython, ma a quel punto stai parlando di tanto lavoro quanto di un'installazione mercuriale. Scriverò di nuovo la mia soln basata su get in una risposta separata. –

2

Dal momento che siete alla ricerca di codice NANT piuttosto che chiamare fuori al binario mercuriale, io suggerirei usando solo il compito di Nant <get> di abbattere la punta del pronti contro termine in questo modo:

<get src="http://bitbucket.org/tortoisehg/stable/get/tip.zip" dest="latest.zip" /> 
<unzip zipfile="latest.zip" todir="latest"/> 

e dentro ci dovrebbe essere un file .hg_archival.txt che contiene qualcosa di simile:

repo: bac32db38e52fd49acb62b94730a55f4f4b0cdee 
node: 61482ea34fd0b9650e738eaebb2fe352c2f6315a 

da cui è possibile ottenere un Hashid adatto per l'uso nel branding una generazione.

Purtroppo, non trovo i link di download dell'archivio su google code, ma sono piuttosto standard nelle interfacce web mercurial (e bitbucket), quindi immagino che siano da qualche parte.

0

Mentre questo non sarebbe stato applicabile alla persona che ha originariamente posto la domanda, avevo bisogno di fare qualcosa di simile ... ma avevo bisogno della revisione numerica (sì, so che il numero è specifico del repository, ma nel contesto in cui lo script si stava abituando andava bene). Inoltre non ho avuto problemi con la chiamata a hg.exe, perché ovunque questo potrebbe essere eseguito da hg.exe è disponibile.

Lo script NAnt fine ho finito con era questo:

<exec program="hg.exe" output="CurrentMercurialRevision.txt"> 
    <arg value="id" /> 
    <arg value="-n" /> 
</exec> 
<loadfile file="CurrentMercurialRevision.txt" property="buildNumber" /> 

Purtroppo, ci non sembra essere un modo in NUnit per leggere direttamente in una proprietà, quindi ho dovuto utilizzare il testo intermedio file ed elaborarlo in una proprietà usando loadfile. Ho anche dovuto aggiungere "CurrentMercurialRevision.txt" al file .hgignore ... ma se hai familiarità con Mercurial probabilmente lo avevi già indovinato. ;-)

Speriamo che questo aiuti qualcuno.

+1

Mi sono imbattuto in questo thread durante la ricerca di una delle mie domande. C'è una bella community di msbuild scritta appositamente per "Mercurial" [qui] (http://msbuildhg.codeplex.com/). Usando questo non è necessario utilizzare alcun file intermedio per questa attività. –