igor@487: \chapter{Referencia de las Colas de Mercurial} jerojasro@336: \label{chap:mqref} jerojasro@336: igor@500: \section{Referencia de órdenes MQ} jerojasro@336: \label{sec:mqref:cmdref} jerojasro@336: igor@500: Si desea dar un vistazo a las órdenes que ofrece MQ, use la orden jerojasro@336: \hgcmdargs{help}{mq}. jerojasro@336: igor@487: \subsection{\hgxcmd{mq}{qapplied}---imprimir los parches aplicados} igor@487: igor@487: La orden \hgxcmd{mq}{qapplied} imprime la pila actual de parches igor@500: aplicados. Los parches se imprimen en orden de antigüedad, primero igor@500: los más antiguos y después los más recientes, por lo tanto el último igor@500: parche de la lista es el que está en el ``tope''. igor@487: igor@487: \subsection{\hgxcmd{mq}{qcommit}---consignar cambios en la cola del repositorio} igor@487: igor@487: La orden \hgxcmd{mq}{qcommit} consigna cualquier cambio sobresaliente igor@487: en el repositorio \sdirname{.hg/patches}. Esta orden solamente igor@487: funciona si el directorio \sdirname{.hg/patches} es un repositorio, igor@500: p.e.~usted creó el directorio con igor@500: \hgcmdargs{qinit}{\hgxopt{mq}{qinit}{-c}} o ejecutó igor@500: \hgcmd{init} en el directorio después de correr \hgxcmd{mq}{qinit}. igor@487: igor@487: Esta orden es un atajo para \hgcmdargs{commit}{--cwd .hg/patches}. igor@487: igor@488: \subsection{\hgxcmd{mq}{qdelete}---eliminar un parche del fichero igor@487: \sfilename{series}} igor@487: igor@487: La orden \hgxcmd{mq}{qdelete} elimina la entrada del fichero igor@487: \sfilename{series} para el parche en el directorio igor@487: \sdirname{.hg/patches}. No sca el parche si ha sido aplicado. De igor@500: forma predeterminada no borra el fichero del parche; use la opción igor@487: \hgxopt{mq}{qdel}{-f} para hacerlo. igor@487: igor@487: Opciones: igor@487: \begin{itemize} igor@487: \item[\hgxopt{mq}{qdel}{-f}] Elimina el fichero del parche. igor@487: \end{itemize} igor@487: igor@500: \subsection{\hgxcmd{mq}{qdiff}---imprimir la diferencia del último igor@487: parche aplicado} igor@487: igor@500: La orden \hgxcmd{mq}{qdiff} imprime un diff del parche más igor@487: recientemente aplicado. Es equivalente a \hgcmdargs{diff}{-r-2:-1}. igor@487: igor@488: \subsection{\hgxcmd{mq}{qfold}---fusionar (``integrar'') varios parches en igor@487: uno solo} igor@487: igor@500: La orden \hgxcmd{mq}{qfold} fusiona muchos parches en el último parche igor@500: aplicado, de tal forma que el último parche aplicado es la unión de igor@500: todos los cambios de los parches en cuestión. igor@487: igor@487: Los parches a fusionar no deben haber sido aplicados; igor@500: \hgxcmd{mq}{qfold} saldrá indicando un error si alguno ha sido igor@487: aplicado. El orden en el cual los parches se pliegan es igor@487: significativo; \hgcmdargs{qfold}{a b} significa ``aplique el parche igor@500: más reciente, seguido de \texttt{a}, y seguido de \texttt{b}''. igor@487: igor@488: Los comentarios de los parches integrados se colocan al final de los igor@487: comentarios del parche destino, con cada bloque de comentarios jerojasro@520: separado con tres asteriscos (``\texttt{*}''). Se usa la opción igor@500: \hgxopt{mq}{qfold}{-e} para editar el mensaje de consignación para el igor@500: conjunto de cambios/parches después de completarse el pliegue. igor@500: igor@500: Opciones: igor@500: \begin{itemize} igor@500: \item[\hgxopt{mq}{qfold}{-e}] Edita el mensaje de consignación y la igor@500: descripción del parche del parche que se ha integrado. igor@487: \item[\hgxopt{mq}{qfold}{-l}] Usa los contenidos del fichero dado como igor@500: el nuevo mensaje de consignación y descripción del parche para el igor@488: parche a integrar. igor@487: \item[\hgxopt{mq}{qfold}{-m}] Usa el texto dado como el mensaje de igor@500: consignación y descripción del parche para el parche integrado. igor@500: \end{itemize} igor@500: igor@500: \subsection{\hgxcmd{mq}{qheader}---desplegar el encabezado/descripción igor@488: de un parche} igor@488: igor@500: La orden \hgxcmd{mq}{qheader} imprime el encabezado o descripción de igor@500: un parche. De forma predeterminada, imprime el encabezado del último igor@488: parche aplicado. Si se da un argumento, imprime el encabezado del igor@488: parche referenciado. igor@488: igor@488: \subsection{\hgxcmd{mq}{qimport}---importar el parche de un tercero en igor@488: la cola} igor@488: igor@500: La orden \hgxcmd{mq}{qimport} añade una entrada de un parche externo igor@488: al fichero \sfilename{series} y copia el parche en el directorio igor@500: \sdirname{.hg/patches}. Añade la entrada inmediatamente después del igor@500: último parche aplicado, pero no introduce el parche. igor@488: igor@488: Si el directorio \sdirname{.hg/patches} es un repositorio, igor@500: \hgxcmd{mq}{qimport} automáticamente hace un \hgcmd{add} del parche igor@488: importado. igor@488: igor@488: \subsection{\hgxcmd{mq}{qinit}---preparar un repositorio para trabajar igor@488: con MQ} igor@488: igor@488: La orden \hgxcmd{mq}{qinit} prepara un repositorio para trabajar con igor@488: MQ. Crea un directorio llamado \sdirname{.hg/patches}. igor@488: igor@488: Opciones: igor@488: \begin{itemize} igor@488: \item[\hgxopt{mq}{qinit}{-c}] Crea \sdirname{.hg/patches} como un igor@500: repositorio por sí mismo. También crea un fichero igor@500: \sfilename{.hgignore} que ignorará el fichero \sfilename{status}. igor@500: \end{itemize} igor@500: igor@500: Cuando el directorio \sdirname{.hg/patches} es un repositorio, las órdenes igor@488: \hgxcmd{mq}{qimport} y \hgxcmd{mq}{qnew} hacen \hgcmd{add} igor@500: automáticamente a los parches nuevos. igor@488: igor@488: \subsection{\hgxcmd{mq}{qnew}---crear un parche nuevo} igor@488: igor@488: La orden \hgxcmd{mq}{qnew} crea un parche nuevo. Exige un argumento, igor@500: el nombre que se usará para tal parche. El parche recién creado está igor@500: vacío inicialmente. Se añade al fichero \sfilename{series} después igor@500: del último parche aplicado, y se introduce en el tope de ese parche. igor@488: igor@488: Si \hgxcmd{mq}{qnew} encuentra ficheros modificados en el directorio igor@500: de trabajo, rehusará crear un parche nuevo a meos que se emplee jerojasro@520: \hgxopt{mq}{qnew}{-f} la opción (ver más adelante). Este igor@500: comportamiento le permite hacer \hgxcmd{mq}{qrefresh} al último parche igor@488: aplicado antes de aplicar un parche nuevo encima de este. igor@488: igor@488: Opciones: igor@488: \begin{itemize} igor@488: \item[\hgxopt{mq}{qnew}{-f}] Crea un parche nuevo si los contenidos igor@500: del directorio actual han sido modificados. Cualquier modificación igor@500: significativa se añade al parche recientemente creado, de tal forma igor@500: que al finalizar la orden, el directorio de trabajo no lucirá igor@488: modificado. igor@488: \item[\hgxopt{mq}{qnew}{-m}] Usa el texto dado como el mensaje de igor@500: consignación. Este texto se almacenará al principio del fichero del igor@488: parche, antes de los datos del parche. jerojasro@336: \end{itemize} jerojasro@336: igor@500: \subsection{\hgxcmd{mq}{qnext}---imprimir el nombre del próximo parche} igor@493: igor@493: La orden \hgxcmd{mq}{qnext} imprime el nombre del siguiente parche en igor@500: el fichero \sfilename{series} a continuación del último parche igor@500: aplicado. Este parche sería el próximo parche a aplicar si se igor@493: ejecutara la orden \hgxcmd{mq}{qpush}. igor@493: igor@493: \subsection{\hgxcmd{mq}{qpop}---sustraer parches de la pila} igor@493: igor@493: La orden \hgxcmd{mq}{qpop} elimina los parches aplicados del tope de igor@493: la pila de parches aplicados. De forma predeterminada solamente igor@493: remueve un parche. igor@493: igor@493: Esta orden elimina los conjuntos de cambios que representan los igor@500: parches sustraídos del repositorio, y actualiza el directorio de igor@493: trabajo para deshacer los efectos de los parches. igor@493: igor@493: Esta orden toma un argumento opcional, que usa como el nombre o el igor@500: índice del parche que desea sustraer. Si se da el nombre, sustraerá igor@500: los parches hasta que el parche nombrado sea el último parche igor@500: aplicado. Si se da un número, \hgxcmd{mq}{qpop} lo trata como un igor@500: índice dentro del fichero \sfilename{series}, contando desde jerojasro@520: cero (no cuenta las líneas vacías o aquellas que sean únicamente igor@493: comentarios). Sustrae los parches hasta que el parche identificado igor@500: por el índice sea el último parche aplicado. igor@493: igor@493: La orden \hgxcmd{mq}{qpop} no lee o escribe parches en el fichero igor@493: \sfilename{series}. \hgxcmd{mq}{qpop} se constituye por tanto en una igor@493: forma segura de sustraer un parche del fichero \sfilename{series} o un igor@493: parche que ha eliminado o renombrado completamente. En los dos igor@500: últimos casos, use el nombre del parche tal como lo hizo cuando lo igor@500: aplicó. igor@500: igor@500: De forma predeterminada, la orden \hgxcmd{mq}{qpop} no sustraerá igor@493: parche alguno si el directorio de trabajo ha sido modificado. Puede igor@500: modificar este comportamiento con la opción \hgxopt{mq}{qpop}{-f}, que igor@493: revierte todas las modificaciones del directorio de trabajo. igor@493: igor@493: Opciones: igor@493: \begin{itemize} igor@493: \item[\hgxopt{mq}{qpop}{-a}] Sustrae todos los parches aplicados. igor@493: Restaura el repositorio al estado antes de haber aplicado parche alguno. igor@493: \item[\hgxopt{mq}{qpop}{-f}] Revertir forzadamente cualquier igor@500: modificación del directorio de trabajo cuando se hace sustracciones. igor@493: \item[\hgxopt{mq}{qpop}{-n}] Sustraer un parche de la cola dado un nombre. igor@493: \end{itemize} igor@493: igor@500: La orden \hgxcmd{mq}{qpop} elimina una línea del final del fichero igor@493: \sfilename{status} por cada parche que se sustrae. igor@493: igor@493: \subsection{\hgxcmd{mq}{qprev}---imprimir el nombre del parche anterior} igor@493: igor@493: La orden \hgxcmd{mq}{qprev} imprime el nombre del parche en el fichero igor@500: \sfilename{series} que está antes del último parche aplicado. Este igor@500: se volverá el último parche aplicado si ejecuta \hgxcmd{mq}{qpop}. igor@499: igor@499: \subsection{\hgxcmd{mq}{qpush}---introducir parches a la pila} jerojasro@336: \label{sec:mqref:cmd:qpush} jerojasro@336: igor@500: La orden \hgxcmd{mq}{qpush} añade parches a la pila. De forma igor@500: predeterminada añade solamente un parche. igor@499: igor@499: Esta orden crea un conjunto de cambios que representa cada parche igor@499: aplicado y actualiza el directorio de trabajo aplicando los efectos de igor@499: los parches. igor@499: igor@499: Los datos predeterminados cuando se crea un conjunto de cambios igor@499: corresponde a: igor@499: \begin{itemize} igor@500: \item La fecha de consignación y zona horaria corresponden a la hora igor@499: actual de la zona. Dado que tales datos se usan para computar la igor@499: identidad de un conjunto de cambios, significa que si hace igor@499: \hgxcmd{mq}{qpop} a un parche y \hgxcmd{mq}{qpush} de nuevo, el igor@500: conjunto de cambios que introduzca tendrá una identidad distinta a igor@499: la del conjunto de cambios que sustrajo. igor@499: \item El autor es el mismo que el predeterminado usado por la orden igor@499: \hgcmd{commit}. igor@500: \item El mensaje de consignación es cualquier texto del fichero del igor@499: parche que viene antes del primer encabezado del diff. Si no hay igor@499: tal texto, un mensaje predeterminado se sua para identificar el igor@499: nombre del parche. igor@499: \end{itemize} igor@499: Su un parche contiene un encabezado de parche de Mercurial (XXX add igor@500: link), la información en el encabezado del parche tiene precedencia igor@499: sobre el predeterminado. igor@499: igor@499: Opciones: igor@499: \begin{itemize} igor@499: \item[\hgxopt{mq}{qpush}{-a}] Introduce todos los parches que no han igor@499: sido aplicados del fichero \sfilename{series} hasta que no haya nada igor@500: más para introducir. igor@500: \item[\hgxopt{mq}{qpush}{-l}] Añade el nombre del parche al final del igor@500: mensaje de consignación igor@499: \item[\hgxopt{mq}{qpush}{-m}] Si un parche no se aplica limpiamente, igor@499: usa la entrada para un parche en otra cola almacenada para computar igor@500: los parámetros en una fusión de tres, y aplica una fusión de tres igor@500: fuentes usando la maquinaria usual de Mercurial. Usa la resolución igor@500: de la fusión como el contenido del parche nuevo. igor@500: \item[\hgxopt{mq}{qpush}{-n}] Usa la cola mencionada si se está igor@500: fusionando en la introducción. igor@499: \end{itemize} igor@499: igor@499: La orden \hgxcmd{mq}{qpush} lee, pero no modifica el fichero igor@500: \sfilename{series}. Añade al final del fichero \hgcmd{status} una igor@500: línea por cada parche que se introduce. igor@500: igor@500: \subsection{\hgxcmd{mq}{qrefresh}---actualiza el último parche aplicado} igor@500: igor@500: La orden \hgxcmd{mq}{qrefresh} actualiza el último parche aplicado. igor@500: Modifica el parche, elimina el último conjunto de cambios que igor@500: representó el parche, y crea un nuevo conjunto de cambios para igor@499: representar el parche modificado. igor@499: igor@499: La orden \hgxcmd{mq}{qrefresh} busca las siguientes modificaciones: igor@499: \begin{itemize} igor@500: \item Los cambios al mensaje de consignación, p.e.~el texto antes del igor@499: primer encabezado de diff en el fichero del parche, se replejan en igor@499: el nuevo conjunto de cambios que representa el parche. igor@499: \item Las modificaciones a los ficheros a los que se les da igor@500: seguimiento en el directorio de trabajo se añade al parche. jerojasro@516: \item Los cambios a los ficheros a los que se les da seguimiento con igor@499: \hgcmd{add}, \hgcmd{copy}, \hgcmd{remove}, o \hgcmd{rename}. Se igor@500: añaden al parche los ficheros añadidos, copiados y renombrados, igor@499: mientras que los ficheros eliminados y las fuentes renombradas se igor@499: eliminan. igor@499: \end{itemize} igor@499: igor@499: Incluso si \hgxcmd{mq}{qrefresh} no detecta cambios, de todas maneras igor@499: recrea el conjunto de cambios que representa el cambio. Esto causa igor@499: que la identidad del conjunto de cambios difiera del conjunto de igor@500: cambios previo que identificó al parche. igor@500: igor@500: Opciones: igor@500: \begin{itemize} igor@500: \item[\hgxopt{mq}{qrefresh}{-e}] Modificar la descripción de la igor@500: consignación y el parche con el editor de texto preferido. igor@500: \item[\hgxopt{mq}{qrefresh}{-m}] Modificar el mensaje de consignación igor@500: y la descripción del parche con el texto dado. igor@500: \item[\hgxopt{mq}{qrefresh}{-l}] Modificar el mensaje de consignación igor@500: y la descripción del parche con el texto del fichero dado. igor@499: \end{itemize} igor@499: igor@499: \subsection{\hgxcmd{mq}{qrename}---renombrar un parche} igor@499: igor@499: La orden \hgxcmd{mq}{qrename} renombra un parche y cambia la entrada igor@499: del parche en el fichero \sfilename{series}. igor@499: igor@500: Con un argumento sencillo, \hgxcmd{mq}{qrename} renombra el último igor@499: parche aplicado. Con dos argumentos, renombra el primer argumento con igor@499: el segundo. igor@499: igor@499: \subsection{\hgxcmd{mq}{qrestore}---restaurar el estado almacenado de igor@499: la cola} jerojasro@336: jerojasro@336: XXX No idea what this does. jerojasro@336: igor@499: \subsection{\hgxcmd{mq}{qsave}---almacena el estado actual de la cola} jerojasro@336: jerojasro@336: XXX Likewise. jerojasro@336: igor@499: \subsection{\hgxcmd{mq}{qseries}---imprime la serie completa de parches} igor@499: igor@499: La orden \hgxcmd{mq}{qseries} imprime la serie completa de parches del igor@499: fichero \sfilename{series}. Imprime solamente los nombres de los igor@500: parches sin las líneas en blanco o comentarios. Imprime primero el igor@500: primero y de último, el último aplicado. igor@499: igor@499: \subsection{\hgxcmd{mq}{qtop}---imprime el nombre del parche actual} igor@499: igor@500: \hgxcmd{mq}{qtop} imprime el nombre del último parche aplicado. igor@500: igor@500: \subsection{\hgxcmd{mq}{qunapplied}---imprimir los parches que aún no igor@499: se han aplicado} igor@499: igor@499: La orden \hgxcmd{mq}{qunapplied} imprime los nombres de los parches igor@500: del fichero \sfilename{series} que todavía no han sido aplicados. Los igor@500: imprime de acuerdo al orden en el cual serían introducidos. igor@500: igor@500: \subsection{\hgcmd{strip}---remover una revisión y sus descendientes} igor@500: igor@500: La orden \hgcmd{strip} remueve una revisión, y todos sus descendientes igor@499: del repositorio. Deshace los efectos de las revisiones removidas del igor@499: repositorio, y actualiza el directorio de trabajo hasta el primer igor@500: padre de la revisión removida. igor@499: igor@499: La orden \hgcmd{strip} almacena una copia de segurida de los conjuntos igor@499: de cambios en un agrupamiento, de forma tal que puedan ser reaplicados igor@500: en caso de que se hayan removido por equivocación. igor@499: igor@499: Opciones: igor@499: \begin{itemize} igor@499: \item[\hgopt{strip}{-b}] Almacenar conjuntos de cambios no igor@499: relacionados que se han mezclado con los conjuntos de cambios que igor@500: están en franjas con el agrupamiento de copia de seguridad. igor@499: \item[\hgopt{strip}{-f}] Si una rama tiene varias ramas principales igor@499: remueve todos los frentes. XXX This should be renamed, y usa igor@499: \texttt{-f} para desagrupar revisiones cuando hay cambios pendientes. igor@499: \item[\hgopt{strip}{-n}] No almacene la copia de seguridad agrupada. igor@499: \end{itemize} igor@499: igor@499: \section{Referencia de ficheros de MQ} igor@499: igor@499: \subsection{El fichero \sfilename{series}} igor@499: igor@499: El fichero \sfilename{series} contiene una lista de los nombres de igor@499: todos los parches que MQ puede aplicar. Se representa como una lista igor@500: de nombres, uno por línea. Se ignora el espacio en blanco al igor@499: principio y al final. igor@499: igor@500: Las líneas pueden contener comentario. Un comentario comienza con el igor@500: caracter ``\texttt{\#}'', y va hasta el final de la línea. Se ignoran igor@500: las líneas vacías y las que solamente contengan comentarios. igor@500: igor@500: En algún momento podría editar el fichero \sfilename{series} a mano, igor@500: por tal motivo se admiten comentarios y líneas en blanco como se igor@499: menciono anteriormente. Por ejemplo, puede poner en comentario un igor@500: parche temporalmente y \hgxcmd{mq}{qpush} omitirá tal parche cuando igor@500: los aplique. También puede cambiar el orden en el cual se aplican los igor@499: parches, reordenando las entradas en el fichero \sfilename{series}. igor@499: igor@500: También es posible colocar el fichero \sfilename{series} bajo control igor@500: de revisiones; también es favorable colocar todos los parches que refiera igor@499: bajo control de revisiones. Si crea un directorio de parches con la igor@500: opción \hgxopt{mq}{qinit}{-c} de \hgxcmd{mq}{qinit}, esto se hará igor@500: automáticamente. igor@499: igor@499: \subsection{El fichero \sfilename{status}} igor@499: igor@499: El fichero \sfilename{status} contiene los nombres y los hashes de los igor@499: conjuntos de cambios de todos los parches que MQ ha aplicado. A igor@500: diferencia del fichero \sfilename{series}, este NO ha sido diseñado igor@500: para ser editado. No debería colocar este fichero bajo el control de igor@499: revisiones o modificarlo de forma alguna. MQ lo usa estrictamente igor@500: para administración interna. jerojasro@336: jerojasro@336: %%% Local Variables: jerojasro@336: %%% mode: latex jerojasro@336: %%% TeX-master: "00book" jerojasro@336: %%% End: