Commande Mercurial pour identifier les fichiers qui correspondent à Filescec et ont changé depuis la dernière mise à jour

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

  •  12-11-2019
  •  | 
  •  

Question

Idéalement, je cherche un moyen apatride de le faire car j'utilise un fichier batch.

Le scénario est que j'ai un référentiel sur un serveur qui reçoit des poussées d'utilisateurs. Le repo est également une copie de travail qui est la source des pages wiki (Dokuwiki), qui sont simplement les fichiers texte qui sont dans le référentiel, un pour chaque page du wiki.

Parce que c'est sur un serveur Web, la copie de travail n'est utilisée par personne de manière interactive. Au contraire, un fichier batch s'exécute périodiquement et émet les commandes appropriées pour maintenir la copie de travail mise à jour avec les dernières modifications qui ont été poussées vers le repo. En tant que note secondaire à la mise en œuvre, il accepte également les modifications de la copie de travail du wiki et essaie de les fusionner et de les commettre au même coup.

Le fichier batch ressemble à ceci:

@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

Cela fonctionne bien pour les fichiers texte, mais Dokuwiki exige que les médias tels que les graphiques soient stockés dans un autre répertoire, ce qui est le dernier for La déclaration est pour.

Notez que je ne suis pas préoccupé par les améliorations du script jusqu'à ce point. Il a été vérifié comme moyen souhaité de faire la mise à jour dans cet environnement.

Le problème avec la copie à la fin est qu'il copie tous les graphiques, qu'ils aient changé ou non. De toute évidence, il serait préférable de copier uniquement les graphiques qui ont changé. Puisqu'il peut y avoir eu plusieurs poussées dans ce référentiel depuis la dernière mise à jour, je veux identifier et copier uniquement les graphiques qui ont changé depuis la dernière fois que cette copie de travail a été mise à jour, c'est-à-dire la dernière fois que ce script a fonctionné hg update.

Je ne peux pas penser à une façon intuitive de faire cela désactivé. Il serait préférable que les informations n'aient pas besoin d'être persistées manuellement entre les exécutions du script, mais ce n'est pas hors de question.

Était-ce utile?

La solution

Vous pourrez peut-être vous en sortir avec l'utilisation xcopy et son /D Switch, qui copie uniquement les fichiers source plus récents que les fichiers dans la destination.

Autres conseils

Je n'ai aucune idée de la syntaxe des fichiers de lots de Windows, mais de Mercurial hg status --rev REV est probablement ce que vous recherchez:

@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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top