def compute_blame(self): """ Вычисляет информацию об авторстве для всех файлов и коммитов в репозитории """ # вычисление должно идти от более старых коммитов к более новым, # т.к. новые используют информацию об авторстве из старых for i, sha1 in enumerate(self.commit_order[::-1]): commit = self.commits[sha1] if commit.snapshot_blame is not None: continue # пропускаем коммиты, обработанные при прошлой загрузке # данные об авторстве файлов, измененных в этом коммите for file_path, _, __ in commit.changes: if self.ignore_file(file_path): continue try: blame = cmds.blame_stats(self.path, file_path, commit.sha1) except Exception as e: if 'no such path' in unicode(e): blame = None else: raise commit.blames[file_path] = blame # интеграция данных commit.compute_snapshot_blame() print "completed", i, "of", len(self.commit_order)
def blame_stats(self, file_path, rev_sha1): """ Число строк, принадлежащих каждому автору, в конкретном файле и ревизии. Возвращает словарь {имя автора: число строк} """ return cmds.blame_stats(self.path, file_path, rev_sha1)