2010-11-17 8 views
7

Tratando de averiguar cuánto tiempo se pasó en una confirmación en un enganche post-commit de Git.En un gancho post-commit de git, ¿cómo obtengo una lista de los archivos que se cambiaron?

Tengo un gancho git post-commit que envía información sobre una API sobre la confirmación. Lo que quiero hacer es averiguar cuánto tiempo se pasó en la confirmación. Aproximadamente.

Mi suposición es que un valor aproximado puede ser resuelto mediante la búsqueda del mínimo de todos los tiempos de creación y modificación de los tiempos de los archivos involucrados y comparar con la máxima creación-y-hora de modificación.

Puedo hacer esto fácilmente en un script de Python. Si alguien me dice que fueron los archivos "foo.txt", "bar.txt" y "ruta/bla.txt" puedo rápidamente hacer aritmética en un script basado en estos archivos.

Entonces, en un enganche post-commit de git, ¿cómo consigo una lista de los archivos que fueron cambiados?

+0

Se me olvidó decir que, de hecho, sé cómo obtener los nombres de los archivos utilizando '--name-only' pero eso también incluye un montón de información sobre la confirmación que no me importa. –

+0

No estoy seguro de ver qué tienen que ver los tiempos de modificación en los archivos con el tiempo dedicado a la confirmación. Lo único realmente correlacionado con eso sería la diferencia entre su marca de tiempo y la marca de tiempo de confirmación siguiente-más reciente (que podría no ser su padre, si trabaja en varias ramas). – Cascabel

Respuesta

7

Al escribir scripts en git, debe intentar seguir con el plumbing commands; es menos probable que su formato cambie y sea más fácil de analizar. Aquí es un comando que da salida a los nombres de los caminos que cambiaron en un compromiso:

git diff-tree -r --name-only --no-commit-id <tree-ish> 

Aparte de eso, es posible que desee examinar el índice, ya que contiene las marcas de tiempo de cuando se organizaron los archivos, lo que podría darle un borde extra; sin embargo, no creo que haya una forma de acceder a esta información.

+0

Gracias. Funciona mucho mejor que mi enfoque de registro de git. –

0

He estado investigando y he encontrado que git log --name-only -n1 es el mejor enfoque. No es difícil obtener el min. y max. marcas de tiempo fuera de los archivos haciendo un poco de coincidencia de cadenas y utilizando el módulo Python os.stat.

Como solución general, todavía no es genial porque los tiempos de modificación en los archivos realmente no reflejan la realidad del tiempo que realmente se pasa.

+2

Por lo general, es una buena idea esperar a que otros respondan antes de declarar que ha encontrado el mejor enfoque; La respuesta de jleedev evita la información adicional. – Cascabel

Cuestiones relacionadas