162306a36Sopenharmony_ci.. include:: ../disclaimer-sp.rst
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci:Original: :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
462306a36Sopenharmony_ci:Translator: Carlos Bilbao <carlos.bilbao@amd.com>
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci.. _sp_submittingpatches:
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciEnvío de parches: la guía esencial para incluir su código en el kernel
962306a36Sopenharmony_ci=======================================================================
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciPara una persona o empresa que desee enviar un cambio al kernel Linux,
1262306a36Sopenharmony_ciel proceso puede en ocasiones resultar desalentador si no se está
1362306a36Sopenharmony_cifamiliarizado con "el sistema". Este texto es una colección de sugerencias
1462306a36Sopenharmony_cique pueden aumentar considerablemente las posibilidades de que se acepte su
1562306a36Sopenharmony_cicambio.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciEste documento contiene una gran cantidad de sugerencias en un formato
1862306a36Sopenharmony_cirelativamente conciso. Para obtener información detallada sobre cómo
1962306a36Sopenharmony_cifunciona el proceso de desarrollo del kernel, consulte
2062306a36Sopenharmony_ciDocumentation/process/development-process.rst. Además, lea
2162306a36Sopenharmony_ciDocumentation/process/submit-checklist.rst para obtener una lista de
2262306a36Sopenharmony_cielementos a verificar antes de enviar código. Para los parches de
2362306a36Sopenharmony_ci"binding" del árbol de dispositivos, lea
2462306a36Sopenharmony_ciDocumentation/devicetree/bindings/submitting-patches.rst.
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciEsta documentación asume que está usando ``git`` para preparar sus parches.
2762306a36Sopenharmony_ciSi no está familiarizado con ``git``, le recomendamos que aprenda a
2862306a36Sopenharmony_ciusarlo, le hará la vida como desarrollador del kernel y en general mucho
2962306a36Sopenharmony_cimás sencilla.
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciAlgunos subsistemas y árboles de mantenimiento cuentan con información
3262306a36Sopenharmony_ciadicional sobre su flujo de trabajo y expectativas, consulte
3362306a36Sopenharmony_ci:ref:`Documentation/process/maintainer-handbooks.rst <maintainer_handbooks_main>`.
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciObtenga el código fuente actual
3662306a36Sopenharmony_ci--------------------------------
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciSi no tiene a mano un repositorio con el código fuente actual del kernel,
3962306a36Sopenharmony_ciuse ``git`` para obtener uno. Querrá comenzar con el repositorio principal,
4062306a36Sopenharmony_cique se puede descargar con::
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci  git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciTenga en cuenta, sin embargo, que es posible que no desee desarrollar con
4562306a36Sopenharmony_ciel árbol principal directamente. La mayoría de los maintainers de
4662306a36Sopenharmony_cisubsistemas usan sus propios árboles de código fuente y quieren ver parches
4762306a36Sopenharmony_cipreparados para esos árboles. Revise el campo **T:** para el subsistema
4862306a36Sopenharmony_cien el archivo MAINTAINERS para encontrar dicho árbol, o simplemente
4962306a36Sopenharmony_cipregunte al maintainer si el árbol no está listado allí.
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci.. _sp_describe_changes:
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciDescriba sus cambios
5462306a36Sopenharmony_ci---------------------
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciDescriba su problema. Sea su parche una corrección de un error de una
5762306a36Sopenharmony_cilínea o 5000 líneas para una nuevo "feature", debe haber un problema
5862306a36Sopenharmony_cisubyacente que le motivó a hacer ese trabajo. Convenza al revisor de que
5962306a36Sopenharmony_cihay un problema que merece la pena solucionar y de que tiene sentido que
6062306a36Sopenharmony_cilea más allá del primer párrafo.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciDescriba el impacto relativo al usuario. Cosas que estropeen el kernel y
6362306a36Sopenharmony_cilos bloqueos son bastante convincentes, pero no todos los errores son tan
6462306a36Sopenharmony_cievidentes. Incluso si se detectó un problema durante la revisión del
6562306a36Sopenharmony_cicódigo, describa el impacto que cree pueda tener en los usuarios. Tenga en
6662306a36Sopenharmony_cicuenta que la mayoría de instalaciones de Linux ejecutan kernels desde
6762306a36Sopenharmony_ciárboles estables secundarios o árboles específicos de proveedor/producto
6862306a36Sopenharmony_cique seleccionan ("cherry-pick") solo parches específicos de upstream, así
6962306a36Sopenharmony_cique incluya cualquier cosa que pueda ayudar a dirigir su cambio
7062306a36Sopenharmony_ciaguas abajo: circunstancias que producen cierta situación, extractos de
7162306a36Sopenharmony_cidmesg, descripciones del error fatal, regresiones de rendimiento, picos de
7262306a36Sopenharmony_cilatencia, bloqueos, etc.
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciCuantifique optimizaciones y beneficios/perdidas. Si asegura mejoras en
7562306a36Sopenharmony_cirendimiento, consumo de memoria, huella del stack o tamaño de binario,
7662306a36Sopenharmony_ciincluya números que lo respalden. Pero también describa costes no obvios.
7762306a36Sopenharmony_ciLas optimizaciones generalmente no son gratuitas, sino un equilibrio entre
7862306a36Sopenharmony_ciCPU, memoria y legibilidad; o, cuando se trata de heurísticas, entre
7962306a36Sopenharmony_cidiferentes cargas de trabajo. Describa las desventajas esperadas de su
8062306a36Sopenharmony_cioptimización para que el revisor pueda comparar las perdidas con los
8162306a36Sopenharmony_cibeneficios.
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciUna vez establecido el problema, describa lo que realmente está haciendo
8462306a36Sopenharmony_cial respecto en detalles técnicos. Es importante describir el cambio en
8562306a36Sopenharmony_cilenguaje sencillo para que el revisor verifique que el código se está
8662306a36Sopenharmony_cicomportando como se pretende.
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciEl maintainer le agradecerá que escriba la descripción de su parche en un
8962306a36Sopenharmony_ciformato que se pueda incorporar fácilmente en la gestión del código fuente
9062306a36Sopenharmony_cidel sistema, ``git``, como un "commit log" (registros de los commits).
9162306a36Sopenharmony_ciConsulte :ref:`sp_the_canonical_patch_format`.
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ciResuelva solo un problema por parche. Si su descripción comienza a ser muy
9462306a36Sopenharmony_cilarga, eso es una señal de que probablemente necesite dividir su parche.
9562306a36Sopenharmony_ciLea :ref:`split_changes`.
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_ciCuando envíe o vuelva a enviar un parche o una serie de parches, incluya la
9862306a36Sopenharmony_cidescripción completa del parche y justificación del mismo. No se limite a
9962306a36Sopenharmony_cidecir que esa es la versión N del parche (serie). No espere que el
10062306a36Sopenharmony_cimaintainer del subsistema referencie versiones de parches anteriores o use
10162306a36Sopenharmony_cireferencias URL para encontrar la descripción del parche y colocarla en el
10262306a36Sopenharmony_ciparche. Es decir, el parche (serie) y su descripción deben ser
10362306a36Sopenharmony_ciindependientes. Esto beneficia tanto a los maintainers como a los
10462306a36Sopenharmony_cirevisores. Algunos revisores probablemente ni siquiera recibieran versiones
10562306a36Sopenharmony_cianteriores del parche.
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ciDescriba sus cambios en la forma imperativa, por ejemplo, "hacer que xyzzy
10862306a36Sopenharmony_cihaga frotz" en lugar de "[Este parche] hace que xyzzy haga frotz" o "[Yo]
10962306a36Sopenharmony_ciCambié xyzzy para que haga frotz", como si estuviera dando órdenes al
11062306a36Sopenharmony_cicódigo fuente para cambiar su comportamiento.
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ciSi desea hacer referencia a un commit específico, no se limite a hacer
11362306a36Sopenharmony_cireferencia al ID SHA-1 del commit. Incluya también el resumen de una línea
11462306a36Sopenharmony_cidel commit, para que sea más fácil para los revisores saber de qué se
11562306a36Sopenharmony_citrata.
11662306a36Sopenharmony_ciEjemplo::
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_ci	Commit e21d2170f36602ae2708 ("video: quitar platform_set_drvdata()
11962306a36Sopenharmony_ci	innecesario") eliminó innecesario platform_set_drvdata(), pero dejó la
12062306a36Sopenharmony_ci	variable "dev" sin usar, bórrese.
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ciTambién debe asegurarse de utilizar al menos los primeros doce caracteres
12362306a36Sopenharmony_cidel identificador SHA-1. El repositorio del kernel contiene muchos *muchos*
12462306a36Sopenharmony_ciobjetos, por lo que las colisiones con identificaciones más cortas son una
12562306a36Sopenharmony_ciposibilidad real. Tenga en cuenta que, aunque no hay colisión con su
12662306a36Sopenharmony_ciidentificación de seis caracteres ahora, esa condición puede cambiar dentro
12762306a36Sopenharmony_cide cinco años.
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciSi las discusiones relacionadas o cualquier otra información relativa al
13062306a36Sopenharmony_cicambio se pueden encontrar en la web, agregue las etiquetas 'Link:' que
13162306a36Sopenharmony_ciapunten a estos. En caso de que su parche corrija un error, por poner un
13262306a36Sopenharmony_ciejemplo, agregue una etiqueta con una URL que haga referencia al informe en
13362306a36Sopenharmony_cilos archivos de las listas de correo o un rastreador de errores; si el
13462306a36Sopenharmony_ciparche es el resultado de alguna discusión anterior de la lista de correo o
13562306a36Sopenharmony_cialgo documentado en la web, referencie esto.
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ciCuando se vincule a archivos de listas de correo, preferiblemente use el
13862306a36Sopenharmony_ciservicio de archivador de mensajes lore.kernel.org. Para crear la URL del
13962306a36Sopenharmony_cienlace, utilice el contenido del encabezado ("header") ``Message-Id`` del
14062306a36Sopenharmony_cimensaje sin los corchetes angulares que lo rodean.
14162306a36Sopenharmony_ciPor ejemplo::
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci    Link: https://lore.kernel.org/r/30th.anniversary.repost@klaava.Helsinki.FI/
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ciVerifique el enlace para asegurarse de que realmente funciona y apunta al
14662306a36Sopenharmony_cimensaje correspondiente.
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ciSin embargo, intente que su explicación sea comprensible sin recursos
14962306a36Sopenharmony_ciexternos. Además de dar una URL a un archivo o error de la lista de correo,
15062306a36Sopenharmony_ciresuma los puntos relevantes de la discusión que condujeron al parche tal y
15162306a36Sopenharmony_cicomo se envió.
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ciSi su parche corrige un error en un commit específico, por ejemplo
15462306a36Sopenharmony_ciencontró un problema usando ``git bisect``, utilice la etiqueta 'Fixes:'
15562306a36Sopenharmony_cicon los primeros 12 caracteres del ID SHA-1 y el resumen de una línea. No
15662306a36Sopenharmony_cidivida la etiqueta en varias líneas, las etiquetas están exentas de la
15762306a36Sopenharmony_ciregla "ajustar a 75 columnas" para simplificar análisis de scripts. Por
15862306a36Sopenharmony_ciejemplo::
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci	Fixes: 54a4f0239f2e ("KVM: MMU: hacer que kvm_mmu_zap_page()
16162306a36Sopenharmony_ci	devuelva la cantidad de páginas que realmente liberó")
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ciLas siguientes configuraciones de ``git config`` se pueden usar para
16462306a36Sopenharmony_ciagregar un bonito formato y generar este estilo con los comandos
16562306a36Sopenharmony_ci``git log`` o ``git show``::
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	[core]
16862306a36Sopenharmony_ci		abbrev = 12
16962306a36Sopenharmony_ci	[pretty]
17062306a36Sopenharmony_ci		fixes = Fixes: %h (\"%s\")
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ciUn ejemplo de uso::
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci	$ git log -1 --pretty=fixes 54a4f0239f2e
17562306a36Sopenharmony_ci	Fixes: 54a4f0239f2e ("KVM: MMU: hacer que kvm_mmu_zap_page() devuelva la cantidad de páginas que realmente liberó")
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_ci.. _sp_split_changes:
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ciSepare sus cambios
18062306a36Sopenharmony_ci-------------------
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ciSepare cada **cambio lógico** en un parche separado.
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciPor ejemplo, si sus cambios incluyen correcciones de errores y mejoras en
18562306a36Sopenharmony_ciel rendimiento de un controlador, separe esos cambios en dos o más parches.
18662306a36Sopenharmony_ciSi sus cambios incluyen una actualización de la API y una nueva controlador
18762306a36Sopenharmony_cique usa esta nueva API, sepárelos en dos parches.
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciPor otro lado, si realiza un solo cambio en numerosos archivos, agrupe esos
19062306a36Sopenharmony_cicambios en un solo parche. Por lo tanto, un solo cambio lógico estará
19162306a36Sopenharmony_cicontenido en un solo parche.
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ciEl punto a recordar es que cada parche debe realizar un cambio que puede
19462306a36Sopenharmony_ciser verificado por los revisores fácilmente. Cada parche debe ser
19562306a36Sopenharmony_cijustificable por sus propios méritos.
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ciSi un parche depende de otro parche para que un cambio sea completo, eso
19862306a36Sopenharmony_ciestá bien. Simplemente incluya que **"este parche depende del parche X"**
19962306a36Sopenharmony_cien la descripción de su parche.
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ciCuando divida su cambio en una serie de parches, tenga especial cuidado en
20262306a36Sopenharmony_ciasegurarse de que el kernel se compila y ejecuta correctamente después de
20362306a36Sopenharmony_cicada parche en la serie. Los desarrolladores que usan ``git bisect``
20462306a36Sopenharmony_cipara rastrear un problema pueden terminar dividiendo su serie de parches en
20562306a36Sopenharmony_cicualquier punto; no le agradecerán si introdujo errores a la mitad.
20662306a36Sopenharmony_ci
20762306a36Sopenharmony_ciSi no puede condensar su conjunto de parches en un conjunto más pequeño de
20862306a36Sopenharmony_ciparches, solo publique, más o menos 15 a la vez, y espere la revisión e
20962306a36Sopenharmony_ciintegración.
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ciRevise el estilo en sus cambios
21362306a36Sopenharmony_ci--------------------------------
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ciRevise su parche para ver si hay violaciones de estilo básico, cuyos
21662306a36Sopenharmony_cidetalles pueden ser encontrados en Documentation/process/coding-style.rst.
21762306a36Sopenharmony_ciNo hacerlo simplemente desperdicia el tiempo de los revisores y su parche
21862306a36Sopenharmony_ciserá rechazado, probablemente sin siquiera ser leído.
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_ciUna excepción importante es cuando se mueve código de un archivo a otro.
22162306a36Sopenharmony_ciEn tal caso, en absoluto debe modificar el código movido en el mismo parche
22262306a36Sopenharmony_cien que lo mueve. Esto divide claramente el acto de mover el código y sus
22362306a36Sopenharmony_cicambios. Esto ayuda mucho a la revisión de la diferencias reales y permite
22462306a36Sopenharmony_cique las herramientas rastreen mejor el historial del código en sí.
22562306a36Sopenharmony_ci
22662306a36Sopenharmony_ciVerifique sus parches con el verificador de estilo de parches antes de
22762306a36Sopenharmony_cienviarlos (scripts/checkpatch.pl). Tenga en cuenta, sin embargo, que el
22862306a36Sopenharmony_civerificador de estilo debe ser visto como una guía, no como un reemplazo
22962306a36Sopenharmony_cidel juicio humano. Si su código es mejor con una violación entonces
23062306a36Sopenharmony_ciprobablemente sea mejor dejarlo estar.
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ciEl verificador informa a tres niveles:
23362306a36Sopenharmony_ci - ERROR: cosas que es muy probable que estén mal
23462306a36Sopenharmony_ci - WARNING: Advertencia. Cosas que requieren una revisión cuidadosa
23562306a36Sopenharmony_ci - CHECK: Revisar. Cosas que requieren pensarlo
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ciDebe poder justificar todas las violaciones que permanezcan en su parche.
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci
24062306a36Sopenharmony_ciSeleccione los destinatarios de su parche
24162306a36Sopenharmony_ci------------------------------------------
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ciSiempre debe incluir en copia a los apropiados maintainers del subsistema
24462306a36Sopenharmony_cien cualquier parche con código que mantengan; revise a través del archivo
24562306a36Sopenharmony_ciMAINTAINERS y el historial de revisión del código fuente para ver quiénes
24662306a36Sopenharmony_cison esos maintainers. El script scripts/get_maintainer.pl puede ser muy
24762306a36Sopenharmony_ciútil en este paso (pase rutas a sus parches como argumentos para
24862306a36Sopenharmony_ciscripts/get_maintainer.pl). Si no puede encontrar un maintainer del
24962306a36Sopenharmony_cisubsistema en el que está trabajando, Andrew Morton
25062306a36Sopenharmony_ci(akpm@linux-foundation.org) sirve como maintainer de último recurso.
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciNormalmente, también debe elegir al menos una lista de correo para recibir
25362306a36Sopenharmony_ciuna copia de su conjunto de parches. linux-kernel@vger.kernel.org debe
25462306a36Sopenharmony_ciusarse de forma predeterminada para todos los parches, pero el volumen en
25562306a36Sopenharmony_ciesta lista ha hecho que muchos desarrolladores se desconecten. Busque en el
25662306a36Sopenharmony_ciarchivo MAINTAINERS una lista específica de los subsistemas; su parche
25762306a36Sopenharmony_ciprobablemente recibirá más atención allí. Sin embargo, no envíe spam a
25862306a36Sopenharmony_cilistas no relacionadas.
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ciMuchas listas relacionadas con el kernel están alojadas en vger.kernel.org;
26162306a36Sopenharmony_cipuedes encontrar un listado de estas en
26262306a36Sopenharmony_cihttp://vger.kernel.org/vger-lists.html. Existen listas relacionadas con el
26362306a36Sopenharmony_cikernel alojadas en otros lugares, no obstante.
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci¡No envíe más de 15 parches a la vez a las listas de correo de vger!
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ciLinus Torvalds es el árbitro final de todos los cambios aceptados en el
26862306a36Sopenharmony_cikernel de Linux. Su dirección de correo electrónico es
26962306a36Sopenharmony_ci<torvalds@linux-foundation.org>. Recibe muchos correos electrónicos y, en
27062306a36Sopenharmony_cieste momento, muy pocos parches pasan por Linus directamente, por lo que
27162306a36Sopenharmony_cinormalmente debe hacer todo lo posible para -evitar- enviarle un correo
27262306a36Sopenharmony_cielectrónico.
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ciSi tiene un parche que corrige un error de seguridad explotable, envíe ese
27562306a36Sopenharmony_ciparche a security@kernel.org. Para errores graves, se debe mantener un
27662306a36Sopenharmony_cipoco de discreción y permitir que los distribuidores entreguen el parche a
27762306a36Sopenharmony_cilos usuarios; en esos casos, obviamente, el parche no debe enviarse a
27862306a36Sopenharmony_cininguna lista pública. Revise también
27962306a36Sopenharmony_ciDocumentation/process/security-bugs.rst.
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ciLos parches que corrigen un error grave en un kernel en uso deben dirigirse
28262306a36Sopenharmony_cihacia los maintainers estables poniendo una línea como esta::
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_ci  CC: stable@vger.kernel.org
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_cien el área de sign-off de su parche (es decir, NO un destinatario de correo
28762306a36Sopenharmony_cielectrónico). También debe leer
28862306a36Sopenharmony_ciDocumentation/process/stable-kernel-rules.rst además de este documento.
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ciSi los cambios afectan las interfaces del kernel para el usuario, envíe al
29162306a36Sopenharmony_cimaintainer de las MAN-PAGES (como se indica en el archivo MAINTAINERS) un
29262306a36Sopenharmony_ciparche de páginas de manual, o al menos una notificación del cambio, para
29362306a36Sopenharmony_cique alguna información se abra paso en las páginas del manual. Los cambios
29462306a36Sopenharmony_cide la API del espacio de usuario también deben copiarse en
29562306a36Sopenharmony_cilinux-api@vger.kernel.org.
29662306a36Sopenharmony_ci
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ciSin MIME, enlaces, compresión o archivos adjuntos. Solo texto plano
29962306a36Sopenharmony_ci--------------------------------------------------------------------
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ciLinus y otros desarrolladores del kernel deben poder leer y comentar sobre
30262306a36Sopenharmony_cilos cambios que está enviando. Es importante para un desarrollador kernel
30362306a36Sopenharmony_cipoder "citar" sus cambios, utilizando herramientas estándar de correo
30462306a36Sopenharmony_cielectrónico, de modo que puedan comentar sobre partes específicas de su
30562306a36Sopenharmony_cicódigo.
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ciPor este motivo, todos los parches deben enviarse por correo electrónico
30862306a36Sopenharmony_ci"inline". La forma más sencilla de hacerlo es con ``git send-email``, que
30962306a36Sopenharmony_cies muy recomendable. Un tutorial interactivo para ``git send-email`` está
31062306a36Sopenharmony_cidisponible en https://git-send-email.io.
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ciSi elige no usar ``git send-email``:
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci.. warning::
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ci  Tenga cuidado con el ajuste de palabras de su editor que corrompe su
31762306a36Sopenharmony_ci  parche, si elige cortar y pegar su parche.
31862306a36Sopenharmony_ci
31962306a36Sopenharmony_ciNo adjunte el parche como un archivo adjunto MIME, comprimido o no. Muchas
32062306a36Sopenharmony_cipopulares aplicaciones de correo electrónico no siempre transmiten un MIME
32162306a36Sopenharmony_ciarchivo adjunto como texto sin formato, por lo que es imposible comentar
32262306a36Sopenharmony_cien su código. Linus también necesita un poco más de tiempo para procesar un
32362306a36Sopenharmony_ciarchivo adjunto MIME, disminuyendo la probabilidad de que se acepte su
32462306a36Sopenharmony_cicambio adjunto en MIME.
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ciExcepción: si su proveedor de correo está destrozando parches, entonces
32762306a36Sopenharmony_cialguien puede pedir que los vuelva a enviar usando MIME.
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ciConsulte Documentation/process/email-clients.rst para obtener sugerencias
33062306a36Sopenharmony_cisobre cómo configurar su cliente de correo electrónico para que envíe sus
33162306a36Sopenharmony_ciparches intactos.
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ciResponda a los comentarios de revisión
33462306a36Sopenharmony_ci---------------------------------------
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ciEs casi seguro que su parche recibirá comentarios de los revisores sobre
33762306a36Sopenharmony_cimaneras en que se pueda mejorar el parche, en forma de respuesta a su
33862306a36Sopenharmony_cicorreo electrónico. Debe responder a esos comentarios; ignorar a los
33962306a36Sopenharmony_cirevisores es una buena manera de ser ignorado de vuelta. Simplemente puede
34062306a36Sopenharmony_ciresponder a sus correos electrónicos para contestar a sus comentarios.
34162306a36Sopenharmony_ciRevisiones a los comentarios o preguntas que no conduzcan a un cambio de
34262306a36Sopenharmony_cicódigo deben casi con certeza generar un comentario o una entrada en el
34362306a36Sopenharmony_ci"changelog" para que el próximo revisor entienda lo que está pasando.
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ciAsegúrese de decirles a los revisores qué cambios está haciendo y de
34662306a36Sopenharmony_ciagradecerles que dediquen su tiempo. La revisión del código es un proceso
34762306a36Sopenharmony_ciagotador y lento, y los revisores a veces se ponen de mal humor. Sin
34862306a36Sopenharmony_ciembargo, incluso en ese caso, responda cortésmente y aborde los problemas
34962306a36Sopenharmony_cique hayan señalado. Al enviar un siguiente versión, agregue un
35062306a36Sopenharmony_ci``patch changelog`` (registro de cambios en los parches) a la carta de
35162306a36Sopenharmony_cipresentación ("cover letter") o a parches individuales explicando la
35262306a36Sopenharmony_cidiferencia con la presentación anterior (ver
35362306a36Sopenharmony_ci:ref:`sp_the_canonical_patch_format`).
35462306a36Sopenharmony_ci
35562306a36Sopenharmony_ciConsulte Documentation/process/email-clients.rst para obtener
35662306a36Sopenharmony_cirecomendaciones sobre clientes de correo electrónico y normas de etiqueta
35762306a36Sopenharmony_cien la lista de correo.
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci.. _sp_resend_reminders:
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_ciNo se desanime o impaciente
36262306a36Sopenharmony_ci---------------------------
36362306a36Sopenharmony_ci
36462306a36Sopenharmony_ciDespués de haber entregado su cambio, sea paciente y espere. Los revisores
36562306a36Sopenharmony_cison personas ocupadas y es posible que no lleguen a su parche de inmediato.
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_ciÉrase una vez, los parches solían desaparecer en el vacío sin comentarios,
36862306a36Sopenharmony_cipero el proceso de desarrollo funciona mejor que eso ahora. Debería
36962306a36Sopenharmony_cirecibir comentarios dentro de una semana más o menos; si eso no sucede,
37062306a36Sopenharmony_ciasegúrese de que ha enviado sus parches al lugar correcto. Espere un mínimo
37162306a36Sopenharmony_cide una semana antes de volver a enviar o hacer ping a los revisores,
37262306a36Sopenharmony_ciposiblemente más durante periodos de mucho trabajo ocupados como "merge
37362306a36Sopenharmony_ciwindows".
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ciTambién está bien volver a enviar el parche o la serie de parches después
37662306a36Sopenharmony_cide un par de semanas con la palabra "RESEND" (reenviar) añadida a la línea
37762306a36Sopenharmony_cide asunto::
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_ci   [PATCH Vx RESEND] sub/sys: Resumen condensado de parche
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_ciNo incluya "RESEND" cuando envíe una versión modificada de su parche o
38262306a36Sopenharmony_ciserie de parches: "RESEND" solo se aplica al reenvío de un parche o serie
38362306a36Sopenharmony_cide parches que no hayan sido modificados de ninguna manera con respecto a
38462306a36Sopenharmony_cila presentación anterior.
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_ci
38762306a36Sopenharmony_ciIncluya PATCH en el asunto
38862306a36Sopenharmony_ci--------------------------
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_ciDebido al alto tráfico de correo electrónico a Linus y al kernel de Linux,
39162306a36Sopenharmony_cies común prefijar su línea de asunto con [PATCH]. Esto le permite a Linus
39262306a36Sopenharmony_ciy otros desarrolladores del kernel distinguir más fácilmente los parches de
39362306a36Sopenharmony_ciotras discusiones por correo electrónico.
39462306a36Sopenharmony_ci
39562306a36Sopenharmony_ci``git send-email`` lo hará automáticamente.
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_ci
39862306a36Sopenharmony_ciFirme su trabajo: el Certificado de Origen del Desarrollador
39962306a36Sopenharmony_ci------------------------------------------------------------
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_ciPara mejorar el seguimiento de quién hizo qué, especialmente con parches
40262306a36Sopenharmony_cique pueden filtrarse hasta su destino final a través de varias capas de
40362306a36Sopenharmony_cimaintainers, hemos introducido un procedimiento de "sign-off" (aprobación)
40462306a36Sopenharmony_cien parches que se envían por correo electrónico.
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ciLa aprobación es una simple línea al final de la explicación del parche,
40762306a36Sopenharmony_cique certifica que usted lo escribió o que tiene derecho a enviarlo como un
40862306a36Sopenharmony_ciparche de código abierto. Las reglas son bastante simples: si usted puede
40962306a36Sopenharmony_cicertificar lo siguiente:
41062306a36Sopenharmony_ci
41162306a36Sopenharmony_ciCertificado de Origen del Desarrollador 1.1
41262306a36Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
41362306a36Sopenharmony_ci
41462306a36Sopenharmony_ciAl hacer una contribución a este proyecto, certifico que:
41562306a36Sopenharmony_ci
41662306a36Sopenharmony_ci        (a) La contribución fue creada en su totalidad o en parte por mí y
41762306a36Sopenharmony_ci            tengo derecho a enviarlo bajo la licencia de código abierto
41862306a36Sopenharmony_ci            indicada en el documento; o
41962306a36Sopenharmony_ci
42062306a36Sopenharmony_ci        (b) La contribución se basa en trabajo previo que, hasta donde yo
42162306a36Sopenharmony_ci            soy consciente, está cubierto por una licencia de código
42262306a36Sopenharmony_ci            abierto apropiada y tengo el derecho bajo esa licencia de
42362306a36Sopenharmony_ci            presentar tal trabajo con modificaciones, ya sean creadas en su
42462306a36Sopenharmony_ci            totalidad o en parte por mí, bajo la misma licencia de código
42562306a36Sopenharmony_ci            (salvo que sea permitido presentar bajo una licencia diferente),
42662306a36Sopenharmony_ci            tal y como se indica en el documento; o
42762306a36Sopenharmony_ci
42862306a36Sopenharmony_ci        (c) La contribución me fue proporcionada directamente por alguna
42962306a36Sopenharmony_ci            otra persona que certificó (a), (b) o (c) y no he modificado
43062306a36Sopenharmony_ci            esto.
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_ci        (d) Entiendo y acepto que este proyecto y la contribución
43362306a36Sopenharmony_ci            son públicos y que un registro de la contribución (incluyendo
43462306a36Sopenharmony_ci            toda la información personal que envío con él, incluida mi
43562306a36Sopenharmony_ci            firma) es mantenida indefinidamente y puede ser redistribuida
43662306a36Sopenharmony_ci            de manera consistente con este proyecto o la(s) licencia(s) de
43762306a36Sopenharmony_ci            código abierto involucradas.
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_cientonces simplemente incluya una línea que rece::
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ci	Signed-off-by: Random J Developer <random@developer.example.org>
44262306a36Sopenharmony_ci
44362306a36Sopenharmony_ciusando su nombre real (lamentablemente, no pseudónimos ni contribuciones
44462306a36Sopenharmony_cianónimas). Esto se hará por usted automáticamente si usa ``git commit -s``.
44562306a36Sopenharmony_ciLas reversiones de código también deben incluir "Signed-off-by".
44662306a36Sopenharmony_ci``git revert -s`` hace eso por usted.
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_ciAlgunas personas también ponen etiquetas adicionales al final. Simplemente
44962306a36Sopenharmony_ciserán ignoradas por ahora, pero puede hacer esto para marcar procedimientos
45062306a36Sopenharmony_ciinternos de su empresa o simplemente señalar algún detalle especial sobre
45162306a36Sopenharmony_cila firma.
45262306a36Sopenharmony_ci
45362306a36Sopenharmony_ciCualquier otro SoB (Signed-off-by:) después del SoB del autor es de
45462306a36Sopenharmony_cipersonas que manipulen y transporten el parche, pero no participaron en su
45562306a36Sopenharmony_cidesarrollo. Las cadenas de SoB deben reflejar la ruta **real** del parche
45662306a36Sopenharmony_cide cómo se propagó a los maintainers y, en última instancia, a Linus, con
45762306a36Sopenharmony_cila primera entrada de SoB que señala la autoría principal de un solo autor.
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_ci
46062306a36Sopenharmony_ciCuándo usar Acked-by:, Cc: y Co-developed-by por:
46162306a36Sopenharmony_ci-------------------------------------------------
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ciLa etiqueta Signed-off-by: indica que el firmante estuvo involucrado en el
46462306a36Sopenharmony_cidesarrollo del parche, o que él/ella se encontraba en el camino de entrega
46562306a36Sopenharmony_cidel parche.
46662306a36Sopenharmony_ci
46762306a36Sopenharmony_ciSi una persona no estuvo directamente involucrada en la preparación o
46862306a36Sopenharmony_ciadministración de un parche pero desea expresar y registrar su aprobación,
46962306a36Sopenharmony_cientonces puede pedir que se agregue una línea Acked-by: al registro de
47062306a36Sopenharmony_cicambios del parche.
47162306a36Sopenharmony_ci
47262306a36Sopenharmony_ciAcked-by: a menudo lo usa el maintainer del código afectado cuando ese
47362306a36Sopenharmony_cimaintainer no contribuyó ni envió el parche.
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ciAcked-by: no es tan formal como Signed-off-by:. Es una manera de marcar que
47662306a36Sopenharmony_ciel "acker" ha revisado al menos ese parche y ha indicado su aceptación. Por
47762306a36Sopenharmony_cilos merge de parches a veces convertirán manualmente el "sí, me parece bien"
47862306a36Sopenharmony_cide un acker en un Acked-by: (pero tenga en cuenta que por lo general es
47962306a36Sopenharmony_cimejor pedir un acuse de recibo explícito).
48062306a36Sopenharmony_ci
48162306a36Sopenharmony_ciAcked-by: no necesariamente indica el reconocimiento de todo el parche.
48262306a36Sopenharmony_ciPor ejemplo, si un parche afecta a varios subsistemas y tiene un
48362306a36Sopenharmony_ciAcked-by: de un maintainer del subsistema, entonces esto generalmente
48462306a36Sopenharmony_ciindica el reconocimiento de solo la parte que afecta el código de ese
48562306a36Sopenharmony_cimaintainer. Buen juicio debe ejercitarse aquí. En caso de duda, la gente
48662306a36Sopenharmony_cidebe consultar la discusión original en los archivos de la lista de correo.
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ciSi una persona ha tenido la oportunidad de comentar un parche, pero no lo
48962306a36Sopenharmony_ciha hecho, puede incluir opcionalmente una etiqueta ``Cc:`` al parche.
49062306a36Sopenharmony_ciEsta es la única etiqueta que se puede agregar sin una acción explícita por
49162306a36Sopenharmony_ciparte de la persona a la que se nombre - pero debe indicar que esta persona
49262306a36Sopenharmony_cifue copiada en el parche. Esta etiqueta documenta que las partes
49362306a36Sopenharmony_cipotencialmente interesadas han sido incluidas en la discusión.
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ciCo-developed-by: establece que el parche fue co-creado por múltiples
49662306a36Sopenharmony_cidesarrolladores; se utiliza para dar atribución a los coautores (además del
49762306a36Sopenharmony_ciautor atribuido por la etiqueta From:) cuando varias personas trabajan en
49862306a36Sopenharmony_ciun solo parche. Ya que Co-developed-by: denota autoría, cada
49962306a36Sopenharmony_ciCo-developed-by: debe ser inmediatamente seguido de Signed-off-by: del
50062306a36Sopenharmony_cicoautor asociado. Se mantiene el procedimiento estándar, es decir, el orden
50162306a36Sopenharmony_cide las etiquetas Signed-off-by: debe reflejar el historial cronológico del
50262306a36Sopenharmony_ciparche en la medida de lo posible, independientemente de si el autor se
50362306a36Sopenharmony_ciatribuye a través de From: o Co-developed-by:. Cabe destacar que el último
50462306a36Sopenharmony_ciSigned-off-by: siempre debe ser del desarrollador que envía el parche.
50562306a36Sopenharmony_ci
50662306a36Sopenharmony_ciTenga en cuenta que la etiqueta From: es opcional cuando el autor From: es
50762306a36Sopenharmony_citambién la persona (y correo electrónico) enumerados en la línea From: del
50862306a36Sopenharmony_ciencabezado del correo electrónico.
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ciEjemplo de un parche enviado por el From: autor::
51162306a36Sopenharmony_ci
51262306a36Sopenharmony_ci	<changelog>
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_ci	Co-developed-by: Primer coautor <primer@coauthor.example.org>
51562306a36Sopenharmony_ci	Signed-off-by: Primer coautor <primer@coauthor.example.org>
51662306a36Sopenharmony_ci	Co-developed-by: Segundo coautor <segundo@coautor.ejemplo.org>
51762306a36Sopenharmony_ci	Signed-off-by: Segundo coautor <segundo@coautor.ejemplo.org>
51862306a36Sopenharmony_ci	Signed-off-by: Autor del From <from@author.example.org>
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ciEjemplo de un parche enviado por un Co-developed-by: autor::
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ci	From: Autor del From <from@author.example.org>
52362306a36Sopenharmony_ci
52462306a36Sopenharmony_ci	<changelog>
52562306a36Sopenharmony_ci
52662306a36Sopenharmony_ci	Co-developed-by: Co-Autor aleatorio <aleatorio@coauthor.example.org>
52762306a36Sopenharmony_ci	Signed-off-by: Coautor aleatorio <aleatorio@coauthor.example.org>
52862306a36Sopenharmony_ci	Signed-off-by: Autor del From <from@author.example.org>
52962306a36Sopenharmony_ci	Co-developed-by: Coautor que envió <sub@coauthor.example.org>
53062306a36Sopenharmony_ci	Signed-off-by: Coautor que envía <sub@coauthor.example.org>
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ciUso de Reported-by:, Tested-by:, Reviewed-by:, Suggested-by: y Fixes:
53362306a36Sopenharmony_ci----------------------------------------------------------------------
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_ciLa etiqueta Reported-by (Reportado-por) otorga crédito a las personas que
53662306a36Sopenharmony_ciencuentran errores y los reportan. Por favor, tenga en cuenta que si se
53762306a36Sopenharmony_ciinformó de un error en privado, debe pedir primero permiso antes de usar la
53862306a36Sopenharmony_cietiqueta Reported-by. La etiqueta está destinada a errores; por favor no la
53962306a36Sopenharmony_ciuse para acreditar peticiones de características.
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ciUna etiqueta Tested-by: indica que el parche se probó con éxito (en algún
54262306a36Sopenharmony_cientorno) por la persona nombrada. Esta etiqueta informa a los maintainers
54362306a36Sopenharmony_cide que se han realizado algunas pruebas, proporciona un medio para ubicar
54462306a36Sopenharmony_ci"testers" (gente que pruebe) otros parches futuros y asegura el crédito
54562306a36Sopenharmony_cipara los testers.
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_ciReviewed-by: en cambio, indica que el parche ha sido revisado y encontrado
54862306a36Sopenharmony_ciaceptable de acuerdo con la Declaración del Revisor:
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ciDeclaración de Supervisión del Revisor
55162306a36Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
55262306a36Sopenharmony_ci
55362306a36Sopenharmony_ciAl ofrecer mi etiqueta Reviewed-by:, afirmo que:
55462306a36Sopenharmony_ci
55562306a36Sopenharmony_ci(a) He llevado a cabo una revisión técnica de este parche para
55662306a36Sopenharmony_cievaluar su idoneidad y preparación para su inclusión en
55762306a36Sopenharmony_ciel kernel principal.
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_ci(b) Cualquier problema, inquietud o pregunta relacionada con el parche
56062306a36Sopenharmony_cihan sido comunicados al remitente. Estoy satisfecho
56162306a36Sopenharmony_cicon la respuesta del remitente a mis comentarios.
56262306a36Sopenharmony_ci
56362306a36Sopenharmony_ci(c) Si bien puede haber cosas que podrían mejorarse con esta
56462306a36Sopenharmony_cientrega, creo que es, en este momento, (1) una
56562306a36Sopenharmony_cimodificación valiosa al kernel, y (2) libre de conocidas
56662306a36Sopenharmony_cicuestiones que argumentarían en contra de su inclusión.
56762306a36Sopenharmony_ci
56862306a36Sopenharmony_ci(d) Si bien he revisado el parche y creo que es correcto,
56962306a36Sopenharmony_cino hago (a menos que se indique explícitamente en otro lugar) ninguna
57062306a36Sopenharmony_cigarantía o avales de que logrará su definido
57162306a36Sopenharmony_cipropósito o función en cualquier situación dada.
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_ciUna etiqueta Reviewed-by es una declaración de opinión de que el parche es
57462306a36Sopenharmony_ciuna modificación apropiada al kernel sin que haya ningún problema grave
57562306a36Sopenharmony_cia nivel técnico. Cualquier revisor interesado (que haya hecho el trabajo)
57662306a36Sopenharmony_cipuede ofrecer una etiqueta Reviewed-by para un parche. Esta etiqueta sirve
57762306a36Sopenharmony_cipara dar crédito a revisores e informar a los maintainers del grado de
57862306a36Sopenharmony_cirevisión que se ha hecho en el parche. Las etiquetas Reviewed-by, cuando
57962306a36Sopenharmony_cilas otorgan revisores conocidos por entender del tema y realizar
58062306a36Sopenharmony_cirevisiones exhaustivas, normalmente aumentan la probabilidad de que su
58162306a36Sopenharmony_ciparche entre en el kernel.
58262306a36Sopenharmony_ci
58362306a36Sopenharmony_ciLas etiquetas Tested-by y Reviewed-by, una vez recibidas en la lista de
58462306a36Sopenharmony_cicorreo por el tester o revisor, deben ser incluidas por el autor de los
58562306a36Sopenharmony_ciparches pertinentes al enviar próximas versiones. Sin embargo, si el parche
58662306a36Sopenharmony_ciha cambiado sustancialmente en la siguiente versión, es posible que estas
58762306a36Sopenharmony_cietiquetas ya no sean aplicables y, por lo tanto, deben eliminarse. Por lo
58862306a36Sopenharmony_cigeneral, se debe mencionar la eliminación de las etiquetas Tested-by o
58962306a36Sopenharmony_ciReviewed-by de alguien en el registro de cambios del parche (después del
59062306a36Sopenharmony_ciseparador '---').
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_ciUna etiqueta Suggested-by: indica que la idea del parche es sugerida por la
59362306a36Sopenharmony_cipersona nombrada y asegura el crédito a la persona por la idea. Tenga en
59462306a36Sopenharmony_cicuenta que esto no debe agregarse sin el permiso del "reporter",
59562306a36Sopenharmony_ciespecialmente si la idea no fue publicada en un foro público. Dicho esto,
59662306a36Sopenharmony_cisi diligentemente acreditamos a los reporters de ideas, con suerte, se
59762306a36Sopenharmony_cisentirán inspirados para ayudarnos nuevamente en el futuro.
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ciUna etiqueta Fixes: indica que el parche corrige un problema en un commit
60062306a36Sopenharmony_cianterior. Esto se utiliza para facilitar descubrir dónde se originó un
60162306a36Sopenharmony_cierror, lo que puede ayudar a revisar una corrección de errores. Esta
60262306a36Sopenharmony_cietiqueta también ayuda al equipo del kernel estable a determinar qué
60362306a36Sopenharmony_civersiones estables del kernel deberían recibir su corrección. Este es el
60462306a36Sopenharmony_cimétodo preferido para indicar un error corregido por el parche. Revise
60562306a36Sopenharmony_ci:ref:`describe_changes` para más detalles.
60662306a36Sopenharmony_ci
60762306a36Sopenharmony_ciNota: Adjuntar una etiqueta Fixes: no subvierte las reglas estables del
60862306a36Sopenharmony_ciproceso del kernel ni el requisito de CC: stable@vger.kernel.org en todos
60962306a36Sopenharmony_cilos parches candidatos de ramas estables. Para obtener más información, lea
61062306a36Sopenharmony_ciDocumentation/process/stable-kernel-rules.rst.
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_ci.. _sp_the_canonical_patch_format:
61362306a36Sopenharmony_ci
61462306a36Sopenharmony_ciFormato de parche canónico
61562306a36Sopenharmony_ci---------------------------
61662306a36Sopenharmony_ci
61762306a36Sopenharmony_ciEsta sección describe cómo debe darse formato al propio parche. Tenga en
61862306a36Sopenharmony_cicuenta que, si tiene sus parches almacenados en un repositorio ``git``, el
61962306a36Sopenharmony_ciparche con formato adecuado se puede obtener con ``git format-patch``. Las
62062306a36Sopenharmony_ciherramientas no pueden crear el texto necesario, sin embargo, así que lea
62162306a36Sopenharmony_cilas instrucciones a continuación de todos modos.
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_ciLa línea de asunto del parche canónico es::
62462306a36Sopenharmony_ci
62562306a36Sopenharmony_ci    Asunto: [PATCH 001/123] subsistema: frase de resumen
62662306a36Sopenharmony_ci
62762306a36Sopenharmony_ciEl cuerpo del mensaje del parche canónico contiene lo siguiente:
62862306a36Sopenharmony_ci
62962306a36Sopenharmony_ci  - Una línea ``from`` que especifica el autor del parche, seguida de una
63062306a36Sopenharmony_ci    línea vacía (solo es necesario si la persona que envía el parche no es
63162306a36Sopenharmony_ci    el autor).
63262306a36Sopenharmony_ci
63362306a36Sopenharmony_ci  - El cuerpo de la explicación, línea envuelta en 75 columnas, que se
63462306a36Sopenharmony_ci    copiara en el registro de cambios permanente para describir este parche.
63562306a36Sopenharmony_ci
63662306a36Sopenharmony_ci  - Una línea vacía.
63762306a36Sopenharmony_ci
63862306a36Sopenharmony_ci  - Las líneas ``Signed-off-by:``, descritas anteriormente, que
63962306a36Sopenharmony_ci    también vaya en el registro de cambios.
64062306a36Sopenharmony_ci
64162306a36Sopenharmony_ci  - Una línea de marcador que contiene simplemente ``---``.
64262306a36Sopenharmony_ci
64362306a36Sopenharmony_ci  - Cualquier comentario adicional que no sea adecuado para el registro de
64462306a36Sopenharmony_ci    cambios.
64562306a36Sopenharmony_ci
64662306a36Sopenharmony_ci  - El parche real (output de ``diff``).
64762306a36Sopenharmony_ci
64862306a36Sopenharmony_ciEl formato de la línea de asunto hace que sea muy fácil ordenar los correos
64962306a36Sopenharmony_cielectrónicos alfabéticamente por línea de asunto - prácticamente cualquier
65062306a36Sopenharmony_cilector de correo electrónico permite esto, ya que debido a que el número de
65162306a36Sopenharmony_cisecuencia se rellena con ceros, el orden numérico y alfabético es el mismo.
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_ciEl ``subsistema`` en el asunto del correo electrónico debe identificar qué
65462306a36Sopenharmony_ciárea o subsistema del kernel está siendo parcheado.
65562306a36Sopenharmony_ci
65662306a36Sopenharmony_ciLa ``frase de resumen`` en el Asunto del correo electrónico debe describir
65762306a36Sopenharmony_cide forma concisa el parche que contiene ese correo electrónico. La
65862306a36Sopenharmony_ci``frase resumen`` no debe ser un nombre de archivo. No use la mismo ``frase
65962306a36Sopenharmony_ciresumen`` para cada parche en una serie completa de parches (donde una
66062306a36Sopenharmony_ci`` serie de parches`` (patch series) es una secuencia ordenada de múltiples
66162306a36Sopenharmony_ciparches relacionados).
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ciTenga en cuenta que la ``frase de resumen`` de su correo electrónico se
66462306a36Sopenharmony_ciconvierte en un identificador global único para ese parche. Se propaga por
66562306a36Sopenharmony_cihasta el registro de cambios de ``git``. La ``frase resumida`` se puede
66662306a36Sopenharmony_ciusar más adelante en discusiones de desarrolladores que se refieran al
66762306a36Sopenharmony_ciparche. La gente querrá buscar en Google la ``frase de resumen`` para leer
66862306a36Sopenharmony_cila discusión al respecto del parche. También será lo único que la gente
66962306a36Sopenharmony_cipodrá ver rápidamente cuando, dos o tres meses después, estén pasando por
67062306a36Sopenharmony_ciquizás miles de parches usando herramientas como ``gitk`` o ``git log
67162306a36Sopenharmony_ci--oneline``.
67262306a36Sopenharmony_ci
67362306a36Sopenharmony_ciPor estas razones, el ``resumen`` no debe tener más de 70-75 caracteres, y
67462306a36Sopenharmony_cidebe describir tanto lo que cambia el parche como por qué el parche podría
67562306a36Sopenharmony_ciser necesario. Es un reto ser tanto sucinto como descriptivo, pero eso es
67662306a36Sopenharmony_cilo que un resumen bien escrito debería hacer.
67762306a36Sopenharmony_ci
67862306a36Sopenharmony_ciLa ``frase de resumen`` puede estar precedida por etiquetas encerradas en
67962306a36Sopenharmony_cicorchetes: "Asunto: [PATCH <etiqueta>...] <frase de resumen>". Las
68062306a36Sopenharmony_cietiquetas no se consideran parte de la frase de resumen, pero describen
68162306a36Sopenharmony_cicómo debería ser tratado el parche. Las etiquetas comunes pueden incluir un
68262306a36Sopenharmony_cidescriptor de versión si las múltiples versiones del parche se han enviado
68362306a36Sopenharmony_cien respuesta a comentarios (es decir, "v1, v2, v3") o "RFC" para indicar
68462306a36Sopenharmony_ciuna solicitud de comentarios.
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_ciSi hay cuatro parches en una serie de parches, los parches individuales
68762306a36Sopenharmony_cipueden enumerarse así: 1/4, 2/4, 3/4, 4/4. Esto asegura que los
68862306a36Sopenharmony_cidesarrolladores entiendan el orden en que se deben aplicar los parches y
68962306a36Sopenharmony_cique han revisado o aplicado todos los parches de la serie de parches.
69062306a36Sopenharmony_ci
69162306a36Sopenharmony_ciAquí hay algunos buenos ejemplos de Asuntos::
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_ci    Asunto: [PATCH 2/5] ext2: mejorar la escalabilidad de la búsqueda de mapas de bits
69462306a36Sopenharmony_ci    Asunto: [PATCH v2 27/01] x86: corregir el seguimiento de eflags
69562306a36Sopenharmony_ci    Asunto: [PATCH v2] sub/sys: resumen conciso del parche
69662306a36Sopenharmony_ci    Asunto: [PATCH v2 M/N] sub/sys: resumen conciso del parche
69762306a36Sopenharmony_ci
69862306a36Sopenharmony_ciLa línea ``from`` debe ser la primera línea en el cuerpo del mensaje,
69962306a36Sopenharmony_ciy tiene la forma::
70062306a36Sopenharmony_ci
70162306a36Sopenharmony_ci        From: Autor del parche <autor@ejemplo.com>
70262306a36Sopenharmony_ci
70362306a36Sopenharmony_ciLa línea ``From`` especifica quién será acreditado como el autor del parche
70462306a36Sopenharmony_cien el registro de cambios permanente. Si falta la línea ``from``, entonces
70562306a36Sopenharmony_cila línea ``From:`` del encabezado del correo electrónico se usará para
70662306a36Sopenharmony_cideterminar el autor del parche en el registro de cambios.
70762306a36Sopenharmony_ci
70862306a36Sopenharmony_ciLa explicación estará incluida en el commit del changelog permanente, por
70962306a36Sopenharmony_cilo que debería tener sentido para un lector competente que hace mucho tiempo
71062306a36Sopenharmony_ciha olvidado los detalles de la discusión que podrían haber llevado a
71162306a36Sopenharmony_cieste parche. Incluidos los síntomas del fallo que el parche trate
71262306a36Sopenharmony_ci(mensajes de registro del kernel, mensajes de oops, etc.) son especialmente
71362306a36Sopenharmony_ciútiles para personas que podrían estar buscando en los registros de
71462306a36Sopenharmony_cicommits en busca de la aplicación del parche. El texto debe estar escrito
71562306a36Sopenharmony_cicon tal detalle que cuando se lea semanas, meses o incluso años después,
71662306a36Sopenharmony_cipueda dar al lector la información necesaria y detalles para comprender el
71762306a36Sopenharmony_cirazonamiento de **por qué** se creó el parche.
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ciSi un parche corrige una falla de compilación, puede que no sea necesario
72062306a36Sopenharmony_ciincluir _todos_ los errores de compilación; pero lo suficiente como para
72162306a36Sopenharmony_cique sea probable que alguien que busque el parche puede encontrarlo. Como
72262306a36Sopenharmony_cien la ``frase de resumen``, es importante ser tanto sucinto como
72362306a36Sopenharmony_cidescriptivo.
72462306a36Sopenharmony_ci
72562306a36Sopenharmony_ciLa línea marcadora ``---`` cumple el propósito esencial de marcar para
72662306a36Sopenharmony_ciherramientas de manejo de parches donde termina el mensaje de registro de
72762306a36Sopenharmony_cicambios.
72862306a36Sopenharmony_ci
72962306a36Sopenharmony_ciUn buen uso de los comentarios adicionales después del marcador ``---`` es
73062306a36Sopenharmony_cipara ``diffstat``, para mostrar qué archivos han cambiado, y el número de
73162306a36Sopenharmony_cilíneas insertadas y eliminadas por archivo. Un ``diffstat`` es
73262306a36Sopenharmony_ciespecialmente útil en parches más grandes. Si va a incluir un ``diffstat``
73362306a36Sopenharmony_cidespués del marcador ``---``, utilice las opciones ``diffstat``
73462306a36Sopenharmony_ci``-p 1 -w 70`` para que los nombres de archivo se enumeran desde la parte
73562306a36Sopenharmony_cisuperior del árbol de fuentes del kernel y no use demasiado espacio
73662306a36Sopenharmony_cihorizontal (que encaje fácilmente en 80 columnas, tal vez con alguna
73762306a36Sopenharmony_ciindentación). (``git`` genera diffstats apropiados por defecto).
73862306a36Sopenharmony_ci
73962306a36Sopenharmony_ciOtros comentarios relevantes solo en el momento o para el maintainer, pero
74062306a36Sopenharmony_cino adecuados para el registro de cambios permanente, también debe ir aquí.
74162306a36Sopenharmony_ciUn buen ejemplo de tales comentarios podría ser ``registros de cambios de
74262306a36Sopenharmony_ciparches`` que describen qué ha cambiado entre la versión v1 y v2 del
74362306a36Sopenharmony_ciparche.
74462306a36Sopenharmony_ci
74562306a36Sopenharmony_ciPor favor, ponga esta información **después** de la línea ``---`` que
74662306a36Sopenharmony_cisepara el registro de cambios del resto del parche. La información de la
74762306a36Sopenharmony_civersión no forma parte del registro de cambios que se incluye con el árbol
74862306a36Sopenharmony_cigit. Es información adicional para los revisores. Si se coloca encima de la
74962306a36Sopenharmony_cietiquetas de commit, necesita interacción manual para eliminarlo. Si esta
75062306a36Sopenharmony_cidebajo de la línea de separación, se quita automáticamente al aplicar el
75162306a36Sopenharmony_ciparche::
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_ci  <mensaje de commit>
75462306a36Sopenharmony_ci  ...
75562306a36Sopenharmony_ci  Signed-off-by: Autor <autor@correo>
75662306a36Sopenharmony_ci  ---
75762306a36Sopenharmony_ci  V2 -> V3: función auxiliar redundante eliminada
75862306a36Sopenharmony_ci  V1 -> V2: estilo de código limpio y comentarios de revisión abordados
75962306a36Sopenharmony_ci
76062306a36Sopenharmony_ci  ruta/al/archivo | 5+++--
76162306a36Sopenharmony_ci  ...
76262306a36Sopenharmony_ci
76362306a36Sopenharmony_ciRevise más detalles sobre el formato de parche adecuado en las siguientes
76462306a36Sopenharmony_cireferencias
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ci.. _sp_backtraces:
76762306a36Sopenharmony_ci
76862306a36Sopenharmony_ciRetrocesos en mensajes de confirmación
76962306a36Sopenharmony_ci^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
77062306a36Sopenharmony_ci
77162306a36Sopenharmony_ciLos "backtraces" (deshacer el camino) ayuda a documentar la cadena de
77262306a36Sopenharmony_cillamadas que conducen a un problema. Sin embargo, no todos los rastreos son
77362306a36Sopenharmony_ciútiles. Por ejemplo, las tempranas cadenas de llamadas de inicio son únicas
77462306a36Sopenharmony_ciy obvias. Sin embargo, al copiar la salida completa de dmesg textualmente,
77562306a36Sopenharmony_ciincluye información que distrae, como marcas de tiempo, listas de módulos,
77662306a36Sopenharmony_ciregistro y volcados de pila.
77762306a36Sopenharmony_ci
77862306a36Sopenharmony_ciPor lo tanto, los backtraces más útiles deben contener los datos
77962306a36Sopenharmony_cirelevantes de la información vertida, lo que hace que sea más fácil
78062306a36Sopenharmony_cicentrarse en el verdadero tema. Este es un ejemplo de un backtrace bien
78162306a36Sopenharmony_cirecortado::
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ci  error de acceso de MSR no verificado: WRMSR a 0xd51 (intentó escribir 0x0000000000000064)
78462306a36Sopenharmony_ci  en rIP: 0xffffffffae059994 (native_write_msr+0x4/0x20)
78562306a36Sopenharmony_ci  Rastreo de llamadas:
78662306a36Sopenharmony_ci  mba_wrmsr
78762306a36Sopenharmony_ci  update_domains
78862306a36Sopenharmony_ci  rdtgroup_mkdir
78962306a36Sopenharmony_ci
79062306a36Sopenharmony_ci.. _sp_explicit_in_reply_to:
79162306a36Sopenharmony_ci
79262306a36Sopenharmony_ciIn-Reply-To explicitos en las cabeceras
79362306a36Sopenharmony_ci---------------------------------------
79462306a36Sopenharmony_ci
79562306a36Sopenharmony_ciPuede ser útil agregar manualmente encabezados In-Reply-To: a un parche
79662306a36Sopenharmony_ci(por ejemplo, al usar ``git send-email``) para asociar el parche con una
79762306a36Sopenharmony_cidiscusión anterior relevante, por ejemplo para vincular una corrección de
79862306a36Sopenharmony_cierrores al correo electrónico con el informe de errores. Sin embargo, para
79962306a36Sopenharmony_ciuna serie de parches múltiples, generalmente es mejor evitar usar
80062306a36Sopenharmony_ciIn-Reply-To: para vincular a versiones anteriores de la serie. De esta
80162306a36Sopenharmony_ciforma, varias versiones del parche no se convierten en un inmanejable
80262306a36Sopenharmony_cibosque de referencias en clientes de correo electrónico. Si un enlace es
80362306a36Sopenharmony_ciútil, puede usar el redirector https://lore.kernel.org/ (por ejemplo, en
80462306a36Sopenharmony_ciel texto de la carta de introducción del correo electrónico) para vincular
80562306a36Sopenharmony_cia una versión anterior de la serie de parches.
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_ci
80862306a36Sopenharmony_ciProporcionar información de árbol base
80962306a36Sopenharmony_ci--------------------------------------
81062306a36Sopenharmony_ci
81162306a36Sopenharmony_ciCuando otros desarrolladores reciben sus parches y comienzan el proceso de
81262306a36Sopenharmony_cirevisión, a menudo es útil para ellos saber en qué parte del historial del
81362306a36Sopenharmony_ciárbol deben colocar su trabajo. Esto es particularmente útil para CI
81462306a36Sopenharmony_ciautomatizado de procesos que intentan ejecutar una serie de pruebas para
81562306a36Sopenharmony_ciestablecer la calidad de su envío antes de que el maintainer comience la
81662306a36Sopenharmony_cirevisión.
81762306a36Sopenharmony_ci
81862306a36Sopenharmony_ciSi está utilizando ``git format-patch`` para generar sus parches, puede
81962306a36Sopenharmony_ciincluir automáticamente la información del árbol base en su envío usando el
82062306a36Sopenharmony_ciparámetro ``--base``. La forma más fácil y conveniente de usar esta opción
82162306a36Sopenharmony_cies con "topical branches" (ramas de temas)::
82262306a36Sopenharmony_ci
82362306a36Sopenharmony_ci    $ git checkout -t -b my-topical-branch master
82462306a36Sopenharmony_ci    Branch 'my-topical-branch' set up to track local branch 'master'.
82562306a36Sopenharmony_ci    Switched to a new branch 'my-topical-branch'
82662306a36Sopenharmony_ci
82762306a36Sopenharmony_ci    [realice sus cambios y ediciones]
82862306a36Sopenharmony_ci
82962306a36Sopenharmony_ci    $ git format-patch --base=auto --cover-letter -o outgoing/ master
83062306a36Sopenharmony_ci    outgoing/0000-cover-letter.patch
83162306a36Sopenharmony_ci    outgoing/0001-First-Commit.patch
83262306a36Sopenharmony_ci    outgoing/...
83362306a36Sopenharmony_ci
83462306a36Sopenharmony_ciCuando abra ``outgoing/0000-cover-letter.patch`` para editar, tenga en
83562306a36Sopenharmony_cicuenta que tendrá el tráiler ``base-commit:`` al final, que proporciona al
83662306a36Sopenharmony_cirevisor y a las herramientas de CI suficiente información para realizar
83762306a36Sopenharmony_cicorrectamente ``git am`` sin preocuparse por los conflictos::
83862306a36Sopenharmony_ci
83962306a36Sopenharmony_ci    $ git checkout -b patch-review [base-commit-id]
84062306a36Sopenharmony_ci    Switched to a new branch 'patch-review'
84162306a36Sopenharmony_ci    $ git am patches.mbox
84262306a36Sopenharmony_ci    Applying: First Commit
84362306a36Sopenharmony_ci    Applying: ...
84462306a36Sopenharmony_ci
84562306a36Sopenharmony_ciConsulte ``man git-format-patch`` para obtener más información al respecto
84662306a36Sopenharmony_cide esta opción.
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_ci.. Note::
84962306a36Sopenharmony_ci
85062306a36Sopenharmony_ci    La función ``--base`` se introdujo en la versión 2.9.0 de git.
85162306a36Sopenharmony_ci
85262306a36Sopenharmony_ciSi no está utilizando git para dar forma a sus parches, aún puede incluir
85362306a36Sopenharmony_ciel mismo tráiler ``base-commit`` para indicar el hash de confirmación del
85462306a36Sopenharmony_ciárbol en que se basa su trabajo. Debe agregarlo en la carta de presentación
85562306a36Sopenharmony_cio en el primer parche de la serie y debe colocarse ya sea bajo la línea
85662306a36Sopenharmony_ci``---`` o en la parte inferior de todos los demás contenido, justo antes de
85762306a36Sopenharmony_cisu firma del correo electrónico.
85862306a36Sopenharmony_ci
85962306a36Sopenharmony_ci
86062306a36Sopenharmony_ciReferencias
86162306a36Sopenharmony_ci-----------
86262306a36Sopenharmony_ci
86362306a36Sopenharmony_ci"The perfect patch" (tpp) por Andrew Morton.
86462306a36Sopenharmony_ci  <https://www.ozlabs.org/~akpm/stuff/tpp.txt>
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_ci"Linux kernel patch submission format" por Jeff Garzik.
86762306a36Sopenharmony_ci  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
86862306a36Sopenharmony_ci
86962306a36Sopenharmony_ci"How to piss off a kernel subsystem maintainer" por Greg Kroah-Hartman.
87062306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer.html>
87162306a36Sopenharmony_ci
87262306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-02.html>
87362306a36Sopenharmony_ci
87462306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-03.html>
87562306a36Sopenharmony_ci
87662306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-04.html>
87762306a36Sopenharmony_ci
87862306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-05.html>
87962306a36Sopenharmony_ci
88062306a36Sopenharmony_ci  <http://www.kroah.com/log/linux/maintainer-06.html>
88162306a36Sopenharmony_ci
88262306a36Sopenharmony_ciNO!!!! Gente, no mas bombas enormes de parches a linux-kernel@vger.kernel.org!
88362306a36Sopenharmony_ci  <https://lore.kernel.org/r/20050711.125305.08322243.davem@davemloft.net>
88462306a36Sopenharmony_ci
88562306a36Sopenharmony_ciKernel Documentation/process/coding-style.rst
88662306a36Sopenharmony_ci
88762306a36Sopenharmony_ciEmail de Linus Torvalds sobre la forma canónica de los parches:
88862306a36Sopenharmony_ci  <https://lore.kernel.org/r/Pine.LNX.4.58.0504071023190.28951@ppc970.osdl.org>
88962306a36Sopenharmony_ci
89062306a36Sopenharmony_ci"On submitting kernel patches" por Andi Kleen
89162306a36Sopenharmony_ci  Algunas estrategias para conseguir incluir cambios complicados o
89262306a36Sopenharmony_ci  controvertidos.
89362306a36Sopenharmony_ci
89462306a36Sopenharmony_ci  http://halobates.de/on-submitting-patches.pdf
895