2016-07-25 4 views
0

TL; DR SVN 저장소에 대한 URL을 가지고 있는데, 주어진 개정 번호 이후에 변경된 파일에 대한 모든 경로를 어떻게 빼낼 수 있습니까?SVN/PySVN : 마지막으로 변경된 파일의 경로를 가져옵니다.

Long Story : SVN repo에서 일부 파일을 다운로드하는 스크립트가 있습니다. 그것은 'n'시간마다 그렇게합니다. 그러나 하나의 파일 만 변경 한 경우 모든 파일을 다시 다운로드하지 않아도됩니다. 수정 번호가 변경되었는지 확인하기 위해 PySVN을 사용하여 모든 파일을 검사하려고 시도했지만 너무 오래 걸립니다 (6 개의 파일이있는 폴더의 경우 ~ 20 초 소요). 개선 할 수있는 방법이 있습니까?

저는 Python에서 PySVN으로 작업하고 있습니다. 나는 pysvn.Client.log가 'changed_paths'속성을 가지고 있음을 보았지만, 어떻게 처리해야할지 모르겠다. \ 이 프로그램은 리눅스와 윈도우에서 실행되므로 솔루션은 크로스 플랫폼이어야한다. (if 가능)

답변

1

모든 변경 사항을 찾으려면 pysvn.Client(). log()를 사용하십시오. 예 :

all_logs = pysvn.Client().log(path, 
    revision_start=pysvn.Revision(opt_revision_kind.head), 
    revision_end=pysvn.Revision(opt_revision_kind.number, last_revision), 
    discover_changed_paths=True) 

이렇게하면 last_revision에 적어도 하나 이상의 로그가 반환됩니다. 이것을 무시하거나 last_revision + 1을 사용하고 개정이 누락되었다는 svn의 오류를 잡을 수 있습니다.

pysvn.Client(). update()는 작업 복사본을 변경하는 가장 현명한 방법을 보여줍니다.

전체 repo의 일부분 만 체크 아웃 할 수 있습니다. 시작할 폴더를 선택하고 깊이 기능을 사용하여 필요한 폴더 만 가져올 수 있습니다. 예를 들어 :

pysvn.Client().checkout(URL, path, depth=pysvn.depth.files) 

는 그런 다음 업데이트 된 파일을 유지하기 위해 업데이 트를()를 사용합니다.

배리 스콧 pysvn의 저자.

+0

'pysvn.Revision (opt_revision_kind.head)'및 'pysvn.Revision (opt_revision_kind.number, last_revision)'에 대해 설명해 주시겠습니까? 나는 또한 pysvn.Client (diff.)를 발견했으나'peg_revision'이 무엇인지, 그리고/또는 어떻게 사용하는지 모른다. – SnuKies

+0

@hadarS 설명서를 읽으십시오. ref 문서에서 필요한 모든 것을 찾아야합니다. http://pysvn.stage.tigris.org/docs/pysvn_prog_ref.html 누락되거나 불완전한 문서가있는 경우 pysvn에 대한 버그 보고서를 작성하여 pysvn.tigris.org에서 문서를 개선 할 수도 있습니다. –

+0

@hadarS 아 그리고 당신이 인식하지 못하는 SVN 용어가있는 경우 SVN 매뉴얼에서 정의를 찾고있는 곳입니다. pysvn은 svn을 둘러싼 래퍼이며 svn의 용어를 반영합니다. –

0

요약하면 자전거를 다시 발명하려고한다고 생각합니다. 데이터를 내보내는 대신 작업 복사본을 체크 아웃하고 업데이트하십시오. 그 작업 복사본 및 업데이트 명령 작업입니다.

그렇다면 PySVN 대신 official SWIG Python bindings을 사용하는 것이 좋습니다.