Descargar todo
Lo primero que necesito es clonar
el repositorio donde se realizó el backport
en la versión 8.0, añadirle un remoto que será
el repositorio principal de Odoo, y
descargar su rama 9.0, en la que se encuentra website_slides
:
$ git clone --branch 8.0 git@github.com:OCA/website.git $ cd website $ git remote add odoo git@github.com:odoo/odoo.git $ git fetch odoo 9.0
Localizar el último commit que se backporteó
Ahora tengo que examinar el historial de la rama 8.0 de OCA/website para ver cuál fue el último commit backporteado. Para eso, la verdad es que lo más cómodo es usar la interfaz de GitHub, donde encuentro que el último fue cb5004c (ojo, hablamos del último commit producto del backport, ya que luego ambos repositorios evolucionaron cada cual por su lado).
Para que no se me pierda, lo marcaré con una rama:
$ git branch _last_backported cb5004cb06d91d54c6d187908599e03a2e7f546e
Repetir el backport filtrado
Puesto que los dos repositorios son topológicamente diferentes, hay que repetir el
backport que se hizo. Para ello, hay que filtrar la carpeta
./addons/website_slides
de Odoo y moverlo a la carpeta
./website_slides
de la versión OCA. Para ello, el proceso es similar al
que hace falta para
migrar módulos OCA de la versión 8.0 a la 9.0, pero con un par de trucos extra.
Por cierto, aquí usaré sintaxis de Fish, si todavía usas Bash, tradúcelo tú mismo o cambia a Fish y sé más feliz ;):
$ git checkout -b _website_slides_new_backport odoo/9.0 $ set module addons/website_slides $ git filter-branch --force --subdirectory-filter $module $ set module website_slides $ git filter-branch --force --tree-filter "mkdir $module; git mv -k * $module" HEAD
Cherry-pick de los nuevos commits del nuevo backport
Ahora ya tengo la rama _website_slides_new_backport
, con los commits
idénticos a los originales de Odoo en la rama 9.0, pero filtrados únicamente por el
directorio que me interesa; y la rama _last_backported
, que marca el
último commit ya existente en OCA.
Ahora voy a excluir los commits que existan en ambas ramas, y hacer cherry-pick de los restantes, escogiendo los cambios de parte de Odoo en caso de conflicto:
$ git checkout _last_backported $ git cherry _last_backported _website_slides_new_backport | grep + | awk '{print $2}' | git cherry-pick --stdin --strategy-option theirs
Mezclar y corregir conflictos
Ahora mezclamos el backport actualizado con el que había, y borramos las ramas que ya no necesitamos:
$ git checkout -b 8.0-website_slides-update_backport origin/8.0 $ git merge _last_backported $ git branch -D _last_backported _website_slides_new_backport
Evidentemente habrá un montón de conflictos. No queda más remedio que la corrección manual:
$ git mergetool # (Abrir GUI de resolución de conflictos en cada fichero) $ git commit
Al terminar, tienes que comprobar manualmente que todo haya funcionado.
Resultado final
Al final, ya está abierta la
solicitud de integración para actualizar website_slides
en la OCA. Échale un ojo si quieres.