el historial de blob de pygit2

Estoy tratando de hacer el equivalente del git log filename de git log filename en un repository de git bare usando pygit2. La documentation solo explica cómo hacer un git log como este:

 from pygit2 import GIT_SORT_TIME for commit in repo.walk(oid, GIT_SORT_TIME): print(commit.hex) 

¿Tiene alguna idea?

Gracias

EDITAR:

Tengo algo así en este momento, más o less preciso:

 from pygit2 import GIT_SORT_TIME, Repository repo = Repository('/path/to/repo') def iter_commits(name): last_commit = None last_oid = None # loops through all the commits for commit in repo.walk(repo.head.oid, GIT_SORT_TIME): # checks if the file exists if name in commit.tree: # has it changed since last commit? # let's compare it's sha with the previous found sha oid = commit.tree[name].oid has_changed = (oid != last_oid and last_oid) if has_changed: yield last_commit last_oid = oid else: last_oid = None last_commit = commit if last_oid: yield last_commit for commit in iter_commits("AUTHORS"): print(commit.message, commit.author.name, commit.commit_time) 

Te recomendaría que simplemente usas la interfaz de command-line de git, que puede proporcionar resultados muy formateados que son muy fáciles de analizar usando Python. Por ejemplo, para get el nombre del autor, el post de logging y los hashes de confirmación para un file determinado:

 import subprocess subprocess.check_output(['git','log','--pretty="%H,%cn%n----%B----"','some_git_file.py']) 

Para get una list completa de los especificadores de formatting que puede pasar a –pretty , eche un vistazo a la documentation de git log : https://www.kernel.org/pub/software/scm/git/docs/git-log. html

Otra solución, flojamente produce revisiones de un file de un compromiso determinado. Como es recursivo, podría romperse si el historial es demasiado grande.

 def revisions(commit, file, last=None): try: entry = commit.tree[file] except KeyError: return if entry != last: yield entry last = entry for parent in commit.parents: for rev in revisions(parent, file, last): yield rev