comparison es/mq.tex @ 548:9b3cc9f398f9

Finished MQ chapter translation Added translation term fold
author Igor TAmara <igor@tamarapatino.org>
date Sat, 13 Dec 2008 12:23:51 -0500
parents c17848cfbf75
children 4e2ebef2c9a4
comparison
equal deleted inserted replaced
547:c17848cfbf75 548:9b3cc9f398f9
33 solo parche con los programas estándar \command{diff} y 33 solo parche con los programas estándar \command{diff} y
34 \command{patch}( ver la sección~\ref{sec:mq:patch} para ver cómo 34 \command{patch}( ver la sección~\ref{sec:mq:patch} para ver cómo
35 emplear tales herramientas). Cuando la cantidad de cambios comienza a 35 emplear tales herramientas). Cuando la cantidad de cambios comienza a
36 crecer, tiene sentido mantener parches como ``porciones de trabajo'' 36 crecer, tiene sentido mantener parches como ``porciones de trabajo''
37 individual, de forma que cada cambio contiene solamente un arreglo de 37 individual, de forma que cada cambio contiene solamente un arreglo de
38 un fallo(el parche puede modificar varios archivos, pero está 38 un fallo(el parche puede modificar varios ficheros, pero está
39 ``haciendo una sola cosa''), y puede tener cierta cantidad de tales 39 ``haciendo una sola cosa''), y puede tener cierta cantidad de tales
40 parches para diferentes fallos y cambios locales. En esta situación, 40 parches para diferentes fallos y cambios locales. En esta situación,
41 si envía un parche que arregla un fallo a los mantenedores principales 41 si envía un parche que arregla un fallo a los mantenedores principales
42 de un paquete y ellos incluyen su arreglo en una publicación 42 de un paquete y ellos incluyen su arreglo en una publicación
43 posterior, puede deshacerse de tal parche cuando se actualice a la 43 posterior, puede deshacerse de tal parche cuando se actualice a la
80 quilt automatizaba sustancialmente la administración de parches, fue 80 quilt automatizaba sustancialmente la administración de parches, fue
81 adoptado en gran medida por desarrolladores de programas abiertos. 81 adoptado en gran medida por desarrolladores de programas abiertos.
82 82
83 Quilt maneja una \emph{pila de parches} sobre un árbol de directorios. 83 Quilt maneja una \emph{pila de parches} sobre un árbol de directorios.
84 Para comenzar, usted le indica a quilt que administre un árbol de 84 Para comenzar, usted le indica a quilt que administre un árbol de
85 directorios, le indica qué archivos manejar; Este almacena los nombres 85 directorios, le indica qué ficheros manejar; Este almacena los nombres
86 y los contenidos de estos archivos. Para arreglar un fallo, usted 86 y los contenidos de estos ficheros. Para arreglar un fallo, usted
87 crea un nuevo parche(con una sola orden), edita los archivos que está 87 crea un nuevo parche(con una sola orden), edita los ficheros que está
88 arreglando y ``refresca'' el parche. 88 arreglando y ``refresca'' el parche.
89 89
90 El paso de refresco hace que quilt revise el árbol de directorios; 90 El paso de refresco hace que quilt revise el árbol de directorios;
91 actualiza el parche con todos los cambios que usted haya hecho. Puede 91 actualiza el parche con todos los cambios que usted haya hecho. Puede
92 crear otro parche sobre el primero, que hará seguimiento de los 92 crear otro parche sobre el primero, que hará seguimiento de los
103 actualizado. Esto significa que puede, en cualquier momento, cambiar 103 actualizado. Esto significa que puede, en cualquier momento, cambiar
104 qué parches serán aplicados y qué modificaciones hacen ellos. 104 qué parches serán aplicados y qué modificaciones hacen ellos.
105 105
106 Quilt no tiene nada que ver con herramientas de control de versiones, 106 Quilt no tiene nada que ver con herramientas de control de versiones,
107 y puede trabajar bien sobre un conjunto de fuentes que viene de un 107 y puede trabajar bien sobre un conjunto de fuentes que viene de un
108 archivo comprimido y empaquetado o una copia de trabajo de Subversion. 108 fichero comprimido y empaquetado o una copia de trabajo de Subversion.
109 109
110 \subsection{Pasar de trabajo con parches con Quilt hacia Colas de Mercurial} 110 \subsection{Pasar de trabajo con parches con Quilt hacia Colas de Mercurial}
111 \label{sec:mq:quilt-mq} 111 \label{sec:mq:quilt-mq}
112 112
113 A mediados de 2005, Chris Mason tomó las características de quilt y 113 A mediados de 2005, Chris Mason tomó las características de quilt y
163 parches afectaron un fichero. Puede usar la orden \hgext{bisect} para 163 parches afectaron un fichero. Puede usar la orden \hgext{bisect} para
164 hacer una búsqueda binaria sobre todos los conjuntos de cambios y 164 hacer una búsqueda binaria sobre todos los conjuntos de cambios y
165 parches aplicados para ver dónde se introdujo un fallo o dónde fue 165 parches aplicados para ver dónde se introdujo un fallo o dónde fue
166 arreglado. Puede usar la orden \hgcmd{annotate} para ver qué 166 arreglado. Puede usar la orden \hgcmd{annotate} para ver qué
167 conjuntos de cambios o parches modificaron una línea particular de un 167 conjuntos de cambios o parches modificaron una línea particular de un
168 archivo fuente. Y mucho más. 168 fichero fuente. Y mucho más.
169 169
170 \section{Entender los parches} 170 \section{Entender los parches}
171 \label{sec:mq:patch} 171 \label{sec:mq:patch}
172 172
173 Dado que MQ no esconde su naturaleza parche-céntrica, es muy útil para 173 Dado que MQ no esconde su naturaleza parche-céntrica, es muy útil para
477 tanto es útil conocer ciertos detalles de cómo trabaja 477 tanto es útil conocer ciertos detalles de cómo trabaja
478 \command{patch}, y también acerca de los parches. 478 \command{patch}, y también acerca de los parches.
479 479
480 \subsection{La cantidad de franjas} 480 \subsection{La cantidad de franjas}
481 481
482 Si ve el encabezado de un parche, notará que la ruta al archivo tiene 482 Si ve el encabezado de un parche, notará que la ruta al fichero tiene
483 un componente adicional al principio, que no está presente en la 483 un componente adicional al principio, que no está presente en la
484 ruta. Esta es una traza de cómo generaba anteriormente los parches la 484 ruta. Esta es una traza de cómo generaba anteriormente los parches la
485 gente(algunos aún lo hacen, pero es raro con las herramientas de 485 gente(algunos aún lo hacen, pero es raro con las herramientas de
486 control de revisiones del actuales). 486 control de revisiones del actuales).
487 487
488 Alicia desempaquetaría un comprimido, editaría sus archivos, y querría 488 Alicia desempaquetaría un comprimido, editaría sus ficheros, y querría
489 crear un parche. Por lo tanto ella renombraría su directorio de 489 crear un parche. Por lo tanto ella renombraría su directorio de
490 trabajo, desempacaría el comprimido de nuevo(para lo cual necesitó el 490 trabajo, desempacaría el comprimido de nuevo(para lo cual necesitó el
491 renombramiento), y usaría las opciones \cmdopt{diff}{-r} y 491 renombramiento), y usaría las opciones \cmdopt{diff}{-r} y
492 \cmdopt{diff}{-N} de \command{diff} para generar recursivamente un 492 \cmdopt{diff}{-N} de \command{diff} para generar recursivamente un
493 parche entre el directorio original y el modificado. El resultado 493 parche entre el directorio original y el modificado. El resultado
494 sería que el nombre del directorio original estaría al principio de 494 sería que el nombre del directorio original estaría al principio de
495 toda ruta en cada encabezado de fichero, y el nombre del directorio 495 toda ruta en cada encabezado de fichero, y el nombre del directorio
496 modificado estaría al frente de la porción derecha de la ruta del 496 modificado estaría al frente de la porción derecha de la ruta del
497 archivo. 497 fichero.
498 498
499 Como alguien que reciba un parche de Alicia en la red podría obtener 499 Como alguien que reciba un parche de Alicia en la red podría obtener
500 dos directorios, uno original y el otro modificado con exactamente los 500 dos directorios, uno original y el otro modificado con exactamente los
501 mismos nombres, la orden \command{patch} tiene la opción 501 mismos nombres, la orden \command{patch} tiene la opción
502 \cmdopt{patch}{-p} que indica la cantidad de componentes de la ruta 502 \cmdopt{patch}{-p} que indica la cantidad de componentes de la ruta
584 fichero fue añadida''. 584 fichero fue añadida''.
585 \item Trata el renombramiento de un fichero como la eliminación del 585 \item Trata el renombramiento de un fichero como la eliminación del
586 nombre anterior y la adición del nuevo nombre. Esto significa que 586 nombre anterior y la adición del nuevo nombre. Esto significa que
587 los ficheros renombrados dejan un rastro grande en los parches. 587 los ficheros renombrados dejan un rastro grande en los parches.
588 (Tenga en cuenta que Mercurial no trata de inferir cuando los 588 (Tenga en cuenta que Mercurial no trata de inferir cuando los
589 archivos han sido renombrados o copiados en un parche en este 589 ficheros han sido renombrados o copiados en un parche en este
590 momento.) 590 momento.)
591 \item \command{patch} no puede representar ficheros vacíos, por lo 591 \item \command{patch} no puede representar ficheros vacíos, por lo
592 tanto no puede usar un parche para representar la noción ``Añadí 592 tanto no puede usar un parche para representar la noción ``Añadí
593 este fichero vacío al árbol''. 593 este fichero vacío al árbol''.
594 \end{itemize} 594 \end{itemize}
595 \subsection{Cuidado con los difusos} 595 \subsection{Cuidado con los difusos}
596 596
597 Cuando aplique un trozo con un corrimiento, o con un factor difuso, 597 Cuando aplique un trozo con un corrimiento, o con un factor difuso,
598 aveces será taotalmente exitoso, tales técnicas inexactas dejan 598 aveces será taotalmente exitoso, tales técnicas inexactas dejan
599 claramente la posibilidad de corromper el archivo parchado. Los casos 599 claramente la posibilidad de corromper el fichero parchado. Los casos
600 más típicos involucran aplicar un parche dos veces o en un sitio 600 más típicos involucran aplicar un parche dos veces o en un sitio
601 incorrecto del fichero. Si \command{patch} o \hgxcmd{mq}{qpush} llegan 601 incorrecto del fichero. Si \command{patch} o \hgxcmd{mq}{qpush} llegan
602 a mencionar un corrimiento o un factor difuso, debería asegurarse que 602 a mencionar un corrimiento o un factor difuso, debería asegurarse que
603 los ficheros modificados estén correctos después del suceso. 603 los ficheros modificados estén correctos después del suceso.
604 604
656 doble su salida, dejándolo a usted en un programa de fusión cuando la 656 doble su salida, dejándolo a usted en un programa de fusión cuando la
657 herramienta haya terminado su trabajo, de tal forma que usted pueda 657 herramienta haya terminado su trabajo, de tal forma que usted pueda
658 verificar lo que ha hecho y pueda terminar de aplicar cualquier fusión 658 verificar lo que ha hecho y pueda terminar de aplicar cualquier fusión
659 faltante. 659 faltante.
660 660
661 \section{Contar con el máximo rendimiento de MQ} 661 \section{maximizar el rendimiento de MQ}
662 \label{sec:mq:perf} 662 \label{sec:mq:perf}
663 663
664 MQ es muy eficiente al tratar con una gran cantidad de parches. Corrí 664 MQ es muy eficiente al tratar con una gran cantidad de parches. Corrí
665 unos experimentos de desempeño a mediados del 2006 para una charla que 665 unos experimentos de desempeño a mediados del 2006 para una charla que
666 dí en la conferencia EuroPython 2006~\cite{web:europython}. Empleé la 666 dí en la conferencia EuroPython 2006~\cite{web:europython}. Empleé la
797 parche aplicado. Adicionalmente, los tags especiales \index{tags!special tag 797 parche aplicado. Adicionalmente, los tags especiales \index{tags!special tag
798 names!\texttt{qbase}}\texttt{qbase} y \index{tags!special tag 798 names!\texttt{qbase}}\texttt{qbase} y \index{tags!special tag
799 names!\texttt{qtip}}\texttt{qtip} identifican los parches 799 names!\texttt{qtip}}\texttt{qtip} identifican los parches
800 ``primero'' y último, respectivamente. 800 ``primero'' y último, respectivamente.
801 801
802 These additions to Mercurial's normal tagging capabilities make 802 Junto con las capacidades de Mercurial para etiquetar, estas adiciones
803 dealing with patches even more of a breeze. 803 hacen que trabajar con parches sea muy sencillo.
804 \begin{itemize} 804 \begin{itemize}
805 \item Want to patchbomb a mailing list with your latest series of 805 \item ¿Desea enviar una bomba de parches a una lista de correo con los
806 changes? 806 últimos cambios que ha hecho?
807 \begin{codesample4} 807 \begin{codesample4}
808 hg email qbase:qtip 808 hg email qbase:qtip
809 \end{codesample4} 809 \end{codesample4}
810 (Don't know what ``patchbombing'' is? See 810 (¿No sabe qué es una ``bomba de parches''? Consulte la
811 section~\ref{sec:hgext:patchbomb}.) 811 sección~\ref{sec:hgext:patchbomb}.)
812 \item Need to see all of the patches since \texttt{foo.patch} that 812 \item ¿Desea ver todos los parches desde que se aplicó
813 have touched files in a subdirectory of your tree? 813 \texttt{foo.patch} sobre los ficheros de un subdirectorio en su
814 árbol?
814 \begin{codesample4} 815 \begin{codesample4}
815 hg log -r foo.patch:qtip \emph{subdir} 816 hg log -r foo.patch:qtip \emph{subdir}
816 \end{codesample4} 817 \end{codesample4}
817 \end{itemize} 818 \end{itemize}
818 819
819 Because MQ makes the names of patches available to the rest of 820 Dado que MQ nombra los parches disponibles al resto de Mercurial con
820 Mercurial through its normal internal tag machinery, you don't need to 821 su maquinaria de etiquetas interna, usted no necesita teclear el
821 type in the entire name of a patch when you want to identify it by 822 nombre completo de un parche cuando desea identificarlo por su nombre.
822 name.
823 823
824 \begin{figure}[ht] 824 \begin{figure}[ht]
825 \interaction{mq.id.output} 825 \interaction{mq.id.output}
826 \caption{Using MQ's tag features to work with patches} 826 \caption{Uso de las características de etiquetamiento al trabajar
827 con MQ}
827 \label{ex:mq:id} 828 \label{ex:mq:id}
828 \end{figure} 829 \end{figure}
829 830
830 Another nice consequence of representing patch names as tags is that 831 Otra consecuencia deseable al representar los nombres de parches como
831 when you run the \hgcmd{log} command, it will display a patch's name 832 etiquetas es que cuando ejecute la orden \hgcmd{log}, desplegará el
832 as a tag, simply as part of its normal output. This makes it easy to 833 nombre del parche como una etiqueta, usualmente con la salida normal.
833 visually distinguish applied patches from underlying ``normal'' 834 Esto facilita distinguir visualmente los parches aplicados de las
834 revisions. Figure~\ref{ex:mq:id} shows a few normal Mercurial 835 revisiones ``normales''. La figura~\ref{ex:mq:id} muestra algunos
835 commands in use with applied patches. 836 comandos usuales de Mercurial al trabajar con parches.
836 837
837 \section{Useful things to know about} 838 \section{Otra información útil}
838 839
839 There are a number of aspects of MQ usage that don't fit tidily into 840 Hay una cantidad de aspectos que hacen que el uso de MQ no representen
840 sections of their own, but that are good to know. Here they are, in 841 secciones en sí mismas, pero de los cuales es bueno estar
841 one place. 842 enterado. Los presentamos en aquí:
842 843
843 \begin{itemize} 844 \begin{itemize}
844 \item Normally, when you \hgxcmd{mq}{qpop} a patch and \hgxcmd{mq}{qpush} it 845 \item Usualmente cuando hace \hgxcmd{mq}{qpop} a un parche y vuelve a
845 again, the changeset that represents the patch after the pop/push 846 hacerle \hgxcmd{mq}{qpush}, el conjunto de cambios que representa el
846 will have a \emph{different identity} than the changeset that 847 parche después de introducir/sustraer tendrá una \emph{identidad
847 represented the hash beforehand. See 848 distinta} que aquella que representaba el conjunto de cambios
848 section~\ref{sec:mqref:cmd:qpush} for information as to why this is. 849 anteriormente. Consulte la secctión~\ref{sec:mqref:cmd:qpush} para
849 \item It's not a good idea to \hgcmd{merge} changes from another 850 obtener información del por qué de esto.
850 branch with a patch changeset, at least if you want to maintain the 851 \item No es una buena idea aplicar \hgcmd{merge} de cambios de otra
851 ``patchiness'' of that changeset and changesets below it on the 852 rama con un conjunto de cambios de parches, por lo menos si desea
852 patch stack. If you try to do this, it will appear to succeed, but 853 mantener la ``información de parches'' de ese conjunto de cambios y
853 MQ will become confused. 854 los conjuntos de cambios que se encuentran por debajo en la pila de
855 parches. Si intenta hacerlo, parecerá que ha sido exitoso, pero MQ
856 se confundirá.
854 \end{itemize} 857 \end{itemize}
855 858
856 \section{Managing patches in a repository} 859 \section{Administrar parches en un repositorio}
857 \label{sec:mq:repo} 860 \label{sec:mq:repo}
858 861
859 Because MQ's \sdirname{.hg/patches} directory resides outside a 862 Dado que el directorio \sdirname{.hg/patches} de MQ reside fuera del
860 Mercurial repository's working directory, the ``underlying'' Mercurial 863 repositorio de trabajo de Mercurial, el repositorio ``subyacente'' de
861 repository knows nothing about the management or presence of patches. 864 Mercurial no sabe nada acerca de la administración o presencia de
862 865 parches.
863 This presents the interesting possibility of managing the contents of 866
864 the patch directory as a Mercurial repository in its own right. This 867 Esto presenta la interesante posibilidad de administrar los contenidos
865 can be a useful way to work. For example, you can work on a patch for 868 de el directorio de parches como un repositorio de Mercurial por su
866 a while, \hgxcmd{mq}{qrefresh} it, then \hgcmd{commit} the current state of 869 cuenta. Puede ser una forma útil de trabajar. Por ejemplo, puede
867 the patch. This lets you ``roll back'' to that version of the patch 870 trabajar en un parche por un rato, hacerle \hgxcmd{mq}{qrefresh} y
868 later on. 871 después hacer \hgcmd{commit} al estado actual del parche. Esto le
869 872 permite ``devolverse'' a esa versión del parche posteriormente.
870 You can then share different versions of the same patch stack among 873
871 multiple underlying repositories. I use this when I am developing a 874 Puede también compartir diferentes versiones de la misma pila de
872 Linux kernel feature. I have a pristine copy of my kernel sources for 875 parches entre varios repositorios subyacentes. Uso esto cuando estoy
873 each of several CPU architectures, and a cloned repository under each 876 desarrollando una característica del núcleo Linux. Tengo una copia
874 that contains the patches I am working on. When I want to test a 877 original de las fuentes del núcleo para varias arquitecturas, y cloné
875 change on a different architecture, I push my current patches to the 878 un rpositorio en cada una que contiene los parches en los cuales
876 patch repository associated with that kernel tree, pop and push all of 879 estoy trabajando. Cuando quiero probar un cambio en una arquitectura
877 my patches, and build and test that kernel. 880 diferente, introduzco mis parches actuales al repositorio de parches
878 881 asociado con el árbol del kernel, sustraigo e introduzco todos mis
879 Managing patches in a repository makes it possible for multiple 882 parches, armo y pruebo el núcleo.
880 developers to work on the same patch series without colliding with 883
881 each other, all on top of an underlying source base that they may or 884 Llevar los parches en un repositorio permite que varios
882 may not control. 885 desarrolladores puedan trabajar en la misma serie de parches sin
883 886 sobrelaparse, todo sobre la fuente base subyacente que pueden o no
884 \subsection{MQ support for patch repositories} 887 controlar.
885 888
886 MQ helps you to work with the \sdirname{.hg/patches} directory as a 889 \subsection{Soporte de MQ para repositorios de parches}
887 repository; when you prepare a repository for working with patches 890
888 using \hgxcmd{mq}{qinit}, you can pass the \hgxopt{mq}{qinit}{-c} option to 891 MQ le ayuda a trabajar con el directorio \sdirname{.hg/patches} como
889 create the \sdirname{.hg/patches} directory as a Mercurial repository. 892 un repositorio; cuando usted prepara un repositorio para trabajar con
893 parches usando \hgxcmd{mq}{qinit}, puede pasarle la opción
894 \hgxopt{mq}{qinit}{-c} para que se cree el directorio
895 \sdirname{.hg/patches} como un repositorio de Mercurial.
890 896
891 \begin{note} 897 \begin{note}
892 If you forget to use the \hgxopt{mq}{qinit}{-c} option, you can simply go 898 Si olvida usar la opción \hgxopt{mq}{qinit}{-c} option, puede ir al
893 into the \sdirname{.hg/patches} directory at any time and run 899 directorio \sdirname{.hg/patches} en cualquier momento y ejecutar
894 \hgcmd{init}. Don't forget to add an entry for the 900 \hgcmd{init}. No olvide añadir una entrada en el fichero
895 \sfilename{status} file to the \sfilename{.hgignore} file, though 901 \sfilename{status} del fichero \sfilename{.hgignore}, a pesar de que
896 902 (\hgcmdargs{qinit}{\hgxopt{mq}{qinit}{-c}} hace estodo de forma
897 (\hgcmdargs{qinit}{\hgxopt{mq}{qinit}{-c}} does this for you 903 automática para usted); usted \emph{seguro} no quiere administrar el
898 automatically); you \emph{really} don't want to manage the 904 fichero \sfilename{status} .
899 \sfilename{status} file.
900 \end{note} 905 \end{note}
901 906
902 As a convenience, if MQ notices that the \dirname{.hg/patches} 907 MQ nota convenientemente que el directorio \dirname{.hg/patches}
903 directory is a repository, it will automatically \hgcmd{add} every 908 es un repositorio, hará \hgcmd{add} automáticamente a cada parche que
904 patch that you create and import. 909 usted cree e importe.
905 910
906 MQ provides a shortcut command, \hgxcmd{mq}{qcommit}, that runs 911 MQ provee una orden corta, \hgxcmd{mq}{qcommit}, que ejecuta
907 \hgcmd{commit} in the \sdirname{.hg/patches} directory. This saves 912 \hgcmd{commit} en el directorio \sdirname{.hg/patches}. Lo que ahorra
908 some bothersome typing. 913 tecleo recurrente.
909 914
910 Finally, as a convenience to manage the patch directory, you can 915 Finalmente, para administrar convenientemente el directorio de
911 define the alias \command{mq} on Unix systems. For example, on Linux 916 parches, puede definir el alias \command{mq} en sistemas Unix. Por
912 systems using the \command{bash} shell, you can include the following 917 ejemplo, en sistemas Linux con el intérprete \command{bash}, puede
913 snippet in your \tildefile{.bashrc}. 918 incluir el siguiente recorte de código\ndt{snippet} en su fichero
919 \tildefile{.bashrc}.
914 920
915 \begin{codesample2} 921 \begin{codesample2}
916 alias mq=`hg -R \$(hg root)/.hg/patches' 922 alias mq=`hg -R \$(hg root)/.hg/patches'
917 \end{codesample2} 923 \end{codesample2}
918 924
919 You can then issue commands of the form \cmdargs{mq}{pull} from 925 Puede aplicar las órdenes de la forma \cmdargs{mq}{pull} al
920 the main repository. 926 repositorio principal.
921 927
922 \subsection{A few things to watch out for} 928 \subsection{Detalles a tener en cuenta}
923 929
924 MQ's support for working with a repository full of patches is limited 930 El soporte de MQ para trabajar con un repositorio de parches es
925 in a few small respects. 931 limitado en ciertos aspectos:
926 932
927 MQ cannot automatically detect changes that you make to the patch 933 MQ no puede detectar automáticamente los cambios que haga al
928 directory. If you \hgcmd{pull}, manually edit, or \hgcmd{update} 934 directorio de parches. Si aplica \hgcmd{pull}, edita manualmente, o
929 changes to patches or the \sfilename{series} file, you will have to 935 hace \hgcmd{update} a los parches o el fichero \sfilename{series},
930 \hgcmdargs{qpop}{\hgxopt{mq}{qpop}{-a}} and then 936 tendrá que aplicar \hgcmdargs{qpop}{\hgxopt{mq}{qpop}{-a}} y después
931 \hgcmdargs{qpush}{\hgxopt{mq}{qpush}{-a}} in the underlying repository to 937 \hgcmdargs{qpush}{\hgxopt{mq}{qpush}{-a}} en el repositorio subyacente
932 see those changes show up there. If you forget to do this, you can 938 para que los cambios se reflejen allí. Si olvida hacerlo, puede
933 confuse MQ's idea of which patches are applied. 939 confundir a MQ en cuanto a qué parches se han aplicado.
934 940
935 \section{Third party tools for working with patches} 941 \section{Otras herramientas para trabajar con parches}
936 \label{sec:mq:tools} 942 \label{sec:mq:tools}
937 943
938 Once you've been working with patches for a while, you'll find 944 Cuando haya trabajado por cierto tiempo con parches, deseará
939 yourself hungry for tools that will help you to understand and 945 herramientas que le ayuden a entender y manipular los parches con los
940 manipulate the patches you're dealing with. 946 que esté tratando.
941 947
942 The \command{diffstat} command~\cite{web:diffstat} generates a 948 La orden \command{diffstat}~\cite{web:diffstat} genera un histograma
943 histogram of the modifications made to each file in a patch. It 949 de modificaciones hechas a cada fichero en un parche. Provee una
944 provides a good way to ``get a sense of'' a patch---which files it 950 interesante forma de ``dar un vistazo'' al parche---qué ficheros
945 affects, and how much change it introduces to each file and as a 951 afecta, y cuántos cambios introduce a cada fichero y en total. (Me ha
946 whole. (I find that it's a good idea to use \command{diffstat}'s 952 parecido interesante usar la opción \cmdopt{diffstat}{-p} de
947 \cmdopt{diffstat}{-p} option as a matter of course, as otherwise it 953 \command{diffstat}, puesto que de otra forma intentará hacer cosas
948 will try to do clever things with prefixes of file names that 954 inteligentes con prefijos de ficheros que terminan confundiéndome.)
949 inevitably confuse at least me.)
950 955
951 \begin{figure}[ht] 956 \begin{figure}[ht]
952 \interaction{mq.tools.tools} 957 \interaction{mq.tools.tools}
953 \caption{The \command{diffstat}, \command{filterdiff}, and \command{lsdiff} commands} 958 \caption{Las órdenes \command{diffstat}, \command{filterdiff}, y \command{lsdiff}}
954 \label{ex:mq:tools} 959 \label{ex:mq:tools}
955 \end{figure} 960 \end{figure}
956 961
957 The \package{patchutils} package~\cite{web:patchutils} is invaluable. 962 El paquete \package{patchutils}~\cite{web:patchutils} es
958 It provides a set of small utilities that follow the ``Unix 963 invaluable. Provee un conjunto de pequeñas utilidades que siguen la
959 philosophy;'' each does one useful thing with a patch. The 964 ``filosofía Unix''; cada una hace una cosa muy bien hecha a un
960 \package{patchutils} command I use most is \command{filterdiff}, which 965 parche. La orden \package{patchutils} que más uso es
961 extracts subsets from a patch file. For example, given a patch that 966 \command{filterdiff}, que extrae subconjuntos de un fichero de
962 modifies hundreds of files across dozens of directories, a single 967 parche. Por ejemplo, dado un parche que modifica centenas de ficheros
963 invocation of \command{filterdiff} can generate a smaller patch that 968 en docenas de directorios, una única invocación de
964 only touches files whose names match a particular glob pattern. See 969 \command{filterdiff} puede generear un parche más pequeño que
965 section~\ref{mq-collab:tips:interdiff} for another example. 970 solamente toca aquellos ficheros con un patrón. Puede ver otro
966 971 ejemplo en la sección~\ref{mq-collab:tips:interdiff}.
967 \section{Good ways to work with patches} 972
968 973 \section{Buenas prácticas de trabajo con parches}
969 Whether you are working on a patch series to submit to a free software 974
970 or open source project, or a series that you intend to treat as a 975 En caso de que esté trabajando en una serie de parches para enviar a
971 sequence of regular changesets when you're done, you can use some 976 un proyecto de software libre o de fuentes abiertas, o en una serie
972 simple techniques to keep your work well organised. 977 que desea tratar como un conjunto de cambios regular, cuando haya
973 978 terminado, puede usar técnicas sencillas para mantener su trabajo bien
974 Give your patches descriptive names. A good name for a patch might be 979 organizado.
975 \filename{rework-device-alloc.patch}, because it will immediately give 980
976 you a hint what the purpose of the patch is. Long names shouldn't be 981 De nombres descriptivos a sus parches. Un buen nombre para un parche
977 a problem; you won't be typing the names often, but you \emph{will} be 982 podría ser \filename{rework-device-alloc.patch}, porque da de forma
978 running commands like \hgxcmd{mq}{qapplied} and \hgxcmd{mq}{qtop} over and over. 983 inmediata una pista del propósito del parche. Los nombres largos no
979 Good naming becomes especially important when you have a number of 984 deben ser un problema; no los estará tecleando repetidamente, pero
980 patches to work with, or if you are juggling a number of different 985 \emph{estará} ejecutando regularmente órdenes como
981 tasks and your patches only get a fraction of your attention. 986 \hgxcmd{mq}{qapplied} y \hgxcmd{mq}{qtop}. Los nombres adecuados son
982 987 especialmente importantes cuando tiene bastantes parches con los
983 Be aware of what patch you're working on. Use the \hgxcmd{mq}{qtop} 988 cuales trabajar, o si está trabajando en diferentes tareas y sus
984 command and skim over the text of your patches frequently---for 989 parches toman solamente una porción de su atención.
985 example, using \hgcmdargs{tip}{\hgopt{tip}{-p}})---to be sure of where 990
986 you stand. I have several times worked on and \hgxcmd{mq}{qrefresh}ed a 991 Tenga en cuenta en qué parche está trabajando. Use la orden \hgxcmd{mq}{qtop}
987 patch other than the one I intended, and it's often tricky to migrate 992 para dar un vistazo al texto de sus parches frecuentemente---por
988 changes into the right patch after making them in the wrong one. 993 ejemplo, use \hgcmdargs{tip}{\hgopt{tip}{-p}})---para asegurarse en
989 994 dónde está ubicado. En distintas oportunidades me sucedió que apliqué
990 For this reason, it is very much worth investing a little time to 995 \hgxcmd{mq}{qrefresh} a un parche distinto al que deseaba hacerlo, y
991 learn how to use some of the third-party tools I described in 996 usualmente es complejo migrar los cambios al parche correcto después
992 section~\ref{sec:mq:tools}, particularly \command{diffstat} and 997 de haberlo hecho mal.
993 \command{filterdiff}. The former will give you a quick idea of what 998
994 changes your patch is making, while the latter makes it easy to splice 999 Por este motivo, vale la pena invertir ese poco tiempo para aprender
995 hunks selectively out of one patch and into another. 1000 cómo usar otras herramientas que describí en la
996 1001 sección~\ref{sec:mq:tools}, particularmente \command{diffstat} y
997 \section{MQ cookbook} 1002 \command{filterdiff}. La primera le dará una idea de qué cambios está
998 1003 haciendo su parche, mientras que la segunda permite seleccionar trozos
999 \subsection{Manage ``trivial'' patches} 1004 de un parche para colocarlos en otro.
1000 1005
1001 Because the overhead of dropping files into a new Mercurial repository 1006 \section{Recetas de MQ}
1002 is so low, it makes a lot of sense to manage patches this way even if 1007
1003 you simply want to make a few changes to a source tarball that you 1008 \subsection{Administrar parches ``triviales''}
1004 downloaded. 1009
1005 1010 Puesto que colocar ficheros en un repositorio de Mercurial es tan
1006 Begin by downloading and unpacking the source tarball, 1011 sencillo, tiene bastante sentido administrar parches de esta forma
1007 and turning it into a Mercurial repository. 1012 incluso si desea hacer algunos cambios al paquete de ficheros que
1013 descargó.
1014
1015 Para comenzar a descargar y desempaqueter un paquete de ficheros, y
1016 volverlo en un repositorio de Mercurial:
1008 \interaction{mq.tarball.download} 1017 \interaction{mq.tarball.download}
1009 1018
1010 Continue by creating a patch stack and making your changes. 1019 Continue creando una pila de parches y haga sus cambios.
1011 \interaction{mq.tarball.qinit} 1020 \interaction{mq.tarball.qinit}
1012 1021
1013 Let's say a few weeks or months pass, and your package author releases 1022 Digamos que pasan unas semanas o meses, y el autor del paquete libera
1014 a new version. First, bring their changes into the repository. 1023 una nueva versión. Primero se traen sus cambios al repositorio.
1015 \interaction{mq.tarball.newsource} 1024 \interaction{mq.tarball.newsource}
1016 The pipeline starting with \hgcmd{locate} above deletes all files in 1025 La porción que comienza con \hgcmd{locate} mostrada más arriba, borra
1017 the working directory, so that \hgcmd{commit}'s 1026 todos los ficheros en el directorio de trabajo, así que la opción
1018 \hgopt{commit}{--addremove} option can actually tell which files have 1027 \hgopt{commit}{--addremove} de \hgcmd{commit} puede indicar qué
1019 really been removed in the newer version of the source. 1028 ficheros se han eliminado en la nueva versión del árbol de fuentes.
1020 1029
1021 Finally, you can apply your patches on top of the new tree. 1030 Finalmente, puede aplicar sus parches encima del nuevo árbol de fuentes
1022 \interaction{mq.tarball.repush} 1031 \interaction{mq.tarball.repush}
1023 1032
1024 \subsection{Combining entire patches} 1033 \subsection{Combinar parches completos}
1025 \label{sec:mq:combine} 1034 \label{sec:mq:combine}
1026 1035
1027 MQ provides a command, \hgxcmd{mq}{qfold} that lets you combine entire 1036 MQ provee la orden \hgxcmd{mq}{qfold} que le permite combinar parches
1028 patches. This ``folds'' the patches you name, in the order you name 1037 enteros. Se ``integran''\ndt{fold} los parches que usted nombre, en
1029 them, into the topmost applied patch, and concatenates their 1038 el orden que especifique, en el último parche aplicado, y concatena
1030 descriptions onto the end of its description. The patches that you 1039 sus descripciones al final de su descripción. Deberá sustraer los
1031 fold must be unapplied before you fold them. 1040 cambios para poder integrarlos.
1032 1041
1033 The order in which you fold patches matters. If your topmost applied 1042 El orden en el que integre los parches importa. Si el parche
1034 patch is \texttt{foo}, and you \hgxcmd{mq}{qfold} \texttt{bar} and 1043 últimamente aplicado es \texttt{foo}, e integra \hgxcmd{mq}{qfold} \texttt{bar} y
1035 \texttt{quux} into it, you will end up with a patch that has the same 1044 \texttt{quux} en él, terminará con un parche que tiene el mismo efecto
1036 effect as if you applied first \texttt{foo}, then \texttt{bar}, 1045 que si hubiera aplicado primero \texttt{foo}, y después \texttt{bar},
1037 followed by \texttt{quux}. 1046 seguido de \texttt{quux}.
1038 1047
1039 \subsection{Merging part of one patch into another} 1048 \subsection{Fusionar una porción de un parche dentro de otro}
1040 1049
1041 Merging \emph{part} of one patch into another is more difficult than 1050 Fusionar \emph{partes} de un parche dentro de otro es más complejo que
1042 combining entire patches. 1051 combinar completamente dos parches.
1043 1052
1044 If you want to move changes to entire files, you can use 1053 Si desea mover cambios de ficheros completos, puede usar las opciones
1045 \command{filterdiff}'s \cmdopt{filterdiff}{-i} and 1054 \command{filterdiff}'s \cmdopt{filterdiff}{-i} y
1046 \cmdopt{filterdiff}{-x} options to choose the modifications to snip 1055 \cmdopt{filterdiff}{-x} para elegir las modificaciones remover de un
1047 out of one patch, concatenating its output onto the end of the patch 1056 parche, concatenar su salida al final del parche donde desea
1048 you want to merge into. You usually won't need to modify the patch 1057 fusionarlo. Usualmente no necesitará modificar el parche del cuál ha
1049 you've merged the changes from. Instead, MQ will report some rejected 1058 fusionado los cambios. En cambio, MQ reportará que hay unos trozos
1050 hunks when you \hgxcmd{mq}{qpush} it (from the hunks you moved into the 1059 que se han desechado cuando usted aplique \hgxcmd{mq}{qpush}(de los
1051 other patch), and you can simply \hgxcmd{mq}{qrefresh} the patch to drop 1060 trozos que haya movido al otro parche), y puede sencillamente aplicar
1052 the duplicate hunks. 1061 \hgxcmd{mq}{qrefresh} para eliminar los trozos replicados.
1053 1062
1054 If you have a patch that has multiple hunks modifying a file, and you 1063 Si tiene un parche que tiene varios trozos que modifican un fichero, y
1055 only want to move a few of those hunks, the job becomes more messy, 1064 desea mover solamente unos de ellos, el trabajo es un poco más
1056 but you can still partly automate it. Use \cmdargs{lsdiff}{-nvv} to 1065 enredado, pero puede automatizarlo parcialmente. Use
1057 print some metadata about the patch. 1066 \cmdargs{lsdiff}{-nvv} para imprimir algunos metadatos del parche.
1058 \interaction{mq.tools.lsdiff} 1067 \interaction{mq.tools.lsdiff}
1059 1068
1060 This command prints three different kinds of number: 1069 Esta orden imprime tres clases diferentes de números:
1061 \begin{itemize} 1070 \begin{itemize}
1062 \item (in the first column) a \emph{file number} to identify each file 1071 \item (en la primera columna) un \emph{número de fichero} para
1063 modified in the patch; 1072 identificar cada fichero modificado en el parche;
1064 \item (on the next line, indented) the line number within a modified 1073 \item (En la siguiente línea, indentado) el número de línea dentro de
1065 file where a hunk starts; and 1074 un fichero modificado donde comienza el trozo; y
1066 \item (on the same line) a \emph{hunk number} to identify that hunk. 1075 \item (en la misma línea) un \emph{número de trozo} que identifica el
1076 trozo.
1067 \end{itemize} 1077 \end{itemize}
1068 1078
1069 You'll have to use some visual inspection, and reading of the patch, 1079 Tendrá que hacer una inspección visual, y leer el parche para
1070 to identify the file and hunk numbers you'll want, but you can then 1080 identificar los números de fichero y trozo que desea, pero puede pasar
1071 pass them to to \command{filterdiff}'s \cmdopt{filterdiff}{--files} 1081 posteriormente a las opciones \cmdopt{filterdiff}{--files} y
1072 and \cmdopt{filterdiff}{--hunks} options, to select exactly the file 1082 \cmdopt{filterdiff}{--hunks} de \command{filterdiff}, para seleccionar
1073 and hunk you want to extract. 1083 exactamente el fichero y el trozo que desea extraer.
1074 1084
1075 Once you have this hunk, you can concatenate it onto the end of your 1085 Cuando tenga el trozo, puede concatenarlo al final de su parche
1076 destination patch and continue with the remainder of 1086 objetivo y continuar como en la sección~\ref{sec:mq:combine}.
1077 section~\ref{sec:mq:combine}. 1087
1078 1088 \section{Diferencias entre quilt y MQ}
1079 \section{Differences between quilt and MQ} 1089
1080 1090 Si le es familiar quilt, MQ provee un conjunto similar de órdenes. Hay
1081 If you are already familiar with quilt, MQ provides a similar command 1091 algunas diferencias en cómo funcionan.
1082 set. There are a few differences in the way that it works. 1092
1083 1093 Debe haber notado que la mayoría de comandos de quilt tienen su
1084 You will already have noticed that most quilt commands have MQ 1094 contraparte en MQ, que simplemente comienzan con ``\texttt{q}''. Las
1085 counterparts that simply begin with a ``\texttt{q}''. The exceptions 1095 excepciones son las órdenes \texttt{add} y \texttt{remove} de quilt,
1086 are quilt's \texttt{add} and \texttt{remove} commands, the 1096 que realmente son las órdenes \hgcmd{add} y \hgcmd{remove} de
1087 counterparts for which are the normal Mercurial \hgcmd{add} and 1097 Mercurial. No hay un equivalente en MQ para la orden
1088 \hgcmd{remove} commands. There is no MQ equivalent of the quilt 1098 \texttt{edit} de quilt.
1089 \texttt{edit} command.
1090 1099
1091 %%% Local Variables: 1100 %%% Local Variables:
1092 %%% mode: latex 1101 %%% mode: latex
1093 %%% TeX-master: "00book" 1102 %%% TeX-master: "00book"
1094 %%% End: 1103 %%% End: