Mercurial comando para identificar los archivos que coincidan con filespec y han cambiado desde la última actualización

StackOverflow https://stackoverflow.com/questions/5980602

  •  12-11-2019
  •  | 
  •  

Pregunta

Idealmente, estoy buscando un apátrida manera de hacer esto ya que estoy usando un archivo de proceso por lotes.

El escenario es que tengo un repositorio en un servidor que recibe los empujes de los usuarios.La repo es también una copia de trabajo que es la fuente para las páginas de la wiki (dokuwiki), que son simplemente los archivos de texto que están en el repositorio, uno para cada página de la wiki.

Porque esto es en un servidor web, la copia de trabajo no es utilizado por cualquier persona de forma interactiva.Más bien, un archivo por lotes se ejecuta periódicamente y problemas de los comandos apropiados para mantener la copia de trabajo actualizado con los últimos cambios que han sido empujados a la repo.Como una nota al margen de la aplicación, también acepta los cambios de la copia de trabajo de la wiki y se intenta mezclar y comprometerse con ellos en la misma carrera.

El archivo de proceso por lotes se parece a esto:

@echo off
cd \dokuwiki\data\directory
start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"
for /r %%x in (*.jpg *.png *.gif) do copy /y "%%x" ..\..\media\directory

Esto funciona bien para los archivos de texto, pero dokuwiki requiere que los medios de comunicación, tales como gráficos se almacenan en otro directorio, que es lo que la última for la declaración es para.

Tenga en cuenta que no estoy preocupado con las mejoras en la secuencia de comandos hasta que punto.Que ha sido votado como la manera de hacer la actualización en este entorno.

El problema con la copia del final es que copias todos los gráficos, independientemente de si han cambiado o no.Obviamente, sería mejor sólo copiar los gráficos que han cambiado.Dado que puede haber más de un empuje en este repositorio desde la última actualización, quiero identificar y copiar sólo los gráficos que han cambiado desde la última vez que esta copia de trabajo se ha actualizado, es decir,la última vez que esta secuencia de comandos se ejecutó hg update.

No puedo pensar en una manera intuitiva de hacerlo con la mano.Sería mejor si la información no necesita ser persistente manualmente entre la secuencia de comandos se ejecuta, pero no es fuera de la cuestión.

¿Fue útil?

Solución

Usted puede ser capaz de salirse con la suya con xcopy y su /D interruptor, que sólo copia los archivos de origen que son más recientes que los archivos en el destino.

Otros consejos

No tengo idea acerca de la sintaxis de Windows archivos de proceso por lotes, pero Mercurial del hg status --rev REV es probablemente lo que usted está buscando:

@echo off
cd \dokuwiki\data\directory

ORIG_REV = hg log --rev . --template="{node}"

start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"

CHANGED_FILES = hg status --no-status --added --modified --rev ORIG_REV -I '*.jpg' -I '*.png' -I '*.gif'

for /r %%x in (CHANGED_FILES) do copy /y "%%x" ..\..\media\directory
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top