Detectando y corrigiendo bugs en Zope3

Anoche Mikel y yo no fuimos al RockFest del Camp5. Fatigados de actos sociales en lengua extranjera, nos quedamos programando tan panchos en el hotel.

Probando el SetIndex que Zope Corporation ha publicado para el catalogo de Zope3, detectamos un comportamiento que no nos gustaba.

Me pongo a contaros esto con la emoción de quien descubre y corrige su primer bug. Absteneos, pues, de juzgar el mérito y la vanidad de este humilde escritor de código y blog.

En Zope3, el comportamiento esperado de los programas se documenta con DocTests. Los primero que hemos hecho ha sido modificar el DocTest para que refleje el comportamiento que, creemos, es el correcto.:

setindex.txt.patch


 # diff -u zc.catalog-1.1-py2.4.egg/zc/catalog/setindex.txt zc.catalog-1.1-py2.4.egg/zc/catalog/setindex.txt.new > setindex.txt.patch

Después hemos modificado el código para que realice lo que queremos:

index.py.patch

# export PYTHONPATH=/opt/Zope-3.3.0/lib/python# /opt/Python-2.4.3/bin/python zc/catalog/tests.py

¿Cómo se aplican los ficheros patch? descargatelos en el directorio donde tengas 'zc.catalog-1.1-py2.4.egg', posiblemente el directorio 'site-packages' de tu instalación de Python y ejecutar el parche:

# patch -p0 < setindex.txt.patch# patch -p0 < index.py.patch

2 Responses to “Detectando y corrigiendo bugs en Zope3”

  1. nando says:

    Pero ¿cúal es el problema que teníamos?

    Al buscar en un SetIndex con la query ‘all_of’ y pasándole un conjunto de valores, se supone que hace una intersección de los resultodos para todas los valores: resultados para un valor interseccionados con los resultados para otro valor, interseccionados con …

    El problema es que si un valor no arroja resultados, devolvía todos los demás anteriores.

    Matemáticamente, la intersección con un conjunto vacío es el conjunto vacío. Eso es lo que esperabamos y eso es lo que hemos conseguido.

  2. nando says:

    Una respuesta ultrarápida de Gary Poster me confirma que ha incluido la corrección del bug en la nueva release 1.1.1 y en el trunk.

Leave a Reply