annotate es/mq-collab.tex @ 832:d5688822c51d

Preface, now with actual text
author Bryan O'Sullivan <bos@serpentine.com>
date Thu, 07 May 2009 22:32:55 -0700
parents 9da096de3c52
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
1 \chapter{Usos avanzados de las Colas de Mercurial}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
2 \label{chap:mq-collab}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
3
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
4 Auunque es fácil aprender los usos más directos de las Colas de
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
5 Mercurial, tener algo de disciplina junto con algunas de las
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
6 capacidadees menos usadas de MQ hace posible trabajar en entornos de
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
7 desarrollo complejos.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
8
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
9 En este capítulo, usaré como ejemplo una técnica que he usado para
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
10 administrar el desarrollo de un controlador de dispositivo Infiniband
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
11 para el kernel de Linux. El controlador en cuestión es grande
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
12 (al menos en lo que se refiere a controladores), con 25,000 líneas de
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
13 código esparcidas en 35 ficheros fuente. Es mantenido por un equipo
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
14 pequeño de desarrolladores.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
15
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
16 Aunque mucho del material en este capítulo es específico de Linux, los
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
17 mismos principios aplican a cualquier base de código de la que usted
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
18 no sea el propietario principal, y sobre la que usted necesita hacer
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
19 un montón de desarrollo.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
20
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
21 \section{El problema de múltiples objetivos}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
22
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
23 El kernel de Linux cambia con rapidez, y nunca ha sido estable
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
24 internamente; los desarrolladores hacen cambios drásticos entre
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
25 %TODO no encontré una traducción adecuada para "release". Por eso el
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
26 %cambio
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
27 versiones frecuentemente. Esto significa que una versión del
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
28 controlador que funciona bien con una versión particular del kernel ni
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
29 siquiera \emph{compilará} correctamente contra, típicamente, cualquier
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
30 otra versión.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
31
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
32 Para mantener un controlador, debemos tener en cuenta una buena
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
33 cantidad de versiones de Linux en mente.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
34 \begin{itemize}
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
35 \item Un objetivo es el árbol de desarrollo principal del kernel de
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
36 Linux. En este caso el mantenimiento del código es compartido
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
37 parcialmente por otros desarrolladores en la comunidad del kernel,
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
38 %TODO drive-by.
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
39 quienes hacen modificaciones ``de-afán'' al controlador a medida que
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
40 desarrollan y refinan subsistemas en el kernel.
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
41 %TODO backport
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
42 \item También mantenemos algunos ``backports'' para versiones antiguas
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
43 del kernel de Linux, para dar soporte a las necesidades de los
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
44 clientes que están corriendo versiones antiguas de Linux que no
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
45 incorporan nuestros controladores. (Hacer el \emph{backport} de un
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
46 pedazo de código es modificarlo para que trabaje en una versión
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
47 de su entorno objetivo anterior a aquella para la cual fue escrito.)
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
48 \item Finalmente, nosotros liberamos nuestro software de acuerdo a un
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
49 cronograma que no necesariamente está alineado con el que usan los
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
50 distribuidores de Linux y los desarrolladores del kernel, así que
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
51 podemos entregar nuevas características a los clientes sin forzarlos
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
52 a actualizar kernels completos o distribuciones.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
53 \end{itemize}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
54
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
55 \subsection{Aproximaciones tentadoras que no funcionan adecuadamente}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
56
580
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
57 Hay dos maneras estándar de mantener una porción de software que debe
6cf30b3ed48f translated some paragraphs
Javier Rojas <jerojasro@devnull.li>
parents: 435
diff changeset
58 funcionar en muchos entornos diferentes.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
59
584
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
60 La primera es mantener varias ramas, cada una pensada para un único
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
61 entorno. El problema de esta aproximación es que usted debe tener una
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
62 disciplina férrea con el flujo de cambios entre repositorios. Una
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
63 nueva característica o un arreglo de fallo deben empezar su vida en un
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
64 repositorio ``prístino'', y luego propagarse a cada repositorio de
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
65 backport. Los cambios para backports están más limitados respecto a
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
66 las ramas a las que deberían propagarse; un cambio para backport que
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
67 es aplicado a una rama en la que no corresponde probablemente hará que
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
68 el controlador no compile.
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
69
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
70 La segunda es mantener un único árbol de código fuente lleno de
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
71 declaraciones que activen o desactiven secciones de código dependiendo
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
72 del entorno objetivo. Ya que estos ``ifdefs'' no están permitidos en
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
73 el árbol del kernel de Linux, debe seguirse algún proceso manual o
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
74 automático para eliminarlos y producir un árbol limpio. Una base de
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
75 código mantenida de esta manera se convierte rápidamente en un nido de
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
76 ratas de bloques condicionales que son difíciles de entender y
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
77 mantener.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
78
584
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
79 %TODO canónica?
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
80 Ninguno de estos enfoques es adecuado para situaciones en las que
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
81 usted no es ``dueño'' de la copia canónica de un árbol de fuentes. En
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
82 el caso de un controlador de Linux que es distribuido con el kernel
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
83 estándar, el árbol de Linux contiene la copia del código que será
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
84 considerada por el mundo como la canónica. La versión oficial de
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
85 ``mi'' controlador puede ser modificada por gente que no conozco, sin
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
86 que yo siquiera me entere de ello hasta después de que los cambios
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
87 aparecen en el árbol de Linus.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
88
584
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
89 Estos enfoques tienen la debilidad adicional de dificultar la
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
90 %TODO upstream. no no es río arriba
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
91 generación de parches bien formados para enviarlos a la versión
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
92 oficial.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
93
584
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
94 En principio, las Colas de Mercurial parecen ser un buen candidato
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
95 para administrar un escenario de desarrollo como el de arriba. Aunque
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
96 este es de hecho el caso, MQ tiene unas cuantas características
039ed6f5935b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 580
diff changeset
97 adicionales que hacen el trabajo más agradable.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
98
588
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
99 \section{Aplicar parches condicionalmente mediante guardias}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
100
588
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
101 Tal vez la mejor manera de conservar la cordura con tantos entornos
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
102 objetivo es poder escoger parches específicos para aplicar para cada
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
103 situación. MQ provee una característica llamada ``guardias''
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
104 (que se origina del comando \texttt{guards} de Quilt) que hace
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
105 precisamente ésto. Para empezar, creemos un repositorio sencillo para
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
106 experimentar.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
107 \interaction{mq.guards.init}
588
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
108 Esto nos brinda un pequeño repositorio que contiene dos parches que no
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
109 tienen ninguna dependencia respecto al otro, porque tocan ficheros
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
110 diferentes.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
111
588
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
112 La idea detrás de la aplicación condicional es que usted puede
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
113 ``etiquetar'' un parche con un \emph{guardia}, que simplemente es una
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
114 cadena de texto de su elección, y luego decirle a MQ que seleccione
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
115 guardias específicos para usar cuando aplique parches. MQ entonces
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
116 aplicará, u omitirá, un parche vigilado, dependiendo de los guardias
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
117 que usted haya seleccionado.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
118
588
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
119 Un parche puede tener una cantidad arbitraria de guardias; cada uno es
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
120 \emph{positivo} (``aplique el parche si este guardia es
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
121 seleccionado'') o \emph{negativo} (``omita este parche si este guardia
b1ae672fd92b translated a section
Javier Rojas <jerojasro@devnull.li>
parents: 584
diff changeset
122 es seleccionado''). Un parche sin guardias siempre es aplicado.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
123
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
124 \section{Controlar los guardias de un parche}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
125
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
126 %TODO tal vez no decir determinar, sino definir?
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
127 El comando \hgxcmd{mq}{qguard} le permite determinar qué guardias
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
128 deben aplicarse a un parche, o mostrar los guardias que están en
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
129 efecto. Sin ningún argumento, el comando muestra los guardias del
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
130 parche actual de la parte más alta de la pila.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
131 \interaction{mq.guards.qguard}
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
132 Para poner un guardia positivo en un parche, prefije el nombre del
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
133 guardia con un ``\texttt{+}''.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
134 \interaction{mq.guards.qguard.pos}
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
135 Para poner un guardia negativo en un parche, prefije el nombre del
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
136 guardia con un ``\texttt{-}''.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
137 \interaction{mq.guards.qguard.neg}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
138
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
139 \begin{note}
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
140 El comando \hgxcmd{mq}{qguard} \emph{pone} los guardias en un
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
141 parche; no los \emph{modifica}. Esto significa que si usted ejecuta
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
142 \hgcmdargs{qguard}{+a +b} sobre un parche, y luego
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
143 \hgcmdargs{qguard}{+c} en el mismo parche, el único guardia sobre el
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
144 parche después del comando será \texttt{+c}.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
145 \end{note}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
146
589
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
147 Mercurial almacena los guardias en el fichero \sfilename{series}; la
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
148 forma en que son almacenados es fácil tanto de entender como de editar
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
149 a mano. (En otras palabras, usted no tiene que usar el comando
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
150 \hgxcmd{mq}{qguard} si no lo desea; está bien simplemente editar el
254888ffaf0a translated another section
Javier Rojas <jerojasro@devnull.li>
parents: 588
diff changeset
151 fichero \sfilename{series})
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
152 \interaction{mq.guards.series}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
153
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
154 \section{Selecccionar los guardias a usar}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
155
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
156 %TODO tal vez no decir determinar, sino definir?
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
157 El comando \hgxcmd{mq}{qselect} determina qué guardias están activos
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
158 en cualquier momento. El efecto de esto es determinar qué parches
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
159 aplicará MQ la próxima vez que usted ejecute \hgxcmd{mq}{qpush}. No
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
160 tiene ningún otro efecto; en particular, no hace nada a los parches
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
161 que ya han sido aplicados.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
162
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
163 Sin argumentos, el comando \hgxcmd{mq}{qselect} lista los guardias en
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
164 efecto actualmente, uno por cada línea de salida. Cada argumento es
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
165 tratado como el nombre de un guardia a aplicar.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
166 \interaction{mq.guards.qselect.foo}
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
167 Si está interesado, los guardias seleccionados actualmente están
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
168 almacenados en el fichero \sfilename{guards}.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
169 \interaction{mq.guards.qselect.cat}
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
170 Podemos ver el efecto que tienen los guardias seleccionados cuando
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
171 ejecutamos \hgxcmd{mq}{qpush}.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
172 \interaction{mq.guards.qselect.qpush}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
173
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
174 Un guardia no puede empezar con un caracter ``\texttt{+}'' o
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
175 ``\texttt{-}''. El nombre del guardia no debe contener espacios en
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
176 blanco, pero muchos otros caracteres son aceptables. Si usted trata de
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
177 usar un guardia con un nombre inválido, MQ se quejará:
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
178 \interaction{mq.guards.qselect.error}
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
179 Cambiar los guardias seleccionados cambia los parches que son
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
180 aplicados.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
181 \interaction{mq.guards.qselect.quux}
590
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
182 Usted puede ver en el ejemplo de abajo que los guardias negativos
795f2964e104 translated section 13.4
Javier Rojas <jerojasro@devnull.li>
parents: 589
diff changeset
183 tienen precedencia sobre los guardias positivos.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
184 \interaction{mq.guards.qselect.foobar}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
185
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
186 \section{Reglas de MQ para aplicar parches}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
187
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
188 Las reglas que MQ usa para decidir si debe aplicar un parche son las
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
189 siguientes.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
190 \begin{itemize}
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
191 \item Un parche sin guardias es aplicado siempre.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
192 \item Si el parche tiene algún guardia negativo que corresponda con
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
193 cualquiera de los guardias seleccionados, se salta el parche.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
194 \item Si el parche tiene algún guardia positivo que corresponda con
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
195 cualquiera de los guardias seleccionados, se aplica el parche.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
196 \item Si el parche tiene guardias positivos o negativos, pero ninguno
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
197 corresponde con cualquiera de los guardias seleccionados, se salta
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
198 el parche.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
199 \end{itemize}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
200
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
201 \section{Podar el entorno de trabajo}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
202
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
203 En el trabajo del controlador de dispositivo que mencioné
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
204 anteriormente, yo no aplico los parches a un árbol normal del kernel
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
205 de Linux. En cambio, uso un repositorio que sólo contiene una
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
206 instantánea de los ficheros fuente y de cabecera que son relevantes
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
207 para el desarrollo de Infiniband. Este repositorio tiene un~1\% del
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
208 tamaño del repositorio del kernel, por lo que es más fácil trabajar
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
209 con él.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
210
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
211 Luego escojo una versión ``base'' sobre la cual son aplicados los
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
212 parches. Es una instantánea del árbol del kernel de Linux en una
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
213 revisión de mi elección. Cuando tomo la instantánea, almaceno el ID de
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
214 conjunto de cambios en el mensaje de consignación. Ya que la
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
215 instantánea preserva la ``forma'' y el contenido de las partes
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
216 relevantes del árbol del kernel, puedo aplicar mis parches sobre mi
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
217 pequeño repositorio o sobre un árbol normal del kernel.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
218
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
219 Normalmente, el árbol base sobre el que se aplican los parches debería
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
220 ser una instantánea de un árbol de desarrollo muy reciente. Esto
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
221 facilita mucho el desarrollo de parches que puedan ser enviados al
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
222 árbol oficial con pocas o ninguna modificación.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
223
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
224 \section{Dividir el fichero \sfilename{series}}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
225
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
226 Yo categorizo los parches en el fichero \sfilename{series} en una
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
227 serie de grupos lógicos. Cada sección de parches similares empieza con
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
228 un bloque de comentarios que describen el propósito de los parches que
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
229 le siguen.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
230
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
231 La secuencia de grupos de parches que mantengo se muestra a
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
232 continuación. El orden de los grupos es importante; explicaré porqué
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
233 luego de que presente los grupos.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
234 \begin{itemize}
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
235 \item El grupo ``aceptado''. Son parches que el equipo de desarrollo
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
236 ha enviado al mantenedor del subsistema Infiniband, y que él ha
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
237 aceptado, pero que no están presentes en la instantánea en la cual
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
238 está basada el repositorio pequeño. Estos son parches de
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
239 ``sólo lectura'', presentes únicamente para transformar el árbol en
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
240 un estado similar al del repositorio del mantenedor oficial.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
241 \item El grupo ``revisar''. Parches que yo he enviado, pero sobre los
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
242 que que el mantenedor oficial ha solicitado modificaciones antes de
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
243 aceptarlos.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
244 \item El grupo ``pendiente''. Parches que no he enviado al mantenedor
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
245 oficial, pero que ya están terminados. Estos parches serán de
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
246 ``sólo lectura'' por un buen tiempo. Si el mantenedor oficial los
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
247 acepta cuando los envíe, los moveré al final del grupo ``aceptado''.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
248 Si él solicita que modificaciones en alguno de ellos, los moveré al
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
249 principio del grupo ``revisar''.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
250 \item El grupo ``en proceso''. Parches que están siendo activamente
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
251 desarrollados, y no deberían ser enviados a ninguna parte aún.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
252 \item El grupo ``backport''. Parches que adaptan el árbol de fuentes a
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
253 versiones antiguas del árbol del kernel.
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
254 \item El grupo ``no enviar''. Parches que por alguna razón nunca deben
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
255 ser enviados al mantenedor oficial del kernel. Por ejemplo, alguno
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
256 de esos parches podría cambiar las cadenas de identificación
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
257 embebidas del controlador para hacer más fácil la distinción, en
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
258 pruebas de campo, entre una versión del controlador de
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
259 salida-del-árbol y una versión entregada por un vendedor de alguna
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
260 distribución.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
261 \end{itemize}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
262
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
263 Ahora volvemos a las razones para ordenar los grupos de parches en
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
264 esta manera. Quisiéramos que los parches del fondo de la pila sean tan
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
265 estables como sea posible, para no tener que revisar parches más
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
266 arriba debido a cambios de contexto. Poner los parches que nunca
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
267 cambiarán en el primer lugar del fichero \sfilename{series} sirve a
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
268 este propósito.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
269
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
270 También desearíamos que los parches que sabemos que debemos modificar
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
271 sean aplicados sobre un árbol de fuentes que se parezca al oficial
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
272 tanto como sea posible. Es por esto que mantenemos los parches
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
273 aceptados disponibles por una buena cantidad de tiempo.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
274
593
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
275 Los parches ``backport'' y ``no enviar'' flotan al final del fichero
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
276 \sfilename{series}. Los parches de backport deben ser aplicados encima
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
277 de todos los otros parches, y los parches ``no enviar'' pueden
f89480678965 translated section 13.7
Javier Rojas <jerojasro@devnull.li>
parents: 590
diff changeset
278 perfectamente quedarse fuera del camino.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
279
594
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
280 \section{Mantener la serie de parches}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
281
594
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
282 En mi trabajo, uso varios guardias para controlar qué parches deben
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
283 ser aplicados.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
284
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
285 \begin{itemize}
594
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
286 \item Los parches ``aceptados'' son vigilados con
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
287 \texttt{accepted}. Yo habilito este guardia la mayoría de las veces.
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
288 Cuando aplico los parches sobre un árbol donde los parches ya están
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
289 %TODO no será ``desactivar este guardia''? si sí, corregir versión
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
290 %en inglés también
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
291 presentes, puedo desactivar este parche, y los parches que lo siguen
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
292 se aplicarán sin problemas.
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
293 \item Los parches que están ``terminados'', pero no han sido enviados,
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
294 no tienen guardias. Si estoy aplicando la pila de parches a una
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
295 copia del árbol oficial, no necesito habilitar ningún guardia para
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
296 obtener un árbol de fuentes razonablemente seguro.
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
297 \item Los parches que necesitan revisión antes de ser reenviados
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
298 tienen el guardia \texttt{rework}.
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
299 \item Para aquellos parches que aún están bajo desarrollo, uso
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
300 \texttt{devel}.
594
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
301 \item Un parche de backport puede tener varios guardias, uno para cada
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
302 versión del kernel a la que aplica. Por ejemplo, un parche que hace
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
303 backport de un segmento de código a~2.6.9 tendrá un guardia~\texttt{2.6.9}.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
304 \end{itemize}
594
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
305 La variedad de guardias me brinda una flexibilidad considerable para
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
306 determinar qué tipo de árbol de fuentes acabaré por obtener. En la
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
307 mayoría de las situaciones, la selección de guardias apropiados es
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
308 automatizada durante el proceso de compilación, pero puedo ajustar
dfa2890d9b30 translated most of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 593
diff changeset
309 manualmente los guardias a usar para circunstancias poco comunes.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
310
596
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
311 \subsection{El arte de escribir parches de backport}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
312
596
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
313 Al usar MQ, escribir un parche de backport es un proceso simple. Todo
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
314 lo que dicho parche debe hacer es modificar una sección de código que
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
315 usa una característica del kernel que no está presente en la versión
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
316 anterior del kernel, para que el controlador siga funcionando
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
317 correctamente en esa versión anterior.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
318
596
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
319 Una meta útil al escribir un buen parche de backport es hacer parecer
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
320 que el código hubiera sido escrito para la versión vieja del kernel
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
321 que usted tiene como objetivo. Entre menos intrusivo el parche, más
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
322 fácil será entenderlo y mantenerlo. Si usted está escribiendo una
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
323 colección de parches de backport para evitar el efecto de ``nido de
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
324 ratas'' de tener muchos \texttt{\#ifdef}s (secciones de código fuente
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
325 que sólo son usados condicionalmente) en su código, no introduzca
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
326 \texttt{\#ifdef}s dependientes de versiones específicas en los
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
327 parches. En vez de eso, escriba varios parches, cada uno de ellos
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
328 haciendo cambios incondicionales, y controle su aplicación usando
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
329 guardias.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
330
596
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
331 Hay dos razones para ubicar los parches de backport en un grupo
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
332 diferente, aparte de los parches ``regulares'' cuyos efectos son
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
333 modificados por ellos. La primera es que mezclar los dos hace más
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
334 difícil usar herramientas como la extensión \hgext{patchbomb} para
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
335 automatizar el proceso de enviar los parches a un mantenedor oficial.
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
336 La segunda es que un parche de backport puede perturbar el contexto en
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
337 el que se aplica un parche regular subsecuente, haciendo imposible
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
338 aplicar el parche normal limpiamente \emph{sin} que el parche de
58dbbfef964f translated all of section 13.8
Javier Rojas <jerojasro@devnull.li>
parents: 594
diff changeset
339 backport sea aplicado antes.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
340
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
341 \section{Consejos útiles para hacer desarrollo con MQ}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
342
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
343 \subsection{Organizar parches en directorios}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
344
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
345 Si está trabajando en un proyecto grande con MQ, no es difícil
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
346 acumular un gran número de parches. Por ejemplo, tengo un repositorio
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
347 de parches que contiene más de 250 parches.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
348
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
349 Si usted puede agrupar estos parches en categorías lógicas separadas,
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
350 usted puede almacenarlos en diferentes directorios si lo desea; MQ no
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
351 tiene problemas manejando nombres de parches que contienen separadores
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
352 de ruta.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
353
615
9da096de3c52 changed "historia" to "historial".
Javier Rojas <jerojasro@devnull.li>
parents: 597
diff changeset
354 \subsection{Ver el historial de un parche}
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
355 \label{mq-collab:tips:interdiff}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
356
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
357 Si usted está desarrollando un conjunto de parches en un período de
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
358 tiempo grande, es una buena idea mantenerlos en un repositorio, como
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
359 se discutió en la sección~\ref{sec:mq:repo}. Si lo hace, notará
615
9da096de3c52 changed "historia" to "historial".
Javier Rojas <jerojasro@devnull.li>
parents: 597
diff changeset
360 rápidamente que usar el comando \hgcmd{diff} para mirar el historial
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
361 del repositorio no es viable. Esto es debido en parte a que usted está
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
362 mirando la segunda derivada del código real (el diff de un diff), pero
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
363 también porque MQ añade ruido al proceso al modificar las marcas de
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
364 tiempo y los nombres de directorio cuando actualiza un parche.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
365
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
366 Sin embargo, usted puede usar la extensión \hgext{extdiff}, que es
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
367 provisto junto con Mercurial, para convertir un diff de dos versiones
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
368 de un parche en algo legible. Para hacer esto, usted necesitará un
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
369 paquete de un tercero llamado
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
370 \package{patchutils}~\cite{web:patchutils}. Éste paquete provee un
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
371 comando llamado \command{interdiff}, que muestra las diferencias entre
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
372 dos diffs como un diff. Al usarlo en dos versiones del mismo diff,
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
373 genera un diff que representa el diff de la primera a la segunda
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
374 versión.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
375
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
376 Usted puede habilitar la extensión \hgext{extdiff} de la manera usual,
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
377 añadiendo una línea a la sección \rcsection{extensions} de su \hgrc.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
378 \begin{codesample2}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
379 [extensions]
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
380 extdiff =
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
381 \end{codesample2}
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
382 El comando \command{interdiff} espera recibir los nombres de dos
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
383 ficheros, pero la extensión \hgext{extdiff} le pasa un par de
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
384 directorios al programa que ejecuta, cada uno de los cuales puede
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
385 contener una cantidad arbitraria de ficheros. Por esto necesitamos un
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
386 programa pequeño que ejecute \command{interdiff} en cada par de
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
387 ficheros de estos dos directorios. Este programa está disponible como
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
388 \sfilename{hg-interdiff} en el directorio \dirname{examples} del
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
389 repositorio de código fuente que acompaña a este libro.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
390 \excode{hg-interdiff}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
391
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
392 Con el programa \sfilename{hg-interdiff} en la ruta de búsqueda de su
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
393 intérprete de comandos, puede ejecutarlo como sigue, desde dentro de
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
394 un directorio de parches MQ:
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
395 \begin{codesample2}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
396 hg extdiff -p hg-interdiff -r A:B my-change.patch
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
397 \end{codesample2}
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
398 Ya que usted seguramente querrá usar este comando tan largo a menudo,
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
399 puede hacer que \hgext{hgext} lo haga disponible como un comando
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
400 normal de Mercurial, editando de nuevo su \hgrc.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
401 \begin{codesample2}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
402 [extdiff]
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
403 cmd.interdiff = hg-interdiff
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
404 \end{codesample2}
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
405 Esto le indica a \hgext{hgext} que ponga a disposición un comando
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
406 \texttt{interdiff}, con lo que usted puede abreviar la invocación
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
407 anterior de \hgxcmd{extdiff}{extdiff} a algo un poco más manejable.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
408 \begin{codesample2}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
409 hg interdiff -r A:B my-change.patch
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
410 \end{codesample2}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
411
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
412 \begin{note}
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
413 %TODO revisar redacción
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
414 El comando \command{interdiff} trabaja bien sólo si los ficheros
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
415 contra los cuales son generadas las versiones de un parche se
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
416 mantienen iguales. Si usted crea un parche, modifica los ficheros
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
417 subyacentes, y luego regenera el parche, \command{interdiff} podría
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
418 no producir ningún resultado útil.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
419 \end{note}
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
420
597
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
421 La extensión \hgext{extdiff} es útil para más que solamente mejorar la
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
422 presentación de los parches~MQ. Para leer más acerca de esto, vaya a
a8cdb3cac133 finished mq-collab and updated the project status table
Javier Rojas <jerojasro@devnull.li>
parents: 596
diff changeset
423 la sección~\ref{sec:hgext:extdiff}.
435
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
424
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
425 %%% Local Variables:
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
426 %%% mode: latex
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
427 %%% TeX-master: "00book"
7e52f0cc4516 changed es/hgext.tex
jerojasro@localhost
parents: 432
diff changeset
428 %%% End: