Git tiene un comando para hacer exactamente lo que quiere, git bisect
Búsqueda por búsqueda binaria el cambio que se introdujo un error
En el caso de que desee utilizarlo como git bisect run /path/to/script
, que probará automáticamente confirmaciones y realizará un control con cada confirmación para encontrar el incorrecto compromiso.
Tenga en cuenta que la secuencia de comandos (my_script en el ejemplo anterior) debe salir con código 0 si el código fuente de corriente es buena, y la salida con un código de entre 1 y 127 (inclusive), excepto 125, si la fuente de corriente el código es malo
Cualquier otro código de salida anulará el proceso de bisección. Cabe señalar que un programa que termina a través de "exit (-1)" deja $? = 255, (consulte la página de manual de salida (3)), ya que el valor está picado con "& 0377".
El código de salida especial 125 se debe utilizar cuando el código fuente actual no se puede probar. Si la secuencia de comandos sale con este código, se saltará la revisión actual (consulte la sección anterior de git bisect). Se eligió 125 como el valor sensible más alto para usar para este propósito, porque las cáscaras POSIX usan 126 y 127 para señalar el estado de error específico (127 es para comando no encontrado, 126 es para comando encontrado pero no ejecutable --- estos detalles sí no importa, ya que son errores normales en el script, en lo que se refiere a "bisect run").
Por lo tanto, su secuencia de comandos compilaría sus fuentes, ejecutará su unidad de prueba de unidad y luego dará el código de salida correspondiente. La sección de ejemplo del bisect manpage lo cubre muy bien (incluidas compilaciones rotas, fusiones de fusiones fusionadas, etc.)
Gracias por la aclaración. Pero una prueba puede ser tanto una prueba unitaria como una prueba de regresión. Las dos categorías se cruzan, ¿verdad? – Randomblue
@Randomblue: Sí, a veces, cuando una prueba cumple ambos propósitos porque un error fue causado por una prueba de unidad faltante. Sin embargo, debes tener cuidado con la intersección. Las pruebas de regresión a menudo son asuntos largos (debido a los datos del mundo real y los tiempos) y tienden a venir en grandes rebaños. Golpean tus pruebas unitarias, así que mantenlas fuera lo más lejos posible. Además, es probable que las pruebas unitarias se descarten en la refactorización, por lo que son malas pruebas de regresión. – thiton
Ya veo, ¡gracias de nuevo! – Randomblue