Primero, el contexto: quería abrir este backport a OCB 9.0, pero había clonado así:
$ git clone --depth 100 --branch 9.0 https://github.com/OCA/OCB.git
El problema ahora es que para hacer cherry-pick del commit correspondiente en Odoo 10.0, hubiera necesitado mucho tiempo descargando todo ese árbol de código, que es considerablemente grande.
Es por eso que usé un par de herramientas que nos dan git y GitHub para estos menesteres:
En cuanto a GitHub, para cada commit o pull request, siempre podemos añadir a la URL:
.diffpara obtener el diff con respecto a la rama base.patchpara obtener el parche
Ejemplos para el commit en cuestión:
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.diff
- https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch
Es por esto que pude aplicar el parche sin necesidad de descargar más histórico en Git:
$ git checkout -b 9.0-event-no_mail_cancelled # Crear una nueva rama para el PR $ curl -sSL 'https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch' | git am -3 --keep-non-patch - Applying: [PATCH] [FIX] calendar, event: do not send emails to canceled attendees error: sha1 information is lacking or useless (addons/calendar/models/calendar.py). error: could not build fake ancestor Patch failed at 0001 [PATCH] [FIX] calendar, event: do not send emails to canceled attendees The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort".
💥 ¡Error! Al parecer estoy descargando cambios para
addons/calendar/models/calendar.py, un archivo que en la rama 9.0 no
existía. El parche para dicho archivo tampoco es que me sirva de nada, así que lo
ignoraremos:
$ git am --abort # Cancelamos lo que estábamos haciendo $ curl -sSL 'https://github.com/odoo/odoo/commit/de62e33618211fd754ad6e372ac93805cce58770.patch' | git am -3 --keep-non-patch --exclude addons/calendar/models/calendar.py - Applying: [PATCH] [FIX] calendar, event: do not send emails to canceled attendees
¡Listo! Ahora, si tengo que hacer algún cambio adicional a algún fichero, puedo
hacerlo tranquilamente. También si quiero cambiar el mensaje de commit, nuestro
viejo amigo git commit --amend nos puede servir.
Finalmente, subo el cambio a mi repositorio para poder abrir el PR:
$ git remote add tecnativa git@github.com:Tecnativa/odoo.git # El PR lo tengo que hacer desde nuestro repo $ git fetch tecnativa 9.0 # Esto sirve para que mi clon local pueda generar la diferencia de commits entre los repositorios de OCB y Tecnativa $ git push -u tecnativa 9.0-event-no_mail_cancelled # Subo los cambios de esta rama, que crearán la rama remota que no existía
¡Luego, creas el PR y listo!