2011-05-12 4 views
1

배치 파일을 사용하고 있기 때문에 이상적으로이 작업을 수행 할 수있는 무국적 방법을 찾고 있습니다.파일 지정과 일치하고 마지막 업데이트 이후 변경된 Mercurial 명령

시나리오는 사용자로부터 푸시를받는 서버에 저장소가 있습니다. repo는 저장소에있는 텍스트 파일 인 위키 페이지 (dokuwiki)의 소스 인 작업 복사본이기도하며 위키의 각 페이지마다 하나씩 있습니다.

웹 서버에 있기 때문에 작업 복사본은 대화식으로 다른 사람이 사용하지 않습니다. 오히려 배치 파일은 주기적으로 실행되고 해당 명령을 실행하여 작업 사본이 저장소로 푸시 된 최신 변경 사항을 유지하도록합니다. 구현에 대한 참고 사항으로 wiki에서 작업 복사본에 대한 변경 사항을 받아들이고 동일한 획기에 병합 및 커밋을 시도합니다.

배치 파일은 다음과 같습니다

@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 

이 텍스트 파일에 대한 잘 작동하지만 도쿠 위키가 요구하는 등 그래픽이 마지막 for 문가 무엇인지 또 다른 디렉토리에 저장 같은 미디어.

나는 그 시점까지 스크립트 개선에 관심이 없다는 것에 주목하자. 이 환경에서 업데이트를 수행하려는 우리의 바람직한 방법으로 조사되었습니다.

끝에있는 사본의 문제는 변경 여부와 상관없이 모든 그래픽을 복사한다는 것입니다. 분명히 변경된 그래픽 만 복사하는 것이 좋습니다. 마지막 업데이트 이후이 저장소에 한 번 이상 푸시가 있었을 수 있으므로이 작업 사본이 마지막으로 업데이트 된 이후에 변경된 그래픽, 즉이 스크립트가 마지막으로 실행 된 시간이 hg update 인 경우에만 식별하고 복사하려고합니다.

나는이 작업을 직관적 인 방법으로 생각할 수 없습니다. 정보가 스크립트 실행 사이에 수동으로 지속될 필요가 없다면 가장 좋겠지 만 문제는 아닙니다. ,

@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 

답변

0

당신은 xcopy하고 /D 스위치를 사용하여 멀리 얻을 수 있습니다 : 당신이 찾고있는 무엇을

4

나는 Windows 배치 파일의 구문에 대한 아무 생각이 없지만, 의욕의 hg status --rev REV은 아마도 대상의 파일보다 새로운 소스 파일 만 복사합니다.

+0

hg 명령까지 (고맙습니다.) 일괄 처리의 한계로 인해 hg 상태에서 여러 줄 반환을 구문 분석하기가 어렵습니다. 그래서 Mark의 답변을 한 번만 제공합니다. –