2010-06-18 5 views
2

나는 라이브 서버에 파일을 배포하는 수단으로 ftp를 사용해야하는 프로젝트가 있습니다. 리눅스에서 개발 중이므로 ftp 서버의 내용을 백업하는 bash 스크립트를 해킹했습니다. 은 ftp에서 모든 파일을 삭제하고 수은 저장소에서 모든 최신 파일을 업로드합니다. (사용자가 업로드 한 파일 및 폴더를 돌보고 배포 후 변경 사항을 처리하는 등)셸 스크립트에서 증분 배포

프로젝트는 잘 진행되고 있지만 배포 프로세스가 너무 오래 걸릴 정도로 프로젝트가 시작되고 있습니다.

어떤 파일이 변경되었는지 조회하고 수정 된 파일 만 배포하도록 스크립트를 수정하고 싶습니다. (백업은 그대로 atm입니다.)

저는 수은을 VCS로 사용하고 있습니다. 제 생각에는 변경된 파일을 두 개의 수정본간에 요청하고, 변경된 파일 인 을 수정하고 각 수정 된 파일을 업로드하는 것입니다. 파일을 삭제하고 각각을 삭제하십시오.

hg log -vr rev1:rev2을 사용할 수 있으며, 출력 결과에서 변경된 파일을 grep/sed/등으로 조각 할 수 있습니다.

두 가지 문제 : 나는 LS의 출력을 구문 분석 광기에 이르게 공포 이야기를 들었습니다

, 그래서 내 생각 엔 내가 hg log의 출력을 구문 분석하려고하면 동일의, 여기에 적용하다 변수는 단어 분할과 모든 종류의 변환을 거칩니다.

hg log 파일이 수정/추가/삭제되었음을 알려주지 않습니다. 수정 된 파일과 삭제 된 파일을 구별하는 것이 가장 적을 것입니다.

그래서 올바른 방법은 무엇입니까? 필요하다면 yafc를 ftp 클라이언트로 사용하고 있지만 전환 할 용의가 있습니다.

+0

rq는 'hg status' (로그가 아님)를 사용하여 아래에 답을 얻었습니다. 수은으로 출력물을 파싱하는 것에 대해 걱정하지 마십시오. 작성자는 명령 출력을 버전간에 변경하는 것에 매우주의해야합니다. 그건 그렇고, 나는 당신이 내 자신의 증분 업데이 트를 굴리는 것을 피하겠습니까. 모든 것을 서버의 새 디렉토리로 보내고 이름을 바꾼 새로운 임시 이름은 오래된 웹으로 보이는 이름을 겹쳐 씁니다. –

답변

3

구문 분석을 수행하는 사용자 지정 스타일을 사용할 수 있습니다.

hg log --rev rev1:rev2 --style mystyle 

그런 다음 파이프를 sort -u으로 파이프하여 고유 한 파일 목록을 가져옵니다. "mystyle"파일은 다음과 같습니다 :

changeset = '{file_mods}{file_adds}\n' 
file_mod = '{file_mod}\n' 
file_add = '{file_add}\n' 

수정 및 추가 템플릿은 수정되거나 추가 된 파일입니다. 삭제 된 파일에는 file_delsfile_del 템플릿이 있습니다.

또는 당신이 M 또는 수정하기 전에 을 추가 hg status -ma --rev rev1-1:rev2를 사용할 수/파일을 추가했습니다. "기준선"이후의 상태이므로 rev1보다 작은 다른 개정 범위를 전달해야합니다. 삭제 된 파일은 유사합니다. -d 플래그가 필요하고 삭제 된 파일 앞에 D이 추가됩니다.

+1

hg status 솔루션은 범위에있는 모든 변경 집합의 목록을 개별적으로 나열하는 대신 결합하므로 훨씬 효율적입니다. –

+0

그러나 hg st의 출력을 사용하면 같은 문제가 발생하지 않을까요? 파일 이름에 공백이 없는지 알아보고 싶습니까? –

+0

'hg st --ma --rev a : b | 컷 -c3- | 읽는 동안 파일; "$ file"로 처리하십시오; done '은 공백으로 나뉘 지 않고 개행에서만 파일 이름의 공백에 문제를주지 않습니다. – richq

관련 문제