0

I am using GitPython. Below I print the total number of lines changed in a specific commit: f092795fe94ba727f7368b63d8eb1ecd39749fc4:

from git import Repo

repo = Repo("C:/Users/shiro/Desktop/lucene-solr/")

sum_lines = 0
for blame_commit, lines_list in repo.blame('HEAD', 'lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java'):
    if blame_commit.hexsha == 'f092795fe94ba727f7368b63d8eb1ecd39749fc4':
        sum_lines += len(lines_list)
print sum_lines

The output is 38. However, if you simply go to https://github.com/apache/lucene-solr/commit/f092795fe94ba727f7368b63d8eb1ecd39749fc4 and look at the commit yourself for file /lucene/analysis/Analyzer.java, the actual number of lines changed is not 38 but it is 47. Some lines are completely missing.

Why am I getting a wrong value ?

dimitris93
  • 4,155
  • 11
  • 50
  • 86

1 Answers1

2

git blame tells you which commit last changed each line in a given file.

You're not counting the number of lines changed in that commit, but rather the number of lines in the file at your current HEAD that were last modified by that specific commit.

Changing HEAD to f092795fe94ba727f7368b63d8eb1ecd39749fc4 should give you the result you expect.

$ git blame f092795fe94ba727f7368b63d8eb1ecd39749fc4 ./lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java | grep f092795 | wc -l
47
$ git blame master ./lucene/core/src/java/org/apache/lucene/analysis/Analyzer.java | grep f092795 | wc -l
38
Greg Bowser
  • 323
  • 2
  • 7
  • But then how am I supposed to get all those commits in the first place ? – dimitris93 Sep 25 '16 at 21:09
  • I want to get all {commit, lines-changed} information for a specific file – dimitris93 Sep 25 '16 at 21:16
  • _One_ way would be to iterate over all the commits in the "rev-list" of a specific file. In git commands, this would be `git rev-list master -- some-file-here`. GitPython implements this with `iter_commits`: `for commit in repo.iter_commits(paths='/path/to/Analyzer.java'):...` – Greg Bowser Sep 25 '16 at 21:33
  • Perfect answer. – dimitris93 Sep 25 '16 at 22:42