GitPython list all files affected by a certain commit
Question:
I am using this for loop to loop through all commits:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print commit.files_list # how to do that ?
How can I get a list with the files affected from this specific commit ?
Answers:
I solved this problem for SCM Workbench. The important file is:
https://github.com/barry-scott/scm-workbench/blob/master/Source/Git/wb_git_project.py
Look at cmdCommitLogForFile() and its helper __addCommitChangeInformation().
The trick is to diff the tree objects.
Try it
for commit in list(repo.iter_commits()):
commit.stats.files
from git import Repo
repo = Repo('/home/worldmind/test.git/')
prev = repo.commit('30c55d43d143189698bebb759143ed72e766aaa9')
curr = repo.commit('5f5eb0a3446628ef0872170bd989f4e2fa760277')
diff_index = prev.diff(curr)
for diff in diff_index:
print(diff.change_type)
print(f"{diff.a_path} -> {diff.b_path}")
commit.stats.files
works, but it’s very slow. It will take several seconds to process a large commit.
This is much faster:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print(self.repo.git.show(commit.hexsha, name_only=True).split('n'))
I am using this for loop to loop through all commits:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print commit.files_list # how to do that ?
How can I get a list with the files affected from this specific commit ?
I solved this problem for SCM Workbench. The important file is:
https://github.com/barry-scott/scm-workbench/blob/master/Source/Git/wb_git_project.py
Look at cmdCommitLogForFile() and its helper __addCommitChangeInformation().
The trick is to diff the tree objects.
Try it
for commit in list(repo.iter_commits()):
commit.stats.files
from git import Repo
repo = Repo('/home/worldmind/test.git/')
prev = repo.commit('30c55d43d143189698bebb759143ed72e766aaa9')
curr = repo.commit('5f5eb0a3446628ef0872170bd989f4e2fa760277')
diff_index = prev.diff(curr)
for diff in diff_index:
print(diff.change_type)
print(f"{diff.a_path} -> {diff.b_path}")
commit.stats.files
works, but it’s very slow. It will take several seconds to process a large commit.
This is much faster:
repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")
for commit in list(repo.iter_commits()):
print(self.repo.git.show(commit.hexsha, name_only=True).split('n'))