Mercurial > hgbook
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: |