| .. include:: ../disclaimer-sp.rst |
| |
| :Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` |
| :Translator: Carlos Bilbao <carlos.bilbao@amd.com> |
| |
| .. _sp_submittingpatches: |
| |
| Envío de parches: la guía esencial para incluir su código en el kernel |
| ======================================================================= |
| |
| Para una persona o empresa que desee enviar un cambio al kernel Linux, |
| el proceso puede en ocasiones resultar desalentador si no se está |
| familiarizado con "el sistema". Este texto es una colección de sugerencias |
| que pueden aumentar considerablemente las posibilidades de que se acepte su |
| cambio. |
| |
| Este documento contiene una gran cantidad de sugerencias en un formato |
| relativamente conciso. Para obtener información detallada sobre cómo |
| funciona el proceso de desarrollo del kernel, consulte |
| Documentation/process/development-process.rst. Además, lea |
| Documentation/process/submit-checklist.rst para obtener una lista de |
| elementos a verificar antes de enviar código. Para los parches de |
| "binding" del árbol de dispositivos, lea |
| Documentation/devicetree/bindings/submitting-patches.rst. |
| |
| Esta documentación asume que está usando ``git`` para preparar sus parches. |
| Si no está familiarizado con ``git``, le recomendamos que aprenda a |
| usarlo, le hará la vida como desarrollador del kernel y en general mucho |
| más sencilla. |
| |
| Algunos subsistemas y árboles de mantenimiento cuentan con información |
| adicional sobre su flujo de trabajo y expectativas, consulte |
| :ref:`Documentation/process/maintainer-handbooks.rst <maintainer_handbooks_main>`. |
| |
| Obtenga el código fuente actual |
| -------------------------------- |
| |
| Si no tiene a mano un repositorio con el código fuente actual del kernel, |
| use ``git`` para obtener uno. Querrá comenzar con el repositorio principal, |
| que se puede descargar con:: |
| |
| git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git |
| |
| Tenga en cuenta, sin embargo, que es posible que no desee desarrollar con |
| el árbol principal directamente. La mayoría de los maintainers de |
| subsistemas usan sus propios árboles de código fuente y quieren ver parches |
| preparados para esos árboles. Revise el campo **T:** para el subsistema |
| en el archivo MAINTAINERS para encontrar dicho árbol, o simplemente |
| pregunte al maintainer si el árbol no está listado allí. |
| |
| .. _sp_describe_changes: |
| |
| Describa sus cambios |
| --------------------- |
| |
| Describa su problema. Sea su parche una corrección de un error de una |
| línea o 5000 líneas para una nuevo "feature", debe haber un problema |
| subyacente que le motivó a hacer ese trabajo. Convenza al revisor de que |
| hay un problema que merece la pena solucionar y de que tiene sentido que |
| lea más allá del primer párrafo. |
| |
| Describa el impacto relativo al usuario. Cosas que estropeen el kernel y |
| los bloqueos son bastante convincentes, pero no todos los errores son tan |
| evidentes. Incluso si se detectó un problema durante la revisión del |
| código, describa el impacto que cree pueda tener en los usuarios. Tenga en |
| cuenta que la mayoría de instalaciones de Linux ejecutan kernels desde |
| árboles estables secundarios o árboles específicos de proveedor/producto |
| que seleccionan ("cherry-pick") solo parches específicos de upstream, así |
| que incluya cualquier cosa que pueda ayudar a dirigir su cambio |
| aguas abajo: circunstancias que producen cierta situación, extractos de |
| dmesg, descripciones del error fatal, regresiones de rendimiento, picos de |
| latencia, bloqueos, etc. |
| |
| Cuantifique optimizaciones y beneficios/perdidas. Si asegura mejoras en |
| rendimiento, consumo de memoria, huella del stack o tamaño de binario, |
| incluya números que lo respalden. Pero también describa costes no obvios. |
| Las optimizaciones generalmente no son gratuitas, sino un equilibrio entre |
| CPU, memoria y legibilidad; o, cuando se trata de heurísticas, entre |
| diferentes cargas de trabajo. Describa las desventajas esperadas de su |
| optimización para que el revisor pueda comparar las perdidas con los |
| beneficios. |
| |
| Una vez establecido el problema, describa lo que realmente está haciendo |
| al respecto en detalles técnicos. Es importante describir el cambio en |
| lenguaje sencillo para que el revisor verifique que el código se está |
| comportando como se pretende. |
| |
| El maintainer le agradecerá que escriba la descripción de su parche en un |
| formato que se pueda incorporar fácilmente en la gestión del código fuente |
| del sistema, ``git``, como un "commit log" (registros de los commits). |
| Consulte :ref:`sp_the_canonical_patch_format`. |
| |
| Resuelva solo un problema por parche. Si su descripción comienza a ser muy |
| larga, eso es una señal de que probablemente necesite dividir su parche. |
| Lea :ref:`split_changes`. |
| |
| Cuando envíe o vuelva a enviar un parche o una serie de parches, incluya la |
| descripción completa del parche y justificación del mismo. No se limite a |
| decir que esa es la versión N del parche (serie). No espere que el |
| maintainer del subsistema referencie versiones de parches anteriores o use |
| referencias URL para encontrar la descripción del parche y colocarla en el |
| parche. Es decir, el parche (serie) y su descripción deben ser |
| independientes. Esto beneficia tanto a los maintainers como a los |
| revisores. Algunos revisores probablemente ni siquiera recibieran versiones |
| anteriores del parche. |
| |
| Describa sus cambios en la forma imperativa, por ejemplo, "hacer que xyzzy |
| haga frotz" en lugar de "[Este parche] hace que xyzzy haga frotz" o "[Yo] |
| Cambié xyzzy para que haga frotz", como si estuviera dando órdenes al |
| código fuente para cambiar su comportamiento. |
| |
| Si desea hacer referencia a un commit específico, no se limite a hacer |
| referencia al ID SHA-1 del commit. Incluya también el resumen de una línea |
| del commit, para que sea más fácil para los revisores saber de qué se |
| trata. |
| Ejemplo:: |
| |
| Commit e21d2170f36602ae2708 ("video: quitar platform_set_drvdata() |
| innecesario") eliminó innecesario platform_set_drvdata(), pero dejó la |
| variable "dev" sin usar, bórrese. |
| |
| También debe asegurarse de utilizar al menos los primeros doce caracteres |
| del identificador SHA-1. El repositorio del kernel contiene muchos *muchos* |
| objetos, por lo que las colisiones con identificaciones más cortas son una |
| posibilidad real. Tenga en cuenta que, aunque no hay colisión con su |
| identificación de seis caracteres ahora, esa condición puede cambiar dentro |
| de cinco años. |
| |
| Si las discusiones relacionadas o cualquier otra información relativa al |
| cambio se pueden encontrar en la web, agregue las etiquetas 'Link:' que |
| apunten a estos. En caso de que su parche corrija un error, por poner un |
| ejemplo, agregue una etiqueta con una URL que haga referencia al informe en |
| los archivos de las listas de correo o un rastreador de errores; si el |
| parche es el resultado de alguna discusión anterior de la lista de correo o |
| algo documentado en la web, referencie esto. |
| |
| Cuando se vincule a archivos de listas de correo, preferiblemente use el |
| servicio de archivador de mensajes lore.kernel.org. Para crear la URL del |
| enlace, utilice el contenido del encabezado ("header") ``Message-Id`` del |
| mensaje sin los corchetes angulares que lo rodean. |
| Por ejemplo:: |
| |
| Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/ |
| |
| Verifique el enlace para asegurarse de que realmente funciona y apunta al |
| mensaje correspondiente. |
| |
| Sin embargo, intente que su explicación sea comprensible sin recursos |
| externos. Además de dar una URL a un archivo o error de la lista de correo, |
| resuma los puntos relevantes de la discusión que condujeron al parche tal y |
| como se envió. |
| |
| Si su parche corrige un error en un commit específico, por ejemplo |
| encontró un problema usando ``git bisect``, utilice la etiqueta 'Fixes:' |
| con los primeros 12 caracteres del ID SHA-1 y el resumen de una línea. No |
| divida la etiqueta en varias líneas, las etiquetas están exentas de la |
| regla "ajustar a 75 columnas" para simplificar análisis de scripts. Por |
| ejemplo:: |
| |
| Fixes: 54a4f0239f2e ("KVM: MMU: hacer que kvm_mmu_zap_page() |
| devuelva la cantidad de páginas que realmente liberó") |
| |
| Las siguientes configuraciones de ``git config`` se pueden usar para |
| agregar un bonito formato y generar este estilo con los comandos |
| ``git log`` o ``git show``:: |
| |
| [core] |
| abbrev = 12 |
| [pretty] |
| fixes = Fixes: %h (\"%s\") |
| |
| Un ejemplo de uso:: |
| |
| $ git log -1 --pretty=fixes 54a4f0239f2e |
| Fixes: 54a4f0239f2e ("KVM: MMU: hacer que kvm_mmu_zap_page() devuelva la cantidad de páginas que realmente liberó") |
| |
| .. _sp_split_changes: |
| |
| Separe sus cambios |
| ------------------- |
| |
| Separe cada **cambio lógico** en un parche separado. |
| |
| Por ejemplo, si sus cambios incluyen correcciones de errores y mejoras en |
| el rendimiento de un controlador, separe esos cambios en dos o más parches. |
| Si sus cambios incluyen una actualización de la API y una nueva controlador |
| que usa esta nueva API, sepárelos en dos parches. |
| |
| Por otro lado, si realiza un solo cambio en numerosos archivos, agrupe esos |
| cambios en un solo parche. Por lo tanto, un solo cambio lógico estará |
| contenido en un solo parche. |
| |
| El punto a recordar es que cada parche debe realizar un cambio que puede |
| ser verificado por los revisores fácilmente. Cada parche debe ser |
| justificable por sus propios méritos. |
| |
| Si un parche depende de otro parche para que un cambio sea completo, eso |
| está bien. Simplemente incluya que **"este parche depende del parche X"** |
| en la descripción de su parche. |
| |
| Cuando divida su cambio en una serie de parches, tenga especial cuidado en |
| asegurarse de que el kernel se compila y ejecuta correctamente después de |
| cada parche en la serie. Los desarrolladores que usan ``git bisect`` |
| para rastrear un problema pueden terminar dividiendo su serie de parches en |
| cualquier punto; no le agradecerán si introdujo errores a la mitad. |
| |
| Si no puede condensar su conjunto de parches en un conjunto más pequeño de |
| parches, solo publique, más o menos 15 a la vez, y espere la revisión e |
| integración. |
| |
| |
| Revise el estilo en sus cambios |
| -------------------------------- |
| |
| Revise su parche para ver si hay violaciones de estilo básico, cuyos |
| detalles pueden ser encontrados en Documentation/process/coding-style.rst. |
| No hacerlo simplemente desperdicia el tiempo de los revisores y su parche |
| será rechazado, probablemente sin siquiera ser leído. |
| |
| Una excepción importante es cuando se mueve código de un archivo a otro. |
| En tal caso, en absoluto debe modificar el código movido en el mismo parche |
| en que lo mueve. Esto divide claramente el acto de mover el código y sus |
| cambios. Esto ayuda mucho a la revisión de la diferencias reales y permite |
| que las herramientas rastreen mejor el historial del código en sí. |
| |
| Verifique sus parches con el verificador de estilo de parches antes de |
| enviarlos (scripts/checkpatch.pl). Tenga en cuenta, sin embargo, que el |
| verificador de estilo debe ser visto como una guía, no como un reemplazo |
| del juicio humano. Si su código es mejor con una violación entonces |
| probablemente sea mejor dejarlo estar. |
| |
| El verificador informa a tres niveles: |
| - ERROR: cosas que es muy probable que estén mal |
| - WARNING: Advertencia. Cosas que requieren una revisión cuidadosa |
| - CHECK: Revisar. Cosas que requieren pensarlo |
| |
| Debe poder justificar todas las violaciones que permanezcan en su parche. |
| |
| |
| Seleccione los destinatarios de su parche |
| ------------------------------------------ |
| |
| Siempre debe incluir en copia a los apropiados maintainers del subsistema |
| en cualquier parche con código que mantengan; revise a través del archivo |
| MAINTAINERS y el historial de revisión del código fuente para ver quiénes |
| son esos maintainers. El script scripts/get_maintainer.pl puede ser muy |
| útil en este paso (pase rutas a sus parches como argumentos para |
| scripts/get_maintainer.pl). Si no puede encontrar un maintainer del |
| subsistema en el que está trabajando, Andrew Morton |
| (akpm@linux-foundation.org) sirve como maintainer de último recurso. |
| |
| Normalmente, también debe elegir al menos una lista de correo para recibir |
| una copia de su conjunto de parches. linux-kernel@vger.kernel.org debe |
| usarse de forma predeterminada para todos los parches, pero el volumen en |
| esta lista ha hecho que muchos desarrolladores se desconecten. Busque en el |
| archivo MAINTAINERS una lista específica de los subsistemas; su parche |
| probablemente recibirá más atención allí. Sin embargo, no envíe spam a |
| listas no relacionadas. |
| |
| Muchas listas relacionadas con el kernel están alojadas en vger.kernel.org; |
| puedes encontrar un listado de estas en |
| http://vger.kernel.org/vger-lists.html. Existen listas relacionadas con el |
| kernel alojadas en otros lugares, no obstante. |
| |
| ¡No envíe más de 15 parches a la vez a las listas de correo de vger! |
| |
| Linus Torvalds es el árbitro final de todos los cambios aceptados en el |
| kernel de Linux. Su dirección de correo electrónico es |
| <torvalds@linux-foundation.org>. Recibe muchos correos electrónicos y, en |
| este momento, muy pocos parches pasan por Linus directamente, por lo que |
| normalmente debe hacer todo lo posible para -evitar- enviarle un correo |
| electrónico. |
| |
| Si tiene un parche que corrige un error de seguridad explotable, envíe ese |
| parche a security@kernel.org. Para errores graves, se debe mantener un |
| poco de discreción y permitir que los distribuidores entreguen el parche a |
| los usuarios; en esos casos, obviamente, el parche no debe enviarse a |
| ninguna lista pública. Revise también |
| Documentation/process/security-bugs.rst. |
| |
| Los parches que corrigen un error grave en un kernel en uso deben dirigirse |
| hacia los maintainers estables poniendo una línea como esta:: |
| |
| CC: stable@vger.kernel.org |
| |
| en el área de sign-off de su parche (es decir, NO un destinatario de correo |
| electrónico). También debe leer |
| Documentation/process/stable-kernel-rules.rst además de este documento. |
| |
| Si los cambios afectan las interfaces del kernel para el usuario, envíe al |
| maintainer de las MAN-PAGES (como se indica en el archivo MAINTAINERS) un |
| parche de páginas de manual, o al menos una notificación del cambio, para |
| que alguna información se abra paso en las páginas del manual. Los cambios |
| de la API del espacio de usuario también deben copiarse en |
| linux-api@vger.kernel.org. |
| |
| |
| Sin MIME, enlaces, compresión o archivos adjuntos. Solo texto plano |
| -------------------------------------------------------------------- |
| |
| Linus y otros desarrolladores del kernel deben poder leer y comentar sobre |
| los cambios que está enviando. Es importante para un desarrollador kernel |
| poder "citar" sus cambios, utilizando herramientas estándar de correo |
| electrónico, de modo que puedan comentar sobre partes específicas de su |
| código. |
| |
| Por este motivo, todos los parches deben enviarse por correo electrónico |
| "inline". La forma más sencilla de hacerlo es con ``git send-email``, que |
| es muy recomendable. Un tutorial interactivo para ``git send-email`` está |
| disponible en https://git-send-email.io. |
| |
| Si elige no usar ``git send-email``: |
| |
| .. warning:: |
| |
| Tenga cuidado con el ajuste de palabras de su editor que corrompe su |
| parche, si elige cortar y pegar su parche. |
| |
| No adjunte el parche como un archivo adjunto MIME, comprimido o no. Muchas |
| populares aplicaciones de correo electrónico no siempre transmiten un MIME |
| archivo adjunto como texto sin formato, por lo que es imposible comentar |
| en su código. Linus también necesita un poco más de tiempo para procesar un |
| archivo adjunto MIME, disminuyendo la probabilidad de que se acepte su |
| cambio adjunto en MIME. |
| |
| Excepción: si su proveedor de correo está destrozando parches, entonces |
| alguien puede pedir que los vuelva a enviar usando MIME. |
| |
| Consulte Documentation/process/email-clients.rst para obtener sugerencias |
| sobre cómo configurar su cliente de correo electrónico para que envíe sus |
| parches intactos. |
| |
| Responda a los comentarios de revisión |
| --------------------------------------- |
| |
| Es casi seguro que su parche recibirá comentarios de los revisores sobre |
| maneras en que se pueda mejorar el parche, en forma de respuesta a su |
| correo electrónico. Debe responder a esos comentarios; ignorar a los |
| revisores es una buena manera de ser ignorado de vuelta. Simplemente puede |
| responder a sus correos electrónicos para contestar a sus comentarios. |
| Revisiones a los comentarios o preguntas que no conduzcan a un cambio de |
| código deben casi con certeza generar un comentario o una entrada en el |
| "changelog" para que el próximo revisor entienda lo que está pasando. |
| |
| Asegúrese de decirles a los revisores qué cambios está haciendo y de |
| agradecerles que dediquen su tiempo. La revisión del código es un proceso |
| agotador y lento, y los revisores a veces se ponen de mal humor. Sin |
| embargo, incluso en ese caso, responda cortésmente y aborde los problemas |
| que hayan señalado. Al enviar un siguiente versión, agregue un |
| ``patch changelog`` (registro de cambios en los parches) a la carta de |
| presentación ("cover letter") o a parches individuales explicando la |
| diferencia con la presentación anterior (ver |
| :ref:`sp_the_canonical_patch_format`). |
| |
| Consulte Documentation/process/email-clients.rst para obtener |
| recomendaciones sobre clientes de correo electrónico y normas de etiqueta |
| en la lista de correo. |
| |
| .. _sp_resend_reminders: |
| |
| No se desanime o impaciente |
| --------------------------- |
| |
| Después de haber entregado su cambio, sea paciente y espere. Los revisores |
| son personas ocupadas y es posible que no lleguen a su parche de inmediato. |
| |
| Érase una vez, los parches solían desaparecer en el vacío sin comentarios, |
| pero el proceso de desarrollo funciona mejor que eso ahora. Debería |
| recibir comentarios dentro de una semana más o menos; si eso no sucede, |
| asegúrese de que ha enviado sus parches al lugar correcto. Espere un mínimo |
| de una semana antes de volver a enviar o hacer ping a los revisores, |
| posiblemente más durante periodos de mucho trabajo ocupados como "merge |
| windows". |
| |
| También está bien volver a enviar el parche o la serie de parches después |
| de un par de semanas con la palabra "RESEND" (reenviar) añadida a la línea |
| de asunto:: |
| |
| [PATCH Vx RESEND] sub/sys: Resumen condensado de parche |
| |
| No incluya "RESEND" cuando envíe una versión modificada de su parche o |
| serie de parches: "RESEND" solo se aplica al reenvío de un parche o serie |
| de parches que no hayan sido modificados de ninguna manera con respecto a |
| la presentación anterior. |
| |
| |
| Incluya PATCH en el asunto |
| -------------------------- |
| |
| Debido al alto tráfico de correo electrónico a Linus y al kernel de Linux, |
| es común prefijar su línea de asunto con [PATCH]. Esto le permite a Linus |
| y otros desarrolladores del kernel distinguir más fácilmente los parches de |
| otras discusiones por correo electrónico. |
| |
| ``git send-email`` lo hará automáticamente. |
| |
| |
| Firme su trabajo: el Certificado de Origen del Desarrollador |
| ------------------------------------------------------------ |
| |
| Para mejorar el seguimiento de quién hizo qué, especialmente con parches |
| que pueden filtrarse hasta su destino final a través de varias capas de |
| maintainers, hemos introducido un procedimiento de "sign-off" (aprobación) |
| en parches que se envían por correo electrónico. |
| |
| La aprobación es una simple línea al final de la explicación del parche, |
| que certifica que usted lo escribió o que tiene derecho a enviarlo como un |
| parche de código abierto. Las reglas son bastante simples: si usted puede |
| certificar lo siguiente: |
| |
| Certificado de Origen del Desarrollador 1.1 |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Al hacer una contribución a este proyecto, certifico que: |
| |
| (a) La contribución fue creada en su totalidad o en parte por mí y |
| tengo derecho a enviarlo bajo la licencia de código abierto |
| indicada en el documento; o |
| |
| (b) La contribución se basa en trabajo previo que, hasta donde yo |
| soy consciente, está cubierto por una licencia de código |
| abierto apropiada y tengo el derecho bajo esa licencia de |
| presentar tal trabajo con modificaciones, ya sean creadas en su |
| totalidad o en parte por mí, bajo la misma licencia de código |
| (salvo que sea permitido presentar bajo una licencia diferente), |
| tal y como se indica en el documento; o |
| |
| (c) La contribución me fue proporcionada directamente por alguna |
| otra persona que certificó (a), (b) o (c) y no he modificado |
| esto. |
| |
| (d) Entiendo y acepto que este proyecto y la contribución |
| son públicos y que un registro de la contribución (incluyendo |
| toda la información personal que envío con él, incluida mi |
| firma) es mantenida indefinidamente y puede ser redistribuida |
| de manera consistente con este proyecto o la(s) licencia(s) de |
| código abierto involucradas. |
| |
| entonces simplemente incluya una línea que rece:: |
| |
| Signed-off-by: Random J Developer <random@developer.example.org> |
| |
| usando su nombre real (lamentablemente, no pseudónimos ni contribuciones |
| anónimas). Esto se hará por usted automáticamente si usa ``git commit -s``. |
| Las reversiones de código también deben incluir "Signed-off-by". |
| ``git revert -s`` hace eso por usted. |
| |
| Algunas personas también ponen etiquetas adicionales al final. Simplemente |
| serán ignoradas por ahora, pero puede hacer esto para marcar procedimientos |
| internos de su empresa o simplemente señalar algún detalle especial sobre |
| la firma. |
| |
| Cualquier otro SoB (Signed-off-by:) después del SoB del autor es de |
| personas que manipulen y transporten el parche, pero no participaron en su |
| desarrollo. Las cadenas de SoB deben reflejar la ruta **real** del parche |
| de cómo se propagó a los maintainers y, en última instancia, a Linus, con |
| la primera entrada de SoB que señala la autoría principal de un solo autor. |
| |
| |
| Cuándo usar Acked-by:, Cc: y Co-developed-by por: |
| ------------------------------------------------- |
| |
| La etiqueta Signed-off-by: indica que el firmante estuvo involucrado en el |
| desarrollo del parche, o que él/ella se encontraba en el camino de entrega |
| del parche. |
| |
| Si una persona no estuvo directamente involucrada en la preparación o |
| administración de un parche pero desea expresar y registrar su aprobación, |
| entonces puede pedir que se agregue una línea Acked-by: al registro de |
| cambios del parche. |
| |
| Acked-by: a menudo lo usa el maintainer del código afectado cuando ese |
| maintainer no contribuyó ni envió el parche. |
| |
| Acked-by: no es tan formal como Signed-off-by:. Es una manera de marcar que |
| el "acker" ha revisado al menos ese parche y ha indicado su aceptación. Por |
| los merge de parches a veces convertirán manualmente el "sí, me parece bien" |
| de un acker en un Acked-by: (pero tenga en cuenta que por lo general es |
| mejor pedir un acuse de recibo explícito). |
| |
| Acked-by: no necesariamente indica el reconocimiento de todo el parche. |
| Por ejemplo, si un parche afecta a varios subsistemas y tiene un |
| Acked-by: de un maintainer del subsistema, entonces esto generalmente |
| indica el reconocimiento de solo la parte que afecta el código de ese |
| maintainer. Buen juicio debe ejercitarse aquí. En caso de duda, la gente |
| debe consultar la discusión original en los archivos de la lista de correo. |
| |
| Si una persona ha tenido la oportunidad de comentar un parche, pero no lo |
| ha hecho, puede incluir opcionalmente una etiqueta ``Cc:`` al parche. |
| Esta es la única etiqueta que se puede agregar sin una acción explícita por |
| parte de la persona a la que se nombre - pero debe indicar que esta persona |
| fue copiada en el parche. Esta etiqueta documenta que las partes |
| potencialmente interesadas han sido incluidas en la discusión. |
| |
| Co-developed-by: establece que el parche fue co-creado por múltiples |
| desarrolladores; se utiliza para dar atribución a los coautores (además del |
| autor atribuido por la etiqueta From:) cuando varias personas trabajan en |
| un solo parche. Ya que Co-developed-by: denota autoría, cada |
| Co-developed-by: debe ser inmediatamente seguido de Signed-off-by: del |
| coautor asociado. Se mantiene el procedimiento estándar, es decir, el orden |
| de las etiquetas Signed-off-by: debe reflejar el historial cronológico del |
| parche en la medida de lo posible, independientemente de si el autor se |
| atribuye a través de From: o Co-developed-by:. Cabe destacar que el último |
| Signed-off-by: siempre debe ser del desarrollador que envía el parche. |
| |
| Tenga en cuenta que la etiqueta From: es opcional cuando el autor From: es |
| también la persona (y correo electrónico) enumerados en la línea From: del |
| encabezado del correo electrónico. |
| |
| Ejemplo de un parche enviado por el From: autor:: |
| |
| <changelog> |
| |
| Co-developed-by: Primer coautor <primer@coauthor.example.org> |
| Signed-off-by: Primer coautor <primer@coauthor.example.org> |
| Co-developed-by: Segundo coautor <segundo@coautor.ejemplo.org> |
| Signed-off-by: Segundo coautor <segundo@coautor.ejemplo.org> |
| Signed-off-by: Autor del From <from@author.example.org> |
| |
| Ejemplo de un parche enviado por un Co-developed-by: autor:: |
| |
| From: Autor del From <from@author.example.org> |
| |
| <changelog> |
| |
| Co-developed-by: Co-Autor aleatorio <aleatorio@coauthor.example.org> |
| Signed-off-by: Coautor aleatorio <aleatorio@coauthor.example.org> |
| Signed-off-by: Autor del From <from@author.example.org> |
| Co-developed-by: Coautor que envió <sub@coauthor.example.org> |
| Signed-off-by: Coautor que envía <sub@coauthor.example.org> |
| |
| Uso de Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: y Fixes: |
| ---------------------------------------------------------------------- |
| |
| La etiqueta Reported-by (Reportado-por) otorga crédito a las personas que |
| encuentran errores y los reportan. Por favor, tenga en cuenta que si se |
| informó de un error en privado, debe pedir primero permiso antes de usar la |
| etiqueta Reported-by. La etiqueta está destinada a errores; por favor no la |
| use para acreditar peticiones de características. |
| |
| Una etiqueta Tested-by: indica que el parche se probó con éxito (en algún |
| entorno) por la persona nombrada. Esta etiqueta informa a los maintainers |
| de que se han realizado algunas pruebas, proporciona un medio para ubicar |
| "testers" (gente que pruebe) otros parches futuros y asegura el crédito |
| para los testers. |
| |
| Reviewed-by: en cambio, indica que el parche ha sido revisado y encontrado |
| aceptable de acuerdo con la Declaración del Revisor: |
| |
| Declaración de Supervisión del Revisor |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Al ofrecer mi etiqueta Reviewed-by:, afirmo que: |
| |
| (a) He llevado a cabo una revisión técnica de este parche para |
| evaluar su idoneidad y preparación para su inclusión en |
| el kernel principal. |
| |
| (b) Cualquier problema, inquietud o pregunta relacionada con el parche |
| han sido comunicados al remitente. Estoy satisfecho |
| con la respuesta del remitente a mis comentarios. |
| |
| (c) Si bien puede haber cosas que podrían mejorarse con esta |
| entrega, creo que es, en este momento, (1) una |
| modificación valiosa al kernel, y (2) libre de conocidas |
| cuestiones que argumentarían en contra de su inclusión. |
| |
| (d) Si bien he revisado el parche y creo que es correcto, |
| no hago (a menos que se indique explícitamente en otro lugar) ninguna |
| garantía o avales de que logrará su definido |
| propósito o función en cualquier situación dada. |
| |
| Una etiqueta Reviewed-by es una declaración de opinión de que el parche es |
| una modificación apropiada al kernel sin que haya ningún problema grave |
| a nivel técnico. Cualquier revisor interesado (que haya hecho el trabajo) |
| puede ofrecer una etiqueta Reviewed-by para un parche. Esta etiqueta sirve |
| para dar crédito a revisores e informar a los maintainers del grado de |
| revisión que se ha hecho en el parche. Las etiquetas Reviewed-by, cuando |
| las otorgan revisores conocidos por entender del tema y realizar |
| revisiones exhaustivas, normalmente aumentan la probabilidad de que su |
| parche entre en el kernel. |
| |
| Las etiquetas Tested-by y Reviewed-by, una vez recibidas en la lista de |
| correo por el tester o revisor, deben ser incluidas por el autor de los |
| parches pertinentes al enviar próximas versiones. Sin embargo, si el parche |
| ha cambiado sustancialmente en la siguiente versión, es posible que estas |
| etiquetas ya no sean aplicables y, por lo tanto, deben eliminarse. Por lo |
| general, se debe mencionar la eliminación de las etiquetas Tested-by o |
| Reviewed-by de alguien en el registro de cambios del parche (después del |
| separador '---'). |
| |
| Una etiqueta Suggested-by: indica que la idea del parche es sugerida por la |
| persona nombrada y asegura el crédito a la persona por la idea. Tenga en |
| cuenta que esto no debe agregarse sin el permiso del "reporter", |
| especialmente si la idea no fue publicada en un foro público. Dicho esto, |
| si diligentemente acreditamos a los reporters de ideas, con suerte, se |
| sentirán inspirados para ayudarnos nuevamente en el futuro. |
| |
| Una etiqueta Fixes: indica que el parche corrige un problema en un commit |
| anterior. Esto se utiliza para facilitar descubrir dónde se originó un |
| error, lo que puede ayudar a revisar una corrección de errores. Esta |
| etiqueta también ayuda al equipo del kernel estable a determinar qué |
| versiones estables del kernel deberían recibir su corrección. Este es el |
| método preferido para indicar un error corregido por el parche. Revise |
| :ref:`describe_changes` para más detalles. |
| |
| Nota: Adjuntar una etiqueta Fixes: no subvierte las reglas estables del |
| proceso del kernel ni el requisito de CC: stable@vger.kernel.org en todos |
| los parches candidatos de ramas estables. Para obtener más información, lea |
| Documentation/process/stable-kernel-rules.rst. |
| |
| .. _sp_the_canonical_patch_format: |
| |
| Formato de parche canónico |
| --------------------------- |
| |
| Esta sección describe cómo debe darse formato al propio parche. Tenga en |
| cuenta que, si tiene sus parches almacenados en un repositorio ``git``, el |
| parche con formato adecuado se puede obtener con ``git format-patch``. Las |
| herramientas no pueden crear el texto necesario, sin embargo, así que lea |
| las instrucciones a continuación de todos modos. |
| |
| La línea de asunto del parche canónico es:: |
| |
| Asunto: [PATCH 001/123] subsistema: frase de resumen |
| |
| El cuerpo del mensaje del parche canónico contiene lo siguiente: |
| |
| - Una línea ``from`` que especifica el autor del parche, seguida de una |
| línea vacía (solo es necesario si la persona que envía el parche no es |
| el autor). |
| |
| - El cuerpo de la explicación, línea envuelta en 75 columnas, que se |
| copiara en el registro de cambios permanente para describir este parche. |
| |
| - Una línea vacía. |
| |
| - Las líneas ``Signed-off-by:``, descritas anteriormente, que |
| también vaya en el registro de cambios. |
| |
| - Una línea de marcador que contiene simplemente ``---``. |
| |
| - Cualquier comentario adicional que no sea adecuado para el registro de |
| cambios. |
| |
| - El parche real (output de ``diff``). |
| |
| El formato de la línea de asunto hace que sea muy fácil ordenar los correos |
| electrónicos alfabéticamente por línea de asunto - prácticamente cualquier |
| lector de correo electrónico permite esto, ya que debido a que el número de |
| secuencia se rellena con ceros, el orden numérico y alfabético es el mismo. |
| |
| El ``subsistema`` en el asunto del correo electrónico debe identificar qué |
| área o subsistema del kernel está siendo parcheado. |
| |
| La ``frase de resumen`` en el Asunto del correo electrónico debe describir |
| de forma concisa el parche que contiene ese correo electrónico. La |
| ``frase resumen`` no debe ser un nombre de archivo. No use la mismo ``frase |
| resumen`` para cada parche en una serie completa de parches (donde una |
| `` serie de parches`` (patch series) es una secuencia ordenada de múltiples |
| parches relacionados). |
| |
| Tenga en cuenta que la ``frase de resumen`` de su correo electrónico se |
| convierte en un identificador global único para ese parche. Se propaga por |
| hasta el registro de cambios de ``git``. La ``frase resumida`` se puede |
| usar más adelante en discusiones de desarrolladores que se refieran al |
| parche. La gente querrá buscar en Google la ``frase de resumen`` para leer |
| la discusión al respecto del parche. También será lo único que la gente |
| podrá ver rápidamente cuando, dos o tres meses después, estén pasando por |
| quizás miles de parches usando herramientas como ``gitk`` o ``git log |
| --oneline``. |
| |
| Por estas razones, el ``resumen`` no debe tener más de 70-75 caracteres, y |
| debe describir tanto lo que cambia el parche como por qué el parche podría |
| ser necesario. Es un reto ser tanto sucinto como descriptivo, pero eso es |
| lo que un resumen bien escrito debería hacer. |
| |
| La ``frase de resumen`` puede estar precedida por etiquetas encerradas en |
| corchetes: "Asunto: [PATCH <etiqueta>...] <frase de resumen>". Las |
| etiquetas no se consideran parte de la frase de resumen, pero describen |
| cómo debería ser tratado el parche. Las etiquetas comunes pueden incluir un |
| descriptor de versión si las múltiples versiones del parche se han enviado |
| en respuesta a comentarios (es decir, "v1, v2, v3") o "RFC" para indicar |
| una solicitud de comentarios. |
| |
| Si hay cuatro parches en una serie de parches, los parches individuales |
| pueden enumerarse así: 1/4, 2/4, 3/4, 4/4. Esto asegura que los |
| desarrolladores entiendan el orden en que se deben aplicar los parches y |
| que han revisado o aplicado todos los parches de la serie de parches. |
| |
| Aquí hay algunos buenos ejemplos de Asuntos:: |
| |
| Asunto: [PATCH 2/5] ext2: mejorar la escalabilidad de la búsqueda de mapas de bits |
| Asunto: [PATCH v2 27/01] x86: corregir el seguimiento de eflags |
| Asunto: [PATCH v2] sub/sys: resumen conciso del parche |
| Asunto: [PATCH v2 M/N] sub/sys: resumen conciso del parche |
| |
| La línea ``from`` debe ser la primera línea en el cuerpo del mensaje, |
| y tiene la forma:: |
| |
| From: Autor del parche <autor@ejemplo.com> |
| |
| La línea ``From`` especifica quién será acreditado como el autor del parche |
| en el registro de cambios permanente. Si falta la línea ``from``, entonces |
| la línea ``From:`` del encabezado del correo electrónico se usará para |
| determinar el autor del parche en el registro de cambios. |
| |
| La explicación estará incluida en el commit del changelog permanente, por |
| lo que debería tener sentido para un lector competente que hace mucho tiempo |
| ha olvidado los detalles de la discusión que podrían haber llevado a |
| este parche. Incluidos los síntomas del fallo que el parche trate |
| (mensajes de registro del kernel, mensajes de oops, etc.) son especialmente |
| útiles para personas que podrían estar buscando en los registros de |
| commits en busca de la aplicación del parche. El texto debe estar escrito |
| con tal detalle que cuando se lea semanas, meses o incluso años después, |
| pueda dar al lector la información necesaria y detalles para comprender el |
| razonamiento de **por qué** se creó el parche. |
| |
| Si un parche corrige una falla de compilación, puede que no sea necesario |
| incluir _todos_ los errores de compilación; pero lo suficiente como para |
| que sea probable que alguien que busque el parche puede encontrarlo. Como |
| en la ``frase de resumen``, es importante ser tanto sucinto como |
| descriptivo. |
| |
| La línea marcadora ``---`` cumple el propósito esencial de marcar para |
| herramientas de manejo de parches donde termina el mensaje de registro de |
| cambios. |
| |
| Un buen uso de los comentarios adicionales después del marcador ``---`` es |
| para ``diffstat``, para mostrar qué archivos han cambiado, y el número de |
| líneas insertadas y eliminadas por archivo. Un ``diffstat`` es |
| especialmente útil en parches más grandes. Si va a incluir un ``diffstat`` |
| después del marcador ``---``, utilice las opciones ``diffstat`` |
| ``-p 1 -w 70`` para que los nombres de archivo se enumeran desde la parte |
| superior del árbol de fuentes del kernel y no use demasiado espacio |
| horizontal (que encaje fácilmente en 80 columnas, tal vez con alguna |
| indentación). (``git`` genera diffstats apropiados por defecto). |
| |
| Otros comentarios relevantes solo en el momento o para el maintainer, pero |
| no adecuados para el registro de cambios permanente, también debe ir aquí. |
| Un buen ejemplo de tales comentarios podría ser ``registros de cambios de |
| parches`` que describen qué ha cambiado entre la versión v1 y v2 del |
| parche. |
| |
| Por favor, ponga esta información **después** de la línea ``---`` que |
| separa el registro de cambios del resto del parche. La información de la |
| versión no forma parte del registro de cambios que se incluye con el árbol |
| git. Es información adicional para los revisores. Si se coloca encima de la |
| etiquetas de commit, necesita interacción manual para eliminarlo. Si esta |
| debajo de la línea de separación, se quita automáticamente al aplicar el |
| parche:: |
| |
| <mensaje de commit> |
| ... |
| Signed-off-by: Autor <autor@correo> |
| --- |
| V2 -> V3: función auxiliar redundante eliminada |
| V1 -> V2: estilo de código limpio y comentarios de revisión abordados |
| |
| ruta/al/archivo | 5+++-- |
| ... |
| |
| Revise más detalles sobre el formato de parche adecuado en las siguientes |
| referencias |
| |
| .. _sp_backtraces: |
| |
| Retrocesos en mensajes de confirmación |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| Los "backtraces" (deshacer el camino) ayuda a documentar la cadena de |
| llamadas que conducen a un problema. Sin embargo, no todos los rastreos son |
| útiles. Por ejemplo, las tempranas cadenas de llamadas de inicio son únicas |
| y obvias. Sin embargo, al copiar la salida completa de dmesg textualmente, |
| incluye información que distrae, como marcas de tiempo, listas de módulos, |
| registro y volcados de pila. |
| |
| Por lo tanto, los backtraces más útiles deben contener los datos |
| relevantes de la información vertida, lo que hace que sea más fácil |
| centrarse en el verdadero tema. Este es un ejemplo de un backtrace bien |
| recortado:: |
| |
| error de acceso de MSR no verificado: WRMSR a 0xd51 (intentó escribir 0x0000000000000064) |
| en rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20) |
| Rastreo de llamadas: |
| mba_wrmsr |
| update_domains |
| rdtgroup_mkdir |
| |
| .. _sp_explicit_in_reply_to: |
| |
| In-Reply-To explicitos en las cabeceras |
| --------------------------------------- |
| |
| Puede ser útil agregar manualmente encabezados In-Reply-To: a un parche |
| (por ejemplo, al usar ``git send-email``) para asociar el parche con una |
| discusión anterior relevante, por ejemplo para vincular una corrección de |
| errores al correo electrónico con el informe de errores. Sin embargo, para |
| una serie de parches múltiples, generalmente es mejor evitar usar |
| In-Reply-To: para vincular a versiones anteriores de la serie. De esta |
| forma, varias versiones del parche no se convierten en un inmanejable |
| bosque de referencias en clientes de correo electrónico. Si un enlace es |
| útil, puede usar el redirector https://lore.kernel.org/ (por ejemplo, en |
| el texto de la carta de introducción del correo electrónico) para vincular |
| a una versión anterior de la serie de parches. |
| |
| |
| Proporcionar información de árbol base |
| -------------------------------------- |
| |
| Cuando otros desarrolladores reciben sus parches y comienzan el proceso de |
| revisión, a menudo es útil para ellos saber en qué parte del historial del |
| árbol deben colocar su trabajo. Esto es particularmente útil para CI |
| automatizado de procesos que intentan ejecutar una serie de pruebas para |
| establecer la calidad de su envío antes de que el maintainer comience la |
| revisión. |
| |
| Si está utilizando ``git format-patch`` para generar sus parches, puede |
| incluir automáticamente la información del árbol base en su envío usando el |
| parámetro ``--base``. La forma más fácil y conveniente de usar esta opción |
| es con "topical branches" (ramas de temas):: |
| |
| $ git checkout -t -b my-topical-branch master |
| Branch 'my-topical-branch' set up to track local branch 'master'. |
| Switched to a new branch 'my-topical-branch' |
| |
| [realice sus cambios y ediciones] |
| |
| $ git format-patch --base=auto --cover-letter -o outgoing/ master |
| outgoing/0000-cover-letter.patch |
| outgoing/0001-First-Commit.patch |
| outgoing/... |
| |
| Cuando abra ``outgoing/0000-cover-letter.patch`` para editar, tenga en |
| cuenta que tendrá el tráiler ``base-commit:`` al final, que proporciona al |
| revisor y a las herramientas de CI suficiente información para realizar |
| correctamente ``git am`` sin preocuparse por los conflictos:: |
| |
| $ git checkout -b patch-review [base-commit-id] |
| Switched to a new branch 'patch-review' |
| $ git am patches.mbox |
| Applying: First Commit |
| Applying: ... |
| |
| Consulte ``man git-format-patch`` para obtener más información al respecto |
| de esta opción. |
| |
| .. Note:: |
| |
| La función ``--base`` se introdujo en la versión 2.9.0 de git. |
| |
| Si no está utilizando git para dar forma a sus parches, aún puede incluir |
| el mismo tráiler ``base-commit`` para indicar el hash de confirmación del |
| árbol en que se basa su trabajo. Debe agregarlo en la carta de presentación |
| o en el primer parche de la serie y debe colocarse ya sea bajo la línea |
| ``---`` o en la parte inferior de todos los demás contenido, justo antes de |
| su firma del correo electrónico. |
| |
| |
| Referencias |
| ----------- |
| |
| "The perfect patch" (tpp) por Andrew Morton. |
| <https://www.ozlabs.org/~akpm/stuff/tpp.txt> |
| |
| "Linux kernel patch submission format" por Jeff Garzik. |
| <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html> |
| |
| "How to piss off a kernel subsystem maintainer" por Greg Kroah-Hartman. |
| <http://www.kroah.com/log/linux/maintainer.html> |
| |
| <http://www.kroah.com/log/linux/maintainer-02.html> |
| |
| <http://www.kroah.com/log/linux/maintainer-03.html> |
| |
| <http://www.kroah.com/log/linux/maintainer-04.html> |
| |
| <http://www.kroah.com/log/linux/maintainer-05.html> |
| |
| <http://www.kroah.com/log/linux/maintainer-06.html> |
| |
| NO!!!! Gente, no mas bombas enormes de parches a linux-kernel@vger.kernel.org! |
| <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net> |
| |
| Kernel Documentation/process/coding-style.rst |
| |
| Email de Linus Torvalds sobre la forma canónica de los parches: |
| <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org> |
| |
| "On submitting kernel patches" por Andi Kleen |
| Algunas estrategias para conseguir incluir cambios complicados o |
| controvertidos. |
| |
| http://halobates.de/on-submitting-patches.pdf |