2009-11-23 12 views
16

Tengo varios repositorios mercuriales y utilicé hg clone para crear copias de seguridad de ellos en nuestro servidor de archivos. Ahora quiero escribir un archivo por lotes que los actualice una vez al día ejecutando hg pull -u en cada subdirectorio.¿Hg Pull solo funciona en el directorio de trabajo actual?

Quiero mantener esta secuencia de comandos de copia de seguridad tan genérica como sea posible, por lo que debe actualizar todos los repositorios de copia de seguridad almacenados en mi carpeta H: \ BACKUPS \ REPOS. Este es mi hgbackup.bat que se almacena en la misma carpeta:

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

El problema: hg tire sólo parece funcionar en el directorio de trabajo actual, no parece haber ningún modificador para especificar el repositorio de destino para el tirón. Como odio Windows Batch Scripting, quiero mantener mi .bat lo más simple posible y evitar el cd'ing en los diferentes directorios.

Alguna idea de cómo puedo ejecutar hg pull -u en un directorio diferente?

+0

Si solo lo está almacenando como copia de seguridad, ¿por qué '-u'pdate on pull? Simplemente aumenta de manera redundante la cantidad de datos que está almacenando –

Respuesta

32

Uso del -R -switch:

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

Ver hg -v help pull para todas las opciones de línea de comandos de hg pull (el interruptor -v dice ayudar a incluir opciones globales).

+1

¡gracias por la ayuda! Sí, me topé con la opción -R, pero pensé que especificaría el repositorio desde el cual extraerlo. – fbuchinger

+3

¡Gracias! Como aclaración para otros googlers, la opción -R es una opción global para ejecutar cualquier comando hg en un directorio que no sea el actual. Lo usé para llevar los cambios de una confirmación en un repositorio a un repositorio relacionado: 'hg log -pr 9369 -R ../other-repo | patch -p1'. Si no tiene el parche, 'hg import --no-commit' es similar. – undefined

0

Encontré esta pregunta un poco más tarde debido a un script en el que estaba trabajando para mi propia computadora, y en lugar de un script por lotes, lo hice en PowerShell (ya que mencionó que está en un servidor, supuse que PS estaba disponible) Esto maneja los repositorios de Subversion y 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 
    } 
} 
Cuestiones relacionadas