¿Qué versión de X introdujo la función Y?

10

Una gran parte de mi trabajo diario está desarrollando un software para su uso en máquinas con diferentes versiones del mismo software, como bash, find, y grep. Al encontrar una característica que sería útil, por ejemplo, para simplificar el código, es importante saber si esta característica está disponible en las herramientas instaladas más antiguas. Para cosas críticas, también sería útil saber si esta característica era nueva o existía durante años en las herramientas instaladas más antiguas.

¿Cuáles son las formas rápidas de responder con autoridad a estas herramientas de Linux, especialmente GNU Core Utils? Algunas posibilidades en orden de precisión decreciente:

  • La búsqueda binaria binaria (sic) ejecutando las diferentes versiones es, por supuesto, la respuesta final, pero es, con mucho, la que consume más tiempo. Las instalaciones más antiguas a menudo no están disponibles por razones de seguridad.
  • Leer el código es casi igual de bueno, pero puede llevar mucho tiempo si la característica se nombra vagamente, el nombre no corresponde directamente a los nombres de variables / funciones / objetos, o si se implementó antes de habilitarse.
  • Los registros de cambios , cuando están disponibles, generalmente conectan cambios de funciones a versiones de software.
  • Los registros de confirmación pueden proporcionar sugerencias, pero no saben en qué versión se incluirán.
  • Las páginas man rara vez mencionan fechas.
  • Lo mismo se aplica a Google , y también tendrá dificultades para excluir todas las fuentes no autorizadas.
l0b0
fuente
¿Podrías quizás dar más detalles sobre la (s) razón (es) detrás de esta pregunta?
Faheem Mitha
ISTM dice que si tiene que portar el software a estas plataformas diferentes, debe tener una instalación "más antigua" disponible en algún lugar. Por lo tanto, una respuesta bastante rápida y autorizada sería probarla en esa plataforma. Idealmente en todas las plataformas (si escribió un caso de prueba como un script, podría enviarlo a todas sus plataformas de portabilidad y obtener una serie de respuestas sí / no).
roaima

Respuestas:

7

En general, hay un registro de cambios. De hecho, ¡esta (u otras "notificaciones destacadas" de cambios) es requerida por la GPL! (Al menos, efectivamente para cualquier cosa con múltiples contribuyentes - ver GPLv2 sección 2a.)

Para el paquete GNU coreutils, y para casi todo lo demás desde el proyecto GNU directamente, este archivo es definitivamente el primer lugar para buscar, y debería responder a su pregunta el 95% del tiempo.

mattdm
fuente
¿Tiene alguna referencia al registro de cambios de coreutils? Lo más nuevo que pude encontrar fue de 2007.
l0b0
2
GNU Coreutils ChangeLog no se ha actualizado desde 2007. cvs.savannah.gnu.org/viewvc/coreutils/… Debe ver los registros de git ahora.
Mikel
2
Puede generarse automáticamente a partir de los registros de git. Hay una entrada ChangeLog.bz2en /usr/share/doc/coreutils-8.10mi sistema Fedora, y la entrada superior es de 2011-02-04. También es posible que se trate de una bifurcación de humedad relativa. Lo comprobaré hoy más tarde.
mattdm
@mattdm: Hay /usr/share/doc/coreutils/changelog.gz en Ubuntu - ¡Gracias! Desafortunadamente, solo se remonta a 2008, que es demasiado reciente para algunas de las herramientas relevantes. Sin embargo, supongo que ocupa el lugar donde terminó el último.
l0b0
3
Aquí está la prueba: git.savannah.gnu.org/cgit/coreutils.git/tree/HACKING Desplácese a la línea 131.
Shinnok
4

¿Por qué no utilizar el control de fuente aferente a X para buscar la función Y? El repositorio fuente es la mejor manera de identificar cuándo se introdujo una característica particular.

Para coreutils, puede dirigirse a http://git.savannah.gnu.org/cgit/coreutils.git y buscar palabras clave relacionadas con Y en los mensajes de registro o líneas de código particulares que identificó como pertenecientes a Y. Puede hacerlo en la interfaz web directamente, o incluso mejor, clone el repositorio de origen en su estación y busque usando git-bisect , git-blame y git-log --grep .

Luego use git-describe para descubrir que la etiqueta es la más cercana a una comisión específica. Las etiquetas se usan principalmente para los números de versión, por lo que le dará la versión que introdujo el commit.

Puede adaptar el método anterior, dependiendo de X y su control de fuente.

Shinnok
fuente
¿Cómo identificarías qué commit / línea entró en qué versión del software? Además, la búsqueda de Savannah está muy rota : no hay resultados para cadenas que obviamente están en los mismos mensajes de registro.
l0b0
Use git-describe para descubrir que la etiqueta es la más cercana a una comisión específica. Las etiquetas se utilizan principalmente para los números de versión. En cuanto a que Savannah está rota, no puedes hacer mucho al respecto. Git clone el repositorio en su caja y trabaje a su manera utilizando los comandos git que describí en la publicación.
Shinnok
1

En Debian y plataformas derivadas de Debian como Ubuntu :

sudo apt-get changelog coreutils > changelog.txt 

proporciona el registro de cambios de GNU Core Utilities hasta la versión 4.5.1-1.

No estoy seguro si hay soluciones igualmente convenientes en otras plataformas.

mklement0
fuente