2016-09-25 1 views
0

J'utilise GitPython. Ci-dessous j'imprimer le nombre total de lignes modifiées dans un engagement spécifique: f092795fe94ba727f7368b63d8eb1ecd39749fc4:GitPython "blame" ne me donne pas toutes les lignes modifiées

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 

La sortie est 38. Cependant, si vous allez simplement https://github.com/apache/lucene-solr/commit/f092795fe94ba727f7368b63d8eb1ecd39749fc4 et regardez le vous engager pour le fichier /lucene/analysis/Analyzer.java, le nombre réel de les lignes changées ne sont pas 38 mais c'est 47. Certaines lignes sont complètement manquantes.

Pourquoi je reçois une valeur erronée?

Répondre

2

git blame indique la dernière modification apportée à chaque ligne dans un fichier donné.

Vous ne comptez pas le nombre de lignes modifiées dans cette validation, mais le nombre de lignes dans le fichier de votre HEAD actuel qui ont été modifiées en dernier par cette validation spécifique.

La modification de HEAD à f092795fe94ba727f7368b63d8eb1ecd39749fc4 devrait vous donner le résultat attendu.

$ 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 
+0

Mais alors, comment puis-je obtenir tous ces commits en premier lieu? – dimitris93

+0

Je veux obtenir toutes les informations {commit, lignes-changées} pour un fichier spécifique – dimitris93

+0

_Un chemin serait d'itérer sur tous les commits dans la "liste-révolutions" d'un fichier spécifique. Dans les commandes git, ce serait git rev-list master - un peu de fichier ici. GitPython implémente ceci avec 'iter_commits': ' pour valider dans repo.iter_commits (paths = '/ path/to/Analyzer.java'): ... ' –