hgbook

view es/filenames.tex @ 627:8271c8891b0e

Add Chinese translation
author Dongsheng Song <dongsheng.song@gmail.com>
date Thu Mar 12 15:53:01 2009 +0800 (2009-03-12)
parents 9da096de3c52
children
line source
1 \chapter{Nombres de ficheros y asociación de patrones}
2 \label{chap:names}
4 Mercurial provee mecanismos que le permiten trabajar con nombres de
5 ficheros en una manera consistente y expresiva.
7 \section{Nombrado de ficheros simple}
9 % TODO traducción literal de "under the hood". revisar
10 Mercurial usa un mecanismo unificado ``bajo el capó'' para manejar
11 nombres de ficheros. Cada comando se comporta de manera uniforme con
12 respecto a los nombres de fichero. La manera en que los comandos
13 operan con nombres de fichero es la siguiente.
15 Si usted especifica explícitamente nombres reales de ficheros en la
16 línea de comandos, Mercurial opera únicamente sobre dichos ficheros,
17 como usted esperaría.
18 \interaction{filenames.files}
20 Cuando usted provee el nombre de un directorio, Mercurial interpreta
21 eso como ``opere en cada fichero en este directorio y sus
22 subdirectorios''. Mercurial va por todos los ficheros y subdirectorios
23 de un directorio en orden alfabético. Cuando encuentra un
24 subdirectorio, lo recorrerá antes de continuar con el directorio
25 actual.
26 \interaction{filenames.dirs}
28 \section{Ejecución de comandos sin ningún nombre de fichero}
30 Los comandos de Mercurial que trabajan con nombres de fichero tienen
31 comportamientos por defecto adecuados cuando son utilizados sin pasar
32 ningún patrón o nombre de fichero. El tipo de comportamiento depende
33 de lo que haga el comando. Aquí presento unas cuantas reglas generales
34 que usted puede usar para que es lo que probablemente hará un comando
35 si usted no le pasa ningún nombre de fichero con el cual trabajar.
36 \begin{itemize}
37 \item Muchos comandos operarán sobre el directorio de trabajo
38 completo. Por ejemplo, esto es lo que hace el comando
39 \hgcmd{add},
40 \item Si el comando tiene efectos difíciles o incluso imposibles de
41 revertir, se le obligará a usted a proveer explícitamente al menos
42 % TODO revisar ese "lo proteje a usted"
43 un nombre o patrón (ver más abajo). Esto lo proteje a usted de,
44 por ejemplo, borrar ficheros accidentalmente al ejecutar
45 \hgcmd{remove} sin ningún argumento.
46 \end{itemize}
49 Es fácil evitar este comportamiento por defecto, si no es el adecuado
50 para usted. Si un comando opera normalmente en todo el directorio de
51 trabajo, usted puede llamarlo para que trabaje sólo en el directorio
52 actual y sus subdirectorio pasándole el nombre ``\dirname{.}''.
53 \interaction{filenames.wdir-subdir}
55 Siguiendo la misma línea, algunos comandos normalmente imprimen las
56 rutas de ficheros con respecto a la raíz del repositorio, aún si usted
57 los llama dentro de un subdirectorio. Dichos comandos imprimirán las
58 rutas de los ficheros respecto al directorio en que usted se encuentra
59 si se les pasan nombres explícitos. Vamos a ejecutar el comando
60 \hgcmd{status} desde un subdirectorio, y a hacer que opere en el
61 directorio de trabajo completo, a la vez que todas las rutas de
62 ficheros se imprimen respecto a nuestro subdirectorio, pasándole la
63 salida del comando \hgcmd{root}.
64 \interaction{filenames.wdir-relname}
66 \section{Reportar que está pasando}
68 El ejemplo con el comando \hgcmd{add} en la sección anterior ilustra
69 algo más que es útil acerca de los comandos de Mercurial. Si un
70 comando opera en un fichero que usted no pasó explícitamente en la
71 línea de comandos, usualmente se imprimirá el nombre del fichero, para
72 que usted no sea sorprendido por lo que sucede.
74 Esto es el principio de \emph{mínima sorpresa}. Si usted se ha
75 referido explícitamente a un fichero en la línea de comandos, no tiene
76 mucho sentido repetir esto de vuelta a usted. Si Mercurial está
77 actuando en un fichero \emph{implícitamente}, porque usted no pasó
78 nombres, ni directorios, ni patrones (ver más abajo), lo más seguro es
79 decirle a usted qué se está haciendo.
81 Usted puede silenciar a los comandos que se comportan de esta manera
82 usando la opción \hggopt{-q}. También puede hacer que impriman el
83 nombre de cada fichero, aún aquellos que usted indicó explícitamente,
84 usando la opción \hggopt{-v}.
86 \section{Uso de patrones para identificar ficheros}
88 Además de trabajar con nombres de ficheros y directorios, Mercurial le
89 permite usar \emph{patrones} para identificar ficheros. El manejo de
90 patrones de Mercurial es expresivo.
92 En sistemas tipo Unix (Linux, MacOS, etc.), el trabajo de asociar
93 patrones con nombres de ficheros recae sobre el intérprete de comandos.
94 En estos sistemas, usted debe indicarle explícitamente a Mercurial que
95 el nombre que se le pasa es un patrón. En Windows, el intérprete no
96 expande los patrones, así que Mercurial identificará automáticamente
97 los nombres que son patrones, y hará la expansión necesaria.
99 Para pasar un patrón en vez de un nombre normal en la línea de
100 comandos, el mecanismo es simple:
101 \begin{codesample2}
102 syntax:patternbody
103 \end{codesample2}
104 Un patrón es identificado por una cadena de texto corta que indica qué
105 tipo de patrón es, seguido por un dos puntos, seguido por el patrón en
106 sí.
108 Mercurial soporta dos tipos de sintaxis para patrones. La que se usa
109 con más frecuencia se denomina \texttt{glob}\ndt{Grupo, colección,
110 aglomeración.}; es el mismo tipo de asociación de patrones usado por
111 el intérprete de Unix, y también debería ser familiar para los
112 usuarios de la línea de comandos de Windows.
114 Cuando Mercurial hace asociación automática de patrones en Windows,
115 usa la sintaxis \texttt{glob}. Por esto, usted puede omitir el
116 prefijo ``\texttt{glob:}'' en Windows, pero también es seguro usarlo.
118 La sintaxis \texttt{re}\ndt{Expresiones regulares.} es más poderosa;
119 le permite especificar patrones usando expresiones regulares, también
120 conocidas como regexps.
122 A propósito, en los ejemplos siguientes, por favor note que yo tengo
123 el cuidado de rodear todos mis patrones con comillas sencillas, para
124 que no sean expandidos por el intérprete antes de que Mercurial pueda
125 verlos.
127 \subsection{Patrones \texttt{glob} estilo intérprete}
129 Este es un vistazo general de los tipos de patrones que usted puede
130 usar cuando está usando asociación con patrone glob.
132 La secuencia ``\texttt{*}'' se asocia con cualquier cadena, dentro de
133 un único directorio.
134 \interaction{filenames.glob.star}
136 La secuencia ``\texttt{**}'' se asocia con cualquier cadena, y cruza los
137 % TODO token
138 límites de los directorios. No es una elemento estándar de los tokens
139 de glob de Unix, pero es aceptado por varios intérpretes Unix
140 populares, y es muy útil.
141 \interaction{filenames.glob.starstar}
143 La secuencia ``\texttt{?}'' se asocia con cualquier caracter sencillo.
144 \interaction{filenames.glob.question}
146 El caracter ``\texttt{[}'' marca el inicio de una \emph{clase de
147 caracteres}. Ella se asocia con cualquier caracter sencillo dentro de
148 la clase. La clase se finaliza con un caracter ``\texttt{]}''. Una
149 clase puede contener múltiples \emph{rango}s de la forma
150 ``\texttt{a-f}'', que en este caso es una abreviación para
151 ``\texttt{abcdef}''.
152 \interaction{filenames.glob.range}
153 Si el primer caracter en aparecer después de ``\texttt{[}'' en la
154 clase de caracteres es un ``\texttt{!}'', se \emph{niega} la clase,
155 haciendo que se asocie con cualquier caracter sencillo que no se
156 encuentre en la clase.
158 Un ``\texttt{\{}'' marca el inicio de un grupo de subpatrones, en
159 donde todo el grupo es asociado si cualquier subpatrón en el grupo
160 puede ser asociado. El caracter ``\texttt{,}'' separa los subpatrones,
161 y el ``\texttt{\}}'' finaliza el grupo.
162 \interaction{filenames.glob.group}
164 \subsubsection{Cuidado!}
166 No olvide que si usted desea asocia un patrón con cualquier
167 directorio, no debería usar el elemento para asociar con cualquier
168 cadena ``\texttt{*}'', ya que éste sólo generará asociaciones dentro
169 de un solo directorio. En vez de eso, use el caracter para asociar con
170 cualquier cadena ``\texttt{**}''. Este pequeño ejemplo ilustra la
171 diferencia entre los dos.
172 \interaction{filenames.glob.star-starstar}
174 \subsection{Asociación con patrones de expresiones regulares \texttt{re}}
176 Mercurial acepta la misma sintaxis para expresiones regulares del
177 lenguaje de programación Python (internamente se usa el motor de
178 expresiones regulares de Python). Esta sintaxis está basada en la
179 misma del lenguaje Perl, que es el dialecto más popular en uso
180 (por ejemplo, también se usa en Java).
182 No discutiré el dialecto de expresiones regulares de Mercurial en
183 detalle aquí, ya que las mismas no son usadas frecuentemente. Las
184 expresiones regulares al estilo Perl se encuentran documentadas
185 exhaustivamente en una multitud de sitios web, y en muchos libros.
186 En vez de eso, me enfocaré en unas cuantas cosas que usted debería
187 conocer si tiene la necesidad de usar expresiones regulares en
188 Mercurial.
190 Una expresión regular es comparada contra un nombre de fichero
191 completo, relativo a la raíz del repositorio. En otras palabras, aún
192 si usted se encuentra en un subdirectorio \dirname{foo}, si desea
193 asociar ficheros en este directorio, su patrón debe empezar con
194 ``\texttt{foo/}''.
196 Un detalle a tener en cuenta es que, si le son familiares las
197 expresiones regulares al estilo Perl, las de Mercurial están
198 \emph{enraízadas}. Esto es, que la asociación de una expresión se hace
199 desde el inicio de la cadena; no se buscan coincidencias dentro de la
200 cadena. Para buscar coincidencias en cualquier sitio dentro de una
201 cadena, empiece su patrón con un ``\texttt{.*}''.
203 \section{Filtrado de ficheros}
205 Mercurial no sólo le provee una variedad de formas para especificar
206 ficheros; le permite limitar aún más dichos ficheros mediante el uso
207 de \emph{filtros}. Los comandos que operan con nombres de fichero
208 aceptan dos opciones de filtrado.
209 \begin{itemize}
210 \item \hggopt{-I}, o \hggopt{--include}, le permite especificar un
211 patrón con el que deben coincidir los ficheros para ser
212 procesados.
213 \item \hggopt{-X}, o \hggopt{--exclude}, le brinda una manera de
214 \emph{evitar} procesar ficheros, si coinciden con este patrón.
215 \end{itemize}
216 Usted puede pasar múltiples veces las opciones \hggopt{-I} y
217 \hggopt{-X} en la línea de comandos, e intercalarlos como desee.
218 Por defecto, Mercurial interpreta los patrones que usted pase usando
219 la sintaxis glob (pero usted puede usar expresiones regulares si lo
220 necesita).
222 El filtro \hggopt{-I} puede verse como un ``procese todos los ficheros
223 que coincidan con este filtro''.
224 \interaction{filenames.filter.include}
225 El filtro \hggopt{-X} puede verse como ``procese únicamente los
226 ficheros que no coincidan con este patrón''.
227 \interaction{filenames.filter.exclude}
229 \section{Ignorar ficheros y directorios no deseados}
231 XXX.
233 \section{Sensibilidad a mayúsculas}
234 \label{sec:names:case}
236 Si usted está trabajando en un ambiente de desarrollo mixto que
237 contiene tanto sistemas Linux (u otro Unix) y sistemas Mac o Windows,
238 debería tener en mente el hecho de que ellos tratan
239 %TODO FIXME seguir desde aqui, no tengo idea de como traducir case
240 %sensitivity
241 case (``N'' versus ``n'') of file names in incompatible ways. This is
242 not very likely to affect you, and it's easy to deal with if it does,
243 but it could surprise you if you don't know about it.
245 Operating systems and filesystems differ in the way they handle the
246 \emph{case} of characters in file and directory names. There are
247 three common ways to handle case in names.
248 \begin{itemize}
249 \item Completely case insensitive. Uppercase and lowercase versions
250 of a letter are treated as identical, both when creating a file and
251 during subsequent accesses. This is common on older DOS-based
252 systems.
253 \item Case preserving, but insensitive. When a file or directory is
254 created, the case of its name is stored, and can be retrieved and
255 displayed by the operating system. When an existing file is being
256 looked up, its case is ignored. This is the standard arrangement on
257 Windows and MacOS. The names \filename{foo} and \filename{FoO}
258 identify the same file. This treatment of uppercase and lowercase
259 letters as interchangeable is also referred to as \emph{case
260 folding}.
261 \item Case sensitive. The case of a name is significant at all times.
262 The names \filename{foo} and {FoO} identify different files. This
263 is the way Linux and Unix systems normally work.
264 \end{itemize}
266 On Unix-like systems, it is possible to have any or all of the above
267 ways of handling case in action at once. For example, if you use a
268 USB thumb drive formatted with a FAT32 filesystem on a Linux system,
269 Linux will handle names on that filesystem in a case preserving, but
270 insensitive, way.
272 \subsection{Almacenamiento portable y seguro de repositorios}
274 El mecanismo de almacenamiento de los repositorios en Mercurial es
275 \emph{robusto frente a sensibilidad/insensibilidad a mayúsculas}. Los nombres de
276 fichero son traducidos para que puedan ser almacenados de manera
277 segura tanto en sistemas sensibles como insensibles a mayúsculas. Esto
278 significa que usted puede usar herramientas normales de copia de
279 ficheros para transferir un repositorio Mercurial a, por ejemplo, una
280 memoria USB, y trasladar de manera segura la memoria y el repositorio
281 de ida y vuelta entre un Mac, un PC ejecutando Windows, y un sistema
282 Linux
284 \subsection{Detección de conflictos de mayúsculas/minúsculas}
286 Al operar en el directorio de trabajo, Mercurial respeta la política
287 de nombrado del sistema de ficheros en que se encuentre el directorio
288 de trabajo. Si el sistema de ficheros conserva las diferencias entre
289 mayúsculas, pero no es sensible a ellas, Mercurial tratará los nombres
290 que sólo difieren en mayúsculas como uno solo y el mismo.
292 Un aspecto importante de este enfoque es que es posible consignar un
293 conjunto de cambios en un sistema de ficheros sensible a mayúsculas
294 (típicamente Linux o Unix) que terminará causando problemas para
295 usuarios en sistemas insensibles a mayúsculas (usualmente en Windows o
296 MacOS). Si un usuario de Linux consigna cambios a dos ficheros, uno de
297 ellos llamado \filename{myfile.c} y el otro llamado \filename{MyFile.C},
298 ambos serán almacenados correctamente en el repositorio. Y serán
299 representados correctamente como ficheros separados, en los
300 directorios de trabajo de otros usuarios de Linux.
302 Si un usuario de Windows o Mac jalan este cambio, no tendrán problemas
303 inicialmente, porque el mecanismo de almacenamiento de Mercurial es
304 seguro frente a sensibilidad/insensibilidad a mayúsculas. Sin embargo,
305 una vez que ellos traten de actualizar (\hgcmd{update}) el directorio
306 de trabajo con ese conjunto de cambios, o hagan fusión (\hgcmd{merge})
307 con ese conjunto de cambios, Mercurial verá el conflicto entre los dos
308 nombres de fichero que el sistema de ficheros trataría como el mismo,
309 e impedirá que ocurra la actualización o fusión.
311 \subsection{Arreglar un conflicto de mayúsculas/minúsculas}
313 Si usted está usando Windows o Mac en un entorno mixto donde algunos
314 de sus colaboradores están usando Linux o Unix, y Mercurial reporta un
315 conflicto de mayúsculas/minúsculas cuando usted trata de actualizar
316 (\hgcmd{update}) o fusionar (\hgcmd{merge}), el procedimiento para
317 arreglar el problema es simple.
319 Sólo busque un sistema Linux o Unix cercano, clone el repositorio
320 problema allí, y use el comando \hgcmd{rename} de Mercurial para
321 cambiar los nombres de cualquiera de los ficheros o directorios
322 problemáticos para que no causen más conflictos. Consigne este cambio,
323 y jálelo (\hgcmd{pull}) o empújelo (\hgcmd{push}) a su sistema Windows
324 o MacOS, y actualícelo (\hgcmd{update}) a la revisión con los nombres
325 que ya no generan conflictos.
327 El conjunto de cambios con los nombres con conflictos de
328 mayúsculas/minúsculas permanecerá en el historial de su proyecto, y
329 usted no podrá actualizar (\hgcmd{update}) su directorio de trabajo a
330 dicho conjunto de cambios en un sistema Windows o MacOS, pero puede
331 continuar el desarrollo sin impedimentos.
333 \begin{note}
334 Antes de la versión~0.9.3, Mercurial no usaba un mecanismos seguro
335 frente a sensibilidad/insensibilidad a mayúsculas o minúsculas, y no
336 detectaba los conflictos con nombres de ficheros. Si usted está
337 usando una versión más antigua de Mercurial en Windows o MacOS, le
338 recomiendo enérgicamente que se actualice.
339 \end{note}
341 %%% Local Variables:
342 %%% mode: latex
343 %%% TeX-master: "00book"
344 %%% End: