Mercurial > hgbook
comparison es/hgext.tex @ 776:019040fbf5f5
merged to upstream: phase 1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Tue, 21 Apr 2009 00:36:40 +0900 |
parents | 801442e58e6d |
children |
comparison
equal
deleted
inserted
replaced
389:5981a0f7540a | 776:019040fbf5f5 |
---|---|
1 \chapter{Añadir funcionalidad con extensiones} | |
2 \label{chap:hgext} | |
3 | |
4 A pesar de que el corazón de Mercurial es muy completo desde el punto | |
5 de vista de funcionalidad, carece de características rimbombantes | |
6 deliberadamente. Esta aproximación de preservar la simplicidad | |
7 mantiene el programa sencillo tanto para mantenedores como para | |
8 usuarios. | |
9 | |
10 Si embargo Mercurial no le cierra las posibilidades a un conjunto | |
11 inflexible de órdenes: usted puede añadir características como | |
12 \emph{extensiones} (aveces llamadas \emph{añadidos}\ndt{plugins}). Ya | |
13 hemos discutido algunas de estas extensiones en capítulos anteriores: | |
14 \begin{itemize} | |
15 \item La sección~\ref{sec:tour-merge:fetch} cubre la extensión | |
16 \hgext{fetch}; que combina jalar cambios y fusionarlos con los | |
17 cambios locales en una sola orden: \hgxcmd{fetch}{fetch}. | |
18 \item En el capítulo~\ref{chap:hook}, cubrimos muchas extensiones que | |
19 son útiles en funcionalidades relacionadas con ganchos: Los | |
20 \hgext{acl} añaden listas de control de acceso; \hgext{bugzilla} | |
21 añade integración con el sistema de seguimiento de fallos Bugzilla; y | |
22 \hgext{notify} envía notificaciones por correo de nuevos cambios. | |
23 \item La extensión de administración de parches MQ es tan invaluable | |
24 que amerita dos capítulos y un apéndice por sí misma. | |
25 El capítulo~\ref{chap:mq} cubre lo básico; el | |
26 capítulo~\ref{chap:mq-collab} discute temas avanzados; y el | |
27 apéndice~\ref{chap:mqref} muestra en detalle cada orden. | |
28 \end{itemize} | |
29 | |
30 En este capítulo cubriremos algunas extensiones adicionales | |
31 disponibles para Mercurial, y daremos un vistazo a la maquinaria que | |
32 necesita conocer en caso de que desee escribir una extensión. | |
33 \begin{itemize} | |
34 \item En la sección~\ref{sec:hgext:inotify}, discutiremos la | |
35 posibilidad de mejorar el desempeño \emph{en gran medida} con la extensión | |
36 \hgext{inotify}. | |
37 \end{itemize} | |
38 | |
39 \section{Mejorar el desempeño con la extensión \hgext{inotify}} | |
40 \label{sec:hgext:inotify} | |
41 | |
42 ¿Desea lograr que las operaciones más comunmente usadas de Mercurial se | |
43 ejecuten centenas de veces más rápido? ¡A leer! | |
44 | |
45 Mercurial tiene gran desempeño bajo circunstancias normales. Por | |
46 ejemplo, cuando ejecuta la orden \hgcmd{status}, Mercurial tiene que | |
47 revisar casi todos los ficheros y directorios en su repositorio de | |
48 forma que pueda desplegar el estado de los ficheros. Muchas otras | |
49 órdenes tienen que hacer tal trabajo tras bambalinas; por ejemplo la | |
50 orden \hgcmd{diff} usa la maquinaria de estado para evitar hacer | |
51 operaciones de comparación costosas en ficheros que obviamente no han | |
52 cambiado. | |
53 | |
54 Dado que obtener el estado de los ficheros es crucial para obtener | |
55 buen desempeño, los autores de Mercurial han optimizado este código en | |
56 la medida de lo posible. Sin embargo, no puede obviarse el hecho de | |
57 que cuando ejecuta \hgcmd{status}, Mercurial tendrá que hacer por lo | |
58 menos una costosa llamada al sistema por cada fichero administrado | |
59 para determinar si ha cambiado desde la última vez que se consignó. | |
60 Para un repositorio suficientemente grande, puede tardar bastante | |
61 tiempo. | |
62 | |
63 Para mostrar en números la magnitud de este efect, creé un repositorio | |
64 que contenía 150.000 ficheros administrador. Tardó diez segundos para | |
65 ejecutar \hgcmd{status}, a pesar de que \emph{ninguno} de los ficheros | |
66 había sido modificado. | |
67 | |
68 Muchos sistemas operativos modernos contienen una facilidad de | |
69 notificación de ficheros. Si un programa se registra con un servicio | |
70 apropiado, el sistema operativo le notificará siempre que un fichero | |
71 de interés haya sido creado, modificado o borrado. En sistemas Linux, | |
72 el componente del núcleo que lo hace se llama \texttt{inotify}. | |
73 | |
74 La extensión \hgext{inotify} habla con el componente \texttt{inotify} | |
75 del núcleo para optimizar las órdenes de \hgcmd{status}. La extensión | |
76 tiene dos componentes. Un daemonio está en el fondo recibiendo | |
77 notificaciones del subsistema \texttt{inotify}. También escucha | |
78 conexiones de una orden regular de Mercurial. La extensión modifica | |
79 el comportamiento de Mercurial de tal forma que, en lugar de revisar | |
80 el sistema de ficheros, le pregunta al daemonio. Dado que el daemonio | |
81 tiene información perfecta acerca del estado del repositorio, puede | |
82 responder instantáneamente con el resultado, evitando la necesidad de | |
83 revisar cada directorio y fichero del repositorio. | |
84 | |
85 Retomando los diez segundos que medí al ejecutar la orden | |
86 \hgcmd{status} de Mercurial sobre un repositorio de 150.000 | |
87 ficheros. Con la extensión \hgext{inotify} habilitada, el tiempo se | |
88 disipó a 0.1~seconds, un factor \emph{cien veces} más rápido. | |
89 | |
90 Antes de continuar, tenga en cuenta algunos detalles: | |
91 \begin{itemize} | |
92 \item La extensión \hgext{inotify} es específica de Linux. Porque se | |
93 enlaza directamente con el subsistema \texttt{inotify} del núcleo | |
94 Linux, no funciona en otros sistemas operativos. | |
95 \item Debería funcionar en cualquier distribución Linux a partir de | |
96 comienzos del 2005. Las distribuciones más antiguas deben tener un | |
97 kernel sin \texttt{inotify}, o una versión de \texttt{glibc} que no | |
98 tiene necesariamente el soporte para la interfaz. | |
99 \item No todos los sistemas de ficheros pueden usarse con la extensión | |
100 \hgext{inotify}. Los sistemas de ficheros tales como NFS no lo | |
101 soportan, por ejemplo, si está corriendo Mercurial en vaios | |
102 sistemas, montados todos sobre el mismo sistema de ficheros en red. | |
103 El sistema \texttt{inotify} del kernel no tiene forma de saber | |
104 acerca de los cambios hechos en otro sistema. La mayoría de | |
105 sistemas de ficheros locales (p.e.~ext3, XFS, ReiserFS) deberían | |
106 funcionar bien. | |
107 \end{itemize} | |
108 | |
109 Hacia mayo de 2007 la extensión \hgext{inotify} no venía de forma | |
110 predeterminada en Mercurial\ndt{Desde el 2008 para kernels 2.6 viene | |
111 en Mercurial, pero no está activada de forma predeterminada}, y es | |
112 un poco más compleja de activar que otras extensiones. Pero la mejora | |
113 en el desempeño bien vale la pena! | |
114 | |
115 La extensión venía en dos partes: un conjunto de parches al código | |
116 fuente de Mercurial, y una librería de interfaces de Python hacia el | |
117 subsistema \texttt{inotify}. | |
118 \begin{note} | |
119 Hay \emph{dos} librerías de enlace de Python hacia \texttt{inotify}. | |
120 Una de ellas se llama \texttt{pyinotify}, y en algunas | |
121 distribuciones de Linux se encuentra como \texttt{python-inotify}. | |
122 Esta es la que \emph{no} necesita, puesto que tiene muchos fallos, | |
123 y es ineficiente para ser práctica. | |
124 \end{note} | |
125 Para comenzar, es mejor tener una copia de Mercurial funcional | |
126 instalada: | |
127 \begin{note} | |
128 Si sigue las instrucciones a continuación, estará | |
129 \emph{reemplazando} y sobreescribiendo cualquier instalación previa | |
130 de Mercurial que pudiera tener, con el código de Mercurial ``más | |
131 reciente y peligrosa''. No diga que no se le advirtio! | |
132 \end{note} | |
133 \begin{enumerate} | |
134 \item Clone el repositorio de interfaz entre Python e | |
135 \texttt{inotify}. Ármelo e instálelo: | |
136 \begin{codesample4} | |
137 hg clone http://hg.kublai.com/python/inotify | |
138 cd inotify | |
139 python setup.py build --force | |
140 sudo python setup.py install --skip-build | |
141 \end{codesample4} | |
142 \item Clone el repositorio \dirname{crew} de Mercurial. Clone el | |
143 repositorio de parches de \hgext{inotify} de forma tal que las colas | |
144 de Mercurial puedan aplicar los parches sobre el repositorio \dirname{crew}. | |
145 \begin{codesample4} | |
146 hg clone http://hg.intevation.org/mercurial/crew | |
147 hg clone crew inotify | |
148 hg clone http://hg.kublai.com/mercurial/patches/inotify inotify/.hg/patches | |
149 \end{codesample4} | |
150 \item Asegúrese de instalar la extensión Colas de Mercurial | |
151 \hgext{mq} y que estén habilitadas. Si nunca ha usado MQ, lea la | |
152 sección~\ref{sec:mq:start} para poder comenzar rápidamente. | |
153 \item Vaya al repositorio de \dirname{inotify} y aplique todos los | |
154 parches de \hgext{inotify} con la opción \hgxopt{mq}{qpush}{-a} de | |
155 la orden \hgxcmd{mq}{qpush}. | |
156 \begin{codesample4} | |
157 cd inotify | |
158 hg qpush -a | |
159 \end{codesample4} | |
160 Si obtiene un mensaje de error de \hgxcmd{mq}{qpush}, no debería | |
161 continuar. Mejor pida ayuda. | |
162 \item Arme e instale la versión parchada de Mercurial. | |
163 \begin{codesample4} | |
164 python setup.py build --force | |
165 sudo python setup.py install --skip-build | |
166 \end{codesample4} | |
167 \end{enumerate} | |
168 Una vez que haya armado una versión funcional parchada de Mercurial, | |
169 todo lo que necesita es habilitar la extensión \hgext{inotify} | |
170 colocando una entrada en su \hgrc. | |
171 \begin{codesample2} | |
172 [extensions] | |
173 inotify = | |
174 \end{codesample2} | |
175 Cuando la extensión \hgext{inotify} esté habilitada, Mercurial | |
176 iniciará transparente y automáticamente el daemonio de estado la | |
177 primera vez que ejecute un comando que requiera estado del | |
178 repositorio. Ejecuta un daemonio de estado por repositorio. | |
179 | |
180 El daemonio de estado se inicia silenciosamente y se ejecuta en el | |
181 fondo. Si mira a la lista de procesos en ejecución después de | |
182 habilitar la extensión \hgext{inotify} y ejecuta unos pocos comandos | |
183 en diferentes repositorios, verá que hay algunos procesos de | |
184 \texttt{hg} por ahí, esperando actualizaciones del kernel y | |
185 solicitudes de Mercurial. | |
186 | |
187 La primera vez que ejecuta un comando de Mercurial en un repositorio | |
188 cuando tiene la extensión \hgext{inotify} habilitada, correrá casi con | |
189 el mismo desempeño que una orden usual de Mercurial. Esto es debido a | |
190 que el estado del daemonio necesita aplicar una búsqueda normal sobre | |
191 el estado para poder tener una línea de partida frente a la cual | |
192 aplicar posteriormente actualizaciones del núcleo. De todas formas, | |
193 \emph{todo} comando posterior que haga cualquier clase de revisión del | |
194 estado debería ser notablemente más rápido en repositorios con incluso | |
195 un tamaño modesto. Aún mejor, a medida que su repositorio sea más | |
196 grande, mejor desempeño verá. El daemonio \hgext{inotify} hace | |
197 operaciones de estado de forma casi instantánea en repositorios de | |
198 todos los tamaños! | |
199 | |
200 Si lo desea, puede iniciar manualmente un daemonio de estado con la orden | |
201 \hgxcmd{inotify}{inserve}. Esto le da un control un poco más fino | |
202 acerca de cómo debería ejecutarse el daemonio. Esta orden solamente | |
203 estará disponible cuando haya habilitado la extensión \hgext{inotify}. | |
204 | |
205 Cuando esté usando la extensión \hgext{inotify}, | |
206 \emph{no debería ver diferencia} en el comportamiento de Mercurial, | |
207 con la única excepción de que los comandos relacionados con el estado | |
208 deberían ejectuarse mucho más rápido que como solían hacerlo. Debería | |
209 esperar específicamente que las órdenes no deberían ofrecer salidas | |
210 distintas; ni ofrecer resultados diferentes. Si alguna de estas | |
211 situaciones ocurre, por favor reporte el fallo. | |
212 | |
213 \section{Soporte flexible de diff con la extensión \hgext{extdiff}} | |
214 \label{sec:hgext:extdiff} | |
215 | |
216 La orden predeterminada \hgcmd{diff} de Mercurial despliega diffs en | |
217 texto plano unificadas. | |
218 \interaction{extdiff.diff} | |
219 Si dese emplear una herramienta externa para desplegar las | |
220 modificaciones, querrá usar la extensión \hgext{extdiff}. Esta le | |
221 permitirá usar por ejemplo una herramienta gráfica de diff. | |
222 | |
223 La extensión \hgext{extdiff} viene con Mercurial, y es fácil | |
224 configurar. En la sección \rcsection{extensions} de su \hgrc, | |
225 basta con añadir una entrada de una línea para habilitar la extensión. | |
226 \begin{codesample2} | |
227 [extensions] | |
228 extdiff = | |
229 \end{codesample2} | |
230 Esto introduce una orden llamada \hgxcmd{extdiff}{extdiff}, que de | |
231 forma predeterminada usa su orden del sistema \command{diff} para | |
232 generar un diff unificado de la misma forma que lo hace el comando | |
233 predeterminado \hgcmd{diff}. | |
234 \interaction{extdiff.extdiff} | |
235 El resultado no será exactamente el mismo que con la orden interna | |
236 \hgcmd{diff}, puesto que la salida de \command{diff} varía de un | |
237 sistema a otro, incluso pasando las mismas opciones. | |
238 | |
239 Como lo indican las líneas``\texttt{making snapshot}'', la orden | |
240 \hgxcmd{extdiff}{extdiff} funciona creando dos instantáneas de su | |
241 árbol de fuentes. La primera instantánea es la revisión fuente; la | |
242 segunda es la revisión objetivo del directorio de trabajo. La orden | |
243 \hgxcmd{extdiff}{extdiff} genera estas instantáneas en un directorio | |
244 temporal, pasa el nombre de cada directorio a un visor de diffs | |
245 temporal y borra los directorios temporales. Por cuestiones de | |
246 eficiencia solamente genera instantáneas de los directorios y ficheros | |
247 que han cambiado entre dos revisiones. | |
248 | |
249 Los nombres de los directorios de instantáneas tienen los mismos | |
250 nombres base de su repositorio. Si su repositorio tiene por ruta | |
251 \dirname{/quux/bar/foo}, \dirname{foo} será el nombre de cada | |
252 instantánea de directorio. Cada instantánea de directorio tiene sus | |
253 identificadores de conjuntos de cambios al final del nombre en caso de | |
254 que sea apropiado. Si una instantánea viene de la revisión | |
255 \texttt{a631aca1083f}, el directorio se llamará | |
256 \dirname{foo.a631aca1083f}. Una instantánea del directorio de trabajo | |
257 no tendrá el identificador del conjunto de cambios, y por lo tanto | |
258 será solamente \dirname{foo} en este ejemplo. Para ver cómo luce en | |
259 la práctica, veamos de nuevo el ejemplo \hgxcmd{extdiff}{extdiff} | |
260 antes mencionado. Tenga en cuenta que los diffs tienen los nombres de | |
261 las instantáneas de directorio dentro de su encabezado. | |
262 | |
263 La orden \hgxcmd{extdiff}{extdiff} acepta dos opciones importantes. | |
264 La opción \hgxopt{extdiff}{extdiff}{-p} le permite elegir un programa | |
265 para ver las diferencias, en lugar de \command{diff}. Con la opción | |
266 \hgxopt{extdiff}{extdiff}{-o} puede cambiar las opciones que | |
267 \hgxcmd{extdiff}{extdiff} pasa a tal programa (de forma predeterminada | |
268 las opciones son``\texttt{-Npru}'', que tienen sentido únicamente si | |
269 está usando \command{diff}). En otros aspectos, la orden | |
270 \hgxcmd{extdiff}{extdiff} actúa de forma similar a como lo hace la | |
271 orden \hgcmd{diff} de Mercurial: usted usa los mismos nombres de | |
272 opciones, sintaxis y argumentos para especificar las revisiones y los | |
273 ficheros que quiere, y así sucesivamente. | |
274 | |
275 Por ejemplo, para ejecutar la orden usual del sistema \command{diff}, | |
276 para lograr que se generen diferencias de contexto (con la opción | |
277 \cmdopt{diff}{-c}) en lugar de diferencias unificadas, y cinco líneas | |
278 de contexto en lugar de las tres predeterminadas (pasando \texttt{5} | |
279 como argumento a la opción \cmdopt{diff}{-C}). | |
280 \interaction{extdiff.extdiff-ctx} | |
281 | |
282 Es sencillo lanzar unas herramienta usual de diferencias. Para lanzar | |
283 el visor \command{kdiff3}: | |
284 \begin{codesample2} | |
285 hg extdiff -p kdiff3 -o '' | |
286 \end{codesample2} | |
287 | |
288 Si su orden para visualizar diferencias no puede tratar con | |
289 directorios, puede usar un poco de scripting para lograrlo. Un | |
290 ejemplo de un script con la extensión \hgext{mq} junto con la orden | |
291 \command{interdiff} está en la sección~\ref{mq-collab:tips:interdiff}. | |
292 | |
293 \subsection{Definición de alias de comandos} | |
294 | |
295 Acordarse de todas las opciones de las órdenes | |
296 \hgxcmd{extdiff}{extdiff} y el visor de diferencias de su preferencia | |
297 puede ser dispendioso, y por lo tanto la extensión \hgext{extdiff} le | |
298 permite definir \emph{nuevas} órdenes que invocarán su visor de | |
299 diferencias con las opciones exactas. | |
300 | |
301 Basta con editar su fichero \hgrc, y añadir una sección llamada | |
302 \rcsection{extdiff}. Dentro de esta sección puede definir varias | |
303 órdenes. Mostraremos como añadir la orden \texttt{kdiff3}. Después de | |
304 definido, puede teclear ``\texttt{hg kdiff3}'' y la extensión a | |
305 \hgext{extdiff} ejecutará la orden \command{kdiff3}. | |
306 \begin{codesample2} | |
307 [extdiff] | |
308 cmd.kdiff3 = | |
309 \end{codesample2} | |
310 Si deja vacía la porción derecha de la definición, como en el ejemplo, | |
311 la extensión \hgext{extdiff} usa el nombre de la orden se definirá | |
312 como el nombre del programa externo a ejecutar. Pero tales nombres no | |
313 tienen por qué ser iguales. Definimos ahora la orden llamada | |
314 ``\texttt{hg wibble}'', que ejecuta \command{kdiff3}. | |
315 \begin{codesample2} | |
316 [extdiff] | |
317 cmd.wibble = kdiff3 | |
318 \end{codesample2} | |
319 | |
320 También puede especificar las opciones predeterminadas con las cuales | |
321 desea invocar el visor de diferencias. Se usa el prefijo ``\texttt{opts.}'', | |
322 seguido por el nombre de la orden a la cual se aplican las opciones. | |
323 En este ejemplos se define la orden ``\texttt{hg vimdiff}'' que | |
324 ejecuta la extensión \texttt{DirDiff} del editor \command{vim}. | |
325 \begin{codesample2} | |
326 [extdiff] | |
327 cmd.vimdiff = vim | |
328 opts.vimdiff = -f '+next' '+execute "DirDiff" argv(0) argv(1)' | |
329 \end{codesample2} | |
330 | |
331 \section{Uso de la extensión \hgext{transplant} para seleccionar} | |
332 \label{sec:hgext:transplant} | |
333 | |
334 Need to have a long chat with Brendan about this. | |
335 | |
336 \section{Enviar cambios vía correo electrónico con la extensión \hgext{patchbomb}} | |
337 \label{sec:hgext:patchbomb} | |
338 | |
339 Varios proyectos tienen la cultura de ``revisión de cambios'', en la | |
340 cual la gente envía sus modificaciones a una lista de correo para que | |
341 otros las lean y comenten antes de consignar la versión final a un | |
342 repositorio compartido. Algunos proyectos tienen personas que actúan | |
343 como cancerberos; ellos aplican los cambios de otras personas a un | |
344 repositorio para aquellos que no tienen acceso. | |
345 | |
346 Mercurial facilita enviar cambios por correo para revisión o | |
347 aplicación gracias a su extensión \hgext{patchbomb}. La extensión es | |
348 tan popular porque los cambios se formatean como parches y es usual | |
349 que se envía un conjunto de cambios por cada correo. Enviar una gran | |
350 cantidad de cambios por correos se llama por tanto ``bombardear'' el | |
351 buzón de entrada del destinatario, de ahí su nombre ``bombardeo de | |
352 parches''. | |
353 | |
354 Como es usual, la configuración básica de la extensión | |
355 \hgext{patchbomb} consta de una o dos líneas en su \hgrc. | |
356 \begin{codesample2} | |
357 [extensions] | |
358 patchbomb = | |
359 \end{codesample2} | |
360 Cuando haya habilitado la extensión, dispondrá de una nueva orden, | |
361 llamada \hgxcmd{patchbomb}{email}. | |
362 | |
363 La forma mejor y más segura para invocar la orden | |
364 \hgxcmd{patchbomb}{email} es ejecutarla \emph{siempre} con la opción | |
365 \hgxopt{patchbomb}{email}{-n}; que le mostrará lo que la orden | |
366 \emph{enviaría}, sin enviar nada. Una vez que haya dado un vistazo a | |
367 los cambios y verificado que está enviando los correctos, puede volver | |
368 a ejecutar la misma orden, sin la opción \hgxopt{patchbomb}{email}{-n}. | |
369 | |
370 La orden \hgxcmd{patchbomb}{email} acepta la misma clase de sintaxis | |
371 de revisiones como cualquier otra orden de Mercurial. Por ejemplo, | |
372 enviará todas las revisiones entre la 7 y la \texttt{punta}, inclusive. | |
373 \begin{codesample2} | |
374 hg email -n 7:tip | |
375 \end{codesample2} | |
376 También puede especificar un \emph{repositorio} para comparar. Si | |
377 indica un repositoro sin revisiones, la orden \hgxcmd{patchbomb}{email} | |
378 enviará todas las revisiones en el repositorio local que no están | |
379 presentes en el repositorio remoto. Si especifica revisiones | |
380 adicionalmente o el nombre de una rama (la última con la opción | |
381 \hgxopt{patchbomb}{email}{-b}), respetará las revisiones enviadas. | |
382 | |
383 Ejecutar la orden \hgxcmd{patchbomb}{email} sin los nombres de | |
384 aquellas personas a las cuales desea enviar el correo es completamente | |
385 seguro: si lo hace, solicitará tales valores de forma interactiva. | |
386 (Si está usando Linux o un sistema tipo Unix, tendrá capacidades | |
387 estilo--\texttt{readline} aumentadas cuando ingrese tales encabezados, | |
388 lo cual es sumamente útil.) | |
389 | |
390 Cuando envíe una sola revisión, la orden \hgxcmd{patchbomb}{email} | |
391 de forma predeterminada usará la primera línea de descripción del | |
392 conjunto de cambios como el tema del único mensaje que se enviará. | |
393 | |
394 Si envía varias revisiones, la orden \hgxcmd{patchbomb}{email} enviará | |
395 normalmente un mensaje por conjunto de cambios. Colocará como | |
396 prefacio un mensaje introductorio en el cual usted debería describir | |
397 el propósito de la serie de cambios que está enviando. | |
398 | |
399 \subsection{Cambiar el comportamiento de las bombas de parches} | |
400 | |
401 Cada proyecto tiene sus propias convenciones para enviar cambios en un | |
402 correo electrónico; la extensión \hgext{patchbomb} intenta acomodarse | |
403 a diferentes variaciones gracias a las opciones de la línea de órdenes: | |
404 \begin{itemize} | |
405 \item Puede escribir un tema para el mensaje introductorio en la línea | |
406 de órdenes con la opciń \hgxopt{patchbomb}{email}{-s}. Toma un | |
407 argumento: el tema del mensaje a usar. | |
408 \item Para cambiar el correo electrónico del campo del cual se | |
409 origina, use la opción \hgxopt{patchbomb}{email}{-f}. Toma un | |
410 argumento, el correo electrónico a usar. | |
411 \item El comportamiento predeterminado es enviar diferencias | |
412 unificadas (consulte la sección~\ref{sec:mq:patch} si desea una | |
413 descripción del formato), una por mensaje. Puede enviar un conjunto | |
414 binario\ndt{binary bundle} con la opción \hgxopt{patchbomb}{email}{-b}. | |
415 \item Las diferencias unificadas están precedidas por un encabezado de | |
416 metadatos. Puede omitirlo, y enviar diferencias sin adornos con la | |
417 opción \hgxopt{patchbomb}{email}{--plain}. | |
418 \item Las diferencias usualmente se envían ``en línea'', como parte | |
419 del cuerpo del mensaje con la descripción del parche. Que facilita a | |
420 a la mayor cantidad de lectores citar y responder partes de un diff, | |
421 dado que algunos clientes de correo solamente citarán la primera | |
422 parte MIME del cuerpo de un mensaje. Si prefiere enviar la | |
423 descripción y el diff en partes separadas del cuerpo, use la opción | |
424 \hgxopt{patchbomb}{email}{-a}. | |
425 \item En lugar de enviar mensajes de correo puede escribirlos a un | |
426 fichero con formato-\texttt{mbox}- con la opción | |
427 \hgxopt{patchbomb}{email}{-m}. La opción recibe un argumento, el | |
428 nombre del fichero en el cual escribir. | |
429 \item Si desea añadir un resumen con formato-\command{diffstat} en | |
430 cada parche, y uno como mensaje introductorio, use la opción | |
431 \hgxopt{patchbomb}{email}{-d}. La orden \command{diffstat} | |
432 despliega una tabla que contiene el nombre de cada fichero parchado, | |
433 el número de líneas afectadas, y un historgrama mostrando cuánto ha | |
434 sido modificado cada fichero. Lo cual ofrece a los lectores una | |
435 mirada cuantitativa de cuan complejo es el parche. | |
436 \end{itemize} | |
437 | |
438 %%% Local Variables: | |
439 %%% mode: latex | |
440 %%% TeX-master: "00book" | |
441 %%% End: |