viernes, agosto 13, 2004

La Epopeya de Pepe Cajeta

Ayer me bajé y me puse a ver el código de dpkg por que quería ver cómo se hacian las comparaciones de veriones de los paquetes de debian y sacar esa parte del código para una cosa que estoy queriendo hacer...

Bueno, la búsqueda comenzo viendo qué había en los directorios, cómo estaban ordenados, etc... Luego, leí el archivo main.c, para ver a donde mandaba la opción --compare-versions... mandaba a la función cmpversions. Buenísimo, esa es, ahora tengo que ver dónde está... bueno, en poco tiempo, con la ayuda de cat|grep, la encontré en el archivo enquiry.c...

Asi, leí la función cmpversions, que para mi sorpresa devuelve void... Luego de leer toda esta función para ver qué era lo qe hacía, resulta que tiene como dos pantallas (en 1024x768) de definiciones de structs y chequeo de errores y lo que realmente importa son las tres o cuatro últimas líneas, que dicen

r= versioncompare(&a,&b); /*Notar que r era un int*/

...mmm, bueh, y esta función dónde chota está?

Me pasé un buen rato buscando como un boludo hasta que me dí cuenta de que lo podía hacer más automágicamente... asi que me escribí un linda linea de bash, que despues de un poquitito de tweaking, quedó así:

$ for i in `find -iname "*.c" -or -iname "*.h"`;do if cat $i|grep versioncompare>/dev/null; then echo $i;fi;done

Bastante bonita, su salida fue esta:

./include/dpkg-db.h
./lib/vercmp.c
./main/archives.c
./main/enquiry.c

Buenísimo... al final estaba en lib/vercmp.c

Aguante unix loco.

2 Comments:

At 4:25 p. m. ART, Anonymous Anónimo said...

Si, definitivamente el estilo UNIX para hacer esas cosas es genial. Más con herramientas como grep.

Una opción más GUIosa para explorar código es levantar el programa con anjuta. Tiene un browser bastante práctico. Si estas buscando un cachito de código en particular, es muy útil

-- Anonymous Dani

 
At 8:17 p. m. ART, Anonymous Anónimo said...

Por cierto, viendo mejor lo que hiciste, lo podes abreviar como:

grep -l versioncompare *.[ch]

 

Publicar un comentario

<< Home