私はPythonのコードをGitの差分を解析したいと私は差分パーサから以下の情報を得るために興味があります:削除のPythonのGitの差分パーサ
- コンテンツ/ラインとも行番号を追加しました。
- ファイル名。
- ファイルの削除、名前変更、追加のステータス。
私は、この目的のためにunidiff 0.5.2を使用していると私は、次のコードを書きました:私はGitの差分を生成する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文字列を解析する」とはどういう意味ですか? 「このgit diff文字列を持っていて、次の情報を取得したいと思っています。ここに私が試したことがあります。ここにはなぜうまくいかないのですか...」 – mgilson
ありがとうあなたのコメント。私は質問を書き直します。 –
あなたは 'unidiff'を使うことはできないと言います - 私はその主張を理解しているかどうかはわかりません。あなたがリンクしたピピページによると、unidiffはファイルのようなオブジェクトで動作します。文字列があれば、標準ライブラリで 'StringIO'や' io'を使ってファイルのようなオブジェクトを作るのは簡単です。 – mgilson