Mercurial-Befehl zum Identifizieren von Dateien, die der Dateispezifikation entsprechen und seit dem letzten Update geändert wurden

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

  •  12-11-2019
  •  | 
  •  

Frage

Idealerweise suche ich nach einer zustandslosen Möglichkeit, dies zu tun, da ich eine Batchdatei verwende.

Das Szenario ist, dass ich ein Repository auf einem Server habe, das Pushs von Benutzern empfängt.Das Repo ist auch eine Arbeitskopie, die als Quelle für Wiki-Seiten (Dokuwiki) dient, bei denen es sich einfach um die Textdateien handelt, die sich im Repository befinden, eine für jede Seite im Wiki.

Da es sich um einen Webserver handelt, wird die Arbeitskopie von niemandem interaktiv genutzt.Stattdessen wird eine Batchdatei regelmäßig ausgeführt und gibt die entsprechenden Befehle aus, um die Arbeitskopie mit den neuesten Änderungen, die an das Repo übertragen wurden, auf dem neuesten Stand zu halten.Als Randbemerkung zur Implementierung: Sie akzeptiert auch Änderungen an der Arbeitskopie aus dem Wiki und versucht, diese gleichzeitig zusammenzuführen und zu übernehmen.

Die Batchdatei sieht so aus:

@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

Dies funktioniert gut für Textdateien, aber Dokuwiki erfordert, dass Medien wie Grafiken in einem anderen Verzeichnis gespeichert werden, und zwar im letzten Verzeichnis for Aussage ist für.

Beachten Sie, dass ich mich bis zu diesem Zeitpunkt nicht mit Verbesserungen am Skript beschäftigt habe.Dies wurde als unsere gewünschte Methode zur Durchführung des Updates in dieser Umgebung überprüft.

Das Problem mit der Kopie am Ende besteht darin, dass alle Grafiken kopiert werden, unabhängig davon, ob sie geändert wurden oder nicht.Natürlich wäre es besser, nur die Grafiken zu kopieren, die sich geändert haben.Da seit dem letzten Update möglicherweise mehr als ein Push in dieses Repository stattgefunden hat, möchte ich nur die Grafiken identifizieren und kopieren, die sich seit dem letzten Update dieser Arbeitskopie geändert haben, d. h.das letzte Mal, als dieses Skript ausgeführt wurde hg update.

Ich kann mir keinen intuitiven Weg vorstellen, dies ohne weiteres zu tun.Am besten wäre es, wenn die Informationen zwischen den Skriptausführungen nicht manuell gespeichert werden müssten, aber das ist nicht ausgeschlossen.

War es hilfreich?

Lösung

Sie können mit der Verwendung von xcopy und seinem /D-Schalter entkommen, der nur Quelldateien kopiert, die neuer als Dateien im Ziel sind.

Andere Tipps

Ich habe keine Ahnung von der Syntax von Windows-Batchdateien, aber von der von Mercurial hg status --rev REV ist wahrscheinlich das, wonach Sie suchen:

@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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top