Consigue archivos modificados usando gitpython

Quiero obtener una lista de los archivos modificados del git-repo actual. Los archivos, que normalmente se enumeran en Changes not staged for commit: al llamar al git status .

Hasta ahora he logrado conectarme al repository, lo he extraído y mostrar todos los archivos sin seguimiento:

 from git import Repo repo = Repo(pk_repo_path) o = self.repo.remotes.origin o.pull()[0] print(repo.untracked_files) 

Pero ahora quiero mostrar todos los archivos que tienen cambios (no comprometidos). ¿Alguien puede empujarme en la dirección correcta? Miré los nombres de los métodos de repo y experimenté por un tiempo, pero no puedo encontrar la solución correcta.

Obviamente podría llamar a repo.git.status y analizar los archivos, pero eso no es nada elegante. Debe haber algo mejor.


Edit: Ahora que lo pienso. Más útil sería una función, que me dice el estado de un solo archivo. Me gusta:

 print(repo.get_status(path_to_file)) >>untracked print(repo.get_status(path_to_another_file)) >>not staged 

 for item in repo.index.diff(None): print item.a_path 

o para obtener sólo la lista:

 changedFiles = [ item.a_path for item in repo.index.diff(None) ] 

repo.index.diff () devuelve git.diff.Diffable descrito en http://gitpython.readthedocs.io/en/stable/reference.html#module-git.diff

Entonces la función puede verse así:

 def get_status(repo, path): changed = [ item.a_path for item in repo.index.diff(None) ] if path in repo.untracked_files: return 'untracked' elif path in changed: return 'modified' else: return 'don''t care'