파이썬 코드와 자식은 diff를 구문 분석하고 싶습니다 내가 사랑하는 파서에서 다음과 같은 정보를 얻을 관심 :파이썬 힘내 사랑하는 파서
- 삭제/추가 라인의 내용도 행 번호를.
- 파일 이름.
- 파일의 삭제, 이름 변경 또는 추가 여부를 나타냅니다.
나는이 목적을 위해 unidiff 0.5.2를 사용하고 난 다음 코드를 작성 : 나는 힘내은 diff를 생성하는 GitPython을 사용하고
from unidiff import PatchSet
import git
import os
commit_sha1 = 'b4defafcb26ab86843bbe3464a4cf54cdc978696'
repo_directory_address = '/my/git/repo'
repository = git.Repo(repo_directory_address)
commit = repository.commit(commit_sha1)
diff_index = commit.diff(commit_sha1+'~1', create_patch=True)
diff_text = reduce(lambda x, y: str(x)+os.linesep+str(y), diff_index).split(os.linesep)
patch = PatchSet(diff_text)
print patch[0].is_added_file
. 위의 코드에서 다음 오류가 발생했습니다.
current_file = PatchedFile(source_file, target_file,
UnboundLocalError: local variable 'source_file' referenced before assignment
이 오류를 해결하는 데 도움을 주시면 감사하겠습니다.
이 질문에 몇 가지 문제가 있습니다. 먼저 도서관이나 기타 오프 사이트 리소스를 추천 해 주시기 바랍니다. 둘째, 요구 사항이 무엇인지 전혀 말하지 않았습니다 ... "git diff 문자열을 파싱하는 것이 무슨 뜻입니까?" 훨씬 더 나은 것은 "나는이 자식 자식 문자열을 가지고 있는데, 다음 정보를 얻고 싶습니다. 여기 제가 시도한 것이 있습니다. 왜 여기가 작동하지 않는 것입니까?" – mgilson
고맙습니다. 귀하의 의견. 나는 그 질문을 다시 쓸 것이다. –
당신은 당신이'unidiff '를 사용할 수 없다고 말합니다 - 나는 그 주장을 이해하고 있는지 확신 할 수 없습니다. 연결된 pypi 페이지에 따르면 unidiff는 파일과 유사한 객체로 작동합니다. 문자열이 있으면 표준 라이브러리에서'StringIO' 또는'io'를 사용하여 파일과 비슷한 객체를 생성하기 쉽습니다. – mgilson