2009-11-23 15 views
16

Ho più repository mercurial e ho usato hg clone per creare i backup di questi sul nostro file server. Ora voglio scrivere un file batch che li aggiorna una volta al giorno eseguendo hg pull -u in ogni sottodirectory.hg pull funziona solo sulla directory di lavoro corrente?

Voglio mantenere questo script di backup il più generico possibile, quindi dovrebbe aggiornare tutti i repository di backup memorizzati nella cartella H: \ BACKUPS \ REPOS. Questo è il mio hgbackup.bat che viene memorizzato nella stessa cartella:

for /f "delims=" %%i in ('dir /ad/b') do hg pull -u

Il problema: hg pull sembra solo operare sulla directory di lavoro corrente, non sembra esserci alcuna opzione per specificare il repository di destinazione per il tiro. Siccome odio Windows Batch Scripting, voglio mantenere il mio .bat il più semplice possibile ed evitare di andare in cd alle diverse directory.

Qualche idea su come eseguire hg pull -u in una directory diversa?

+0

Se lo stai archiviando come backup, perché '-u'pdate on pull? Aumenta in modo ridondante la quantità di dati che stai memorizzando –

risposta

32

Utilizzare la -R -switch:

hg pull -u -R /path/to/repository 

Vedi hg -v help pull per tutte le opzioni della riga di comando di hg pull (l'interruttore -v dice aiutano a comprendere le opzioni globali).

+1

grazie per l'aiuto! Sì, mi sono imbattuto nell'opzione -R, ma ho pensato che avrebbe specificato il repository da cui attingere. – fbuchinger

+3

Grazie! Come chiarimento per altri googler, l'opzione -R è un'opzione globale per eseguire qualsiasi comando hg su una directory diversa dalla directory corrente. L'ho usato per estrarre le modifiche da un commit in un repository in un repository correlato: 'hg log -pr 9369 -R ../other-repo | patch -p1'. Se non hai patch, 'hg import --no-commit' è simile. – undefined

0

Trovato questa domanda un po 'più tardi a causa di uno script su cui stavo lavorando per il mio computer, e piuttosto che uno script batch, l'ho fatto in PowerShell (dato che hai accennato su un server, ho pensato che PS fosse disponibile). Gestisce entrambi i repository di Subversion e Mercurial:

$path = "c:\users\mattgwagner\Documents\Code" 

foreach($fi in get-childitem $path) 
{ 
    if(test-path $path\$fi\.svn) 
    { 
     "Updating " + $fi + " via Subversion..." 
     svn update $path\$fi 
    } 
    elseif(test-path $path\$fi\.hg) 
    { 
     "Updating " + $fi + " via Mercurial..." 
     hg pull -u -R $path\$fi 
    } 
} 
Problemi correlati