Estoy trabajando en un proyecto donde las personas pueden enviar historias y hacer que otras personas contribuyan. En lugar de simplemente editar una entrada en la base de datos, me gustaría almacenar los cambios que las personas hacen en lugar del conjunto completo de cambios. Luego puedo aplicar dffs dinámicamente si la gente quiere volver a una versión anterior. También puedo presentar fácilmente a los usuarios que son editores con solo el texto modificado para que puedan ir directamente a los cambios.¿Cómo puedo diferir y parchear/fusionar cadenas en lugar de archivos?
Soy consciente de cómo tomar archivos diff y parchar otros archivos con ellos. Pero estoy haciendo una aplicación web con Python y Django, y almacenaré todas estas diferencias en una base de datos MySQL. Dado que el rendimiento no es un problema importante para esta aplicación, estoy preparado para extraer los datos de la BD, crear archivos y ejecutar git diff
y patch
en esos archivos.
¿Existe alguna manera mejor que crear nuevos archivos y eliminarlos cada vez que deseo crear una nueva versión o aplicar una nueva diferencia? ¿Hay alguna forma de ejecutar diffs en texto directo en lugar de archivos? P.ej. establecer variables en bash para que sean los contenidos de (lo que sería) un archivo (pero en realidad son datos de la base de datos) y ejecutar git diff
en ellos? Me gustaría controlar estas acciones desde un archivo de Python después de que el usuario envíe un formulario.
Realmente estoy buscando una buena manera de comenzar con este problema, por lo que cualquier ayuda sería muy apreciada.
Gracias por su tiempo,
ParagonRG
que sin duda puede aplicar los principios de almacenamiento de las diferenciaciones en lugar del texto completo en la base de datos, pero es un poco extraño que te gustaría utilizar un VCS para el propósito. .. (has mirado http://docs.python.org/library/difflib.html)? – geoffspear
¡Gracias, investigando esto ahora! – Paragon
Desafortunadamente difflib no permitía reconstruir texto de dif a menos que se usen diffs que almacenan la totalidad del texto y sus cambios. Por lo tanto, construí un módulo para hacer esto; por favor mira mi respuesta a continuación. – Paragon