diff --git a/es_ES.ISO8859-1/articles/Makefile b/es_ES.ISO8859-1/articles/Makefile
index fc51de7659..a406232673 100644
--- a/es_ES.ISO8859-1/articles/Makefile
+++ b/es_ES.ISO8859-1/articles/Makefile
@@ -1,19 +1,21 @@
# $FreeBSD$
# $FreeBSDes: doc/es_ES.ISO8859-1/articles/Makefile,v 1.3 2004/10/09 02:01:17 jesusr Exp $
SUBDIR =
+SUBDIR+= casestudy-argentina.com
SUBDIR+= contributing
SUBDIR+= cvs-freebsd
SUBDIR+= dialup-firewall
SUBDIR+= euro
SUBDIR+= explaining-bsd
SUBDIR+= fbsd-from-scratch
SUBDIR+= laptop
SUBDIR+= mailing-list-faq
+SUBDIR+= p4-primer
SUBDIR+= problem-reports
SUBDIR+= releng
SUBDIR+= zip-drive
DOC_PREFIX?= ${.CURDIR}/../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/es_ES.ISO8859-1/articles/casestudy-argentina.com/Makefile b/es_ES.ISO8859-1/articles/casestudy-argentina.com/Makefile
new file mode 100644
index 0000000000..643e6d8249
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/casestudy-argentina.com/Makefile
@@ -0,0 +1,19 @@
+#
+# $FreeBSD$
+#
+# Articulo: Estudio de caso de Argentina.com
+
+DOC?= article
+
+FORMATS?= html
+WITH_ARTICLE_TOC?= YES
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+SRCS= article.sgml
+
+URL_RELPREFIX?= ../../../..
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/es_ES.ISO8859-1/articles/casestudy-argentina.com/article.sgml b/es_ES.ISO8859-1/articles/casestudy-argentina.com/article.sgml
new file mode 100644
index 0000000000..a403a76c34
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/casestudy-argentina.com/article.sgml
@@ -0,0 +1,417 @@
+$FreeBSD$
+
+
+
+
+
+
+%man;
+ %freebsd;
+ %newsgroups;
+
+%authors;
+
+%trademarks;
+
+%translators;
+ %mailing-lists;
+
+]>
+
+
+
+ Argentina.com : Un estudio de caso
+
+
+
+
+ Carlos
+ Horowicz
+
+ ch@argentina.com
+
+
+
+
+
+ $FreeBSD$
+
+
+ &tm-attrib.freebsd;
+ &tm-attrib.cvsup;
+ &tm-attrib.intel;
+ &tm-attrib.xfree86;
+ &tm-attrib.general;
+
+
+
+
+
+ Introducción
+
+ Argentina.Com es un ISP argentino con una pequeña
+ infraestructura de menos de 15 empleados y cuya fuente principal de
+ ingresos proviene del negocio del acceso telefónico a redes
+ gratuito. Comenzó a operar en el año 2000 con sólo
+ un servidor para correo y chat.
+
+ Desde entonces ha crecido su presencia en un mercado
+ argentino de acceso telefónico a redes que genera unos 45.000
+ millones de minutos anualmente. Su producto más famoso proporciona
+ a cerca de medio millón de usuarios correo gratuito con webmail,
+ POP3 y acceso SMPT, junto con 300M de espacio de disco. Hacia el
+ final de 2002 había alrededor de 50.000 usuarios de correo.
+ Después de dos años y medio de reingeniería y de
+ sólidas mejoras
+ técnicas este ISP ha crecido en un factor de 3 en términos
+ de facturación, y en un factor de 10 en cuanto a la base de usuarios
+ de correo.
+
+ Nuestros competidores en el mercado argentino de acceso
+ telefónico incluyen a Fullzero (filial perteneciente a Clarin
+ Media Group),
+ Alternativa Gratis y Tutopia, este último fundado por IFX y
+ promocionado por Hotmail. Algunos de estos grandes competidores
+ comenzaron sus respectivos negocios de acceso telefónico con
+ inversiones multimillonarias y con campañas de publicidad agresivas
+ en televisión e Internet. Argentina.Com no utiliza este tipo de
+ publicidad. Ha alcanzado la cuarta posición con un 8% de cuota de
+ mercado durante los dos últimos años gracias a un calidad de
+ servicio superior.
+
+ En Argentina y en Latinoamérica en general las personas que
+ no poseen ordenador personal van a los llamados
+ locutorios (centros de Internet), donde por unos
+ pocos pesos pueden utilizar un ordenador conectado a Internet y
+ donde normalmente leen y escriben correos electrónicos a
+ través de portales
+ populares como Hotmail, Yahoo! o Argentina.Com.
+
+ Debido a los limitados recursos financieros disponibles,
+ Argentina.Com decidió invertir en un nuevo sistema de correo en vez
+ de darse publicidad a través de los medios. Esta decisión
+ estratégica abre las puertas a un futuro negocio en el campo del
+ correo corporativo y de pago.
+
+
+
+ El desafío
+
+ El desafío principal para Argentina.Com es alcanzar un tiempo
+ de vida para el servicio de acceso telefónico a redes de al menos
+ 99.95%, o menos de 5 horas de caídas al año. Debido a la alta
+ rotación y volatilidad que existe en este negocio, las cosas deben
+ funcionar correctamente para que el usuario no cambie
+ -voluntariamente o no- de proveedor de acceso a internet o de número
+ de teléfono utilizado para conectarse. El negocio del
+ dialup, como se le conoce en su denominación inglesa,
+ requiere una estructura de soporte para tratar con las grandes
+ operadoras de telecomunicaciones problemas telefónicos y de
+ calidad de servicio, junto con una infraestructura técnica donde la
+ latencia y la pérdida de paquetes deben minimizarse debido a la
+ naturaleza UDP de los servicio de Radius y DNS, y donde el DNS
+ recursivo debería estar siempre disponible.
+
+ Esto tambíen implica tener un tiempo de vida alto en los
+ servicio de POP3 y SMTP, junto con el servicio de webmail. Para
+ POP3 y SMTP se estimó la necesidad de uptime igual
+ que para el servicio de dialup, mientras que para el
+ servicio de webmail se pensó en un porcentaje de 99.5%, lo que
+ significa alrededor de dos dias por año sin servicio o de
+ caída.
+
+ Decidimos migrar el correo a una solución propietaria de
+ código abierto que debería ser horizontalmente escalable y cuyos
+ sistemas antivirus y antispam pudieran soportar más de un
+ único tipo
+ de backend o de almacenamiento de correos.
+
+ La feroz competencia en el mercado del correo
+ electrónico gratuito, principalmente iniciada por las recientes
+ mejoras introducidas por Hotmail, Yahoo! y Gmail, hacían necesario
+ diseñar el nuevo sistema con al menos 300M de espacio de usuario en
+ disco para cada usuario, pero a un coste inferior a 3 dólares
+ americanos por GB incluyendo cierto grado de redundancia. Hay que tener
+ en cuenta que el hardware que puede disponerse en rack
+ es difícil de encontrar en Argentina y que
+ resulta ser entre un 30 y un 40% más caro que en los EEUU. Nuestro
+ líquido financiero para adquisición de equipos en dos
+ años fue de
+ 75.000 dólares americanos, lo cual es una fracción muy
+ pequeña de las
+ inversiones acometidas por nuestros competidores directos.
+
+ Respecto al servicio antispam, era necesario desarrollar un
+ producto que pudiera competir con los sistemas ofrecidos por los
+ grandes. Dadas las hostiles condiciones que impone la existencia del
+ spam (ataques de diccionario, spams con alto grado de ofuscación y
+ refinamiento, phishing, troyanos, correos-bomba,
+ etc.) resulta muy complicado alcanzar tiempos de uptime
+ excelentes y
+ al mismo tiempo repeler dichos ataques. Uno debe también ser
+ cuidadoso para que el usuario no pierda correos debido a falsos
+ positivos en la estrategia de clasificación, para que no se le
+ inunde con spam o notificaciones de spam y para que el correo
+ peligroso no alcance la carpeta de entrada de los usuarios. Por
+ último, el sistema de correo debe protegerse para que los
+ spammers no lo utilicen en su provecho para
+ enviar spam.
+
+ El paradigma del código abierto normalmente requiere la
+ adquisición de grandes equipos de administradores de sistemas,
+ operadores y programadores que se encarguen de aplicar parches,
+ corregir bugs e integrar plataformas. El paradigma opuesto es
+ también costoso debido a las caras licencias de software, la
+ necesidad de hardware cada vez más caro y debido al
+ elevado número de empleados encargados de proporcionar soporte.
+ Así que el desafío era
+ encontrar la mezcla correcta entre recursos monetarios y humanos
+ escasos, alta estabilidad y grado de predicción, y un desarrollo
+ rápido y fiable. En Buenos Aires resulta difícil encontrar
+ profesionales de las ciencias de la computación bien entrenados, la
+ mayoría de los cuales viven y trabajan en el extranjero, mientras
+ que los restantes poseen trabajos estables dentro de las
+ instituciones del gobierno o en grades compañías.
+
+
+
+ La solución FreeBSD
+
+
+ Introducción
+
+ A comienzos de 2003 teníamos un sistema de correo
+ CriticalPath bajo Solaris x86 y una máquina Redhat
+ para SMTP, Radius y DNS. Los servicios de DNS y Radius se caían
+ constantemente y estábamos luchando con colas enormes de correo
+ electrónico. Hubo un intento de instalar CriticalPath para Linux
+ en Redhat en una máquina Intel con una tarjeta Megaraid, pero la
+ latencia del disco era enorme y la aplicación de correo
+ no llegó a funcionar.
+
+ El primer paso realizado hacia la solución &os;
+ consitió en migrar este hardware y software comercial a &os;
+ 4.8 con la ayuda de la emulación Linux.
+
+
+
+ La elección de &os;
+
+ El sistema operativo &os; goza de una merecida fama de por su gran
+ estabilidad, junto con su pragmatismo y sentido común a la hora de
+ poner aplicaciones on-line gracias a su excelente
+ colección de Ports.
+ Nosotros consideramos su
+ proceso de generación de releases muy sencillo de entender,
+ además de que la comunidad de usuarios de las listas oficiales
+ de correo electrónico mantiene un estilo educado y civilizado
+ cuando ayudan o leen los problemas de otros usuarios y sus soluciones.
+
+
+ Otra característica importante es su rápida
+ implantación.
+ Afortunadamente pudimos establecer nuestra política de
+ instalación de SO alrededor de las capacidades predefinidas de
+ &os;. En una compañía pequeña algunas veces
+ necesitas ir corriendo a un centro de datos y
+ rápidamente levantar un servidor para
+ proporcionar algún servicio. En los dos últimos años,
+ Argentina.Com adquirió alrededor de cuarenta servidores, la
+ mayoría Pentium IV pero también varios Xeon duales y unos
+ cuantos Opteron duales para ubicarlos en los centros de datos
+ donde tenemos los contratos de operaciones de hosting
+ y de acceso
+ telefónico a redes. Todos ellos ejecutan &os;, desde 4.8
+ (un par de ellos con dos años de uptime y
+ cero problemas) hasta 6.0-BETA2.
+
+ La política general que tenemos para con el sistema
+ operativo consiste en intentar llevar a todos los servidores a la rama
+ de código estable de una forma periódica utilizando
+ RELENG_4, RELENG_5
+ y ahora RELENG_6. Estas operaciones nos permiten estar
+ más preparados ante posibles amenazas de seguridad a nivel del
+ sistema operativo o del software base del mismo, especialmente en los
+ servidores web.
+
+
+
+ Reingeniería básica
+
+ El prime paso de reingeniería fue poner en funcionamiento
+ dos máquinas &os; 4.8 cuya única tarea iba a consistir en
+ ser DNS autorizados para todos nuestros dominios. El software elegido
+ resultó ser BIND9. Estas máquinas se ubicaron en diferentes
+ centros de datos, cuidándonos de asegurar una
+ buena latencia entre ellos para evitar problemas en transferencias
+ de zonas, haciendo posible tratar con TTLs entre 60 y 600 segundos
+ para así poseer unos mejores márgenes de reacción
+ en caso de problemas.
+
+ El segundo paso consistió en desplegar dos máquinas
+ más del mismo tipo, también en distintos centros de datos,
+ para sólo servir Radius y DNS recursivo. Los servidores de
+ acceso de red (Network Access
+ Servers o NAS) de los operadores de telecomunicaciones se
+ configuraron para enviar las peticiones de autorizació y
+ accounting de Radius hacia los nuestros, y
+ también para asignar dichos DNS recursivos
+ a nuestros usuarios de acceso telefónico.
+
+ La tercera regla de oro consiste en no poner
+ jamás en la misma máquina el servicio de entrada
+ y salida de correo SMTP. Desplegamos máquinas &os; distintas
+ utilizando Postfix tanto para la entrada como para la salida.
+
+
+
+ Migración del correo
+
+ La migración del correo requería una
+ planificación cuidadosa debido al hecho de que íbamos a
+ a migrar tanto los frontales como los backends.
+ El primer paso fue construir un sistema perimetral antispam
+ y antivirus con &os; 4.x y 5.x basado en postfix, amavisd-new,
+ clamav y SpamAssassin. Estos sistemas iban a entregar correos
+ tanto a los antiguos sistemas como a los nuevos hasta que el
+ nuevo backend estuviera en funcionamiento.
+ Entre tanto añadimos pequeñas máquinas &os;
+ para incrementar el spool de correo de
+ CriticalPath sin ningún problema.
+
+ En la primera línea de la entrada de correo pusimos
+ varios MX del dominio Argentina.com para filtrar ataques de
+ diccionario (intentos de reenviar correo a usuarios no existentes)
+ además de una lista negra derivada de
+ SURBL que resultó no dar casi ningún falso positivo.
+ Los correos eran multiplexados hacia un
+ cluster de Xeon duales y Opteron duales donde ejecutábamos
+ amavisd-new junto con un filtrado basado en listas blancas y negras
+ basado en MySQL. Descartamos el uso de Bayes y Autowhitelisting
+ en un nivel global debido a las grandes cantidades de falsos positivos
+ y de falsos negativos que proporcionaban. En su lugar definimos unos
+ cuantos niveles de spam de menos a más tolerante, cada uno con
+ niveles de corte y de descarte. A cada correo electrónico
+ recibido el sistema le asigna una determinada puntuación.
+ Los correos con una puntuación por debajo de la puntuación
+ asociada con el nivel de corte establecido
+ por el nivel de spam pueden continuar hasta la bandeja de entrada del
+ usuario. Los correos entre el nivel de corte y el nivel de descarte se
+ envían a una carpeta del usuario
+ denominada Spam, y por último aquellos correos por encima
+ del nivel de
+ corte se descartan porque se considera una situación muy
+ evidente de spam.
+ En aras de la simplicidad, se asocian de forma transparente los correos
+ almacenados en la libreta de direcciones con el sistema antispam,
+ colocándolos en las listas blancas de forma
+ automática.
+
+ Con la introducción de Spamassassin 3.x, el tráfico
+ de DNS utilizado para preguntar a las listas negras de correo
+ creció
+ considerablemente, de tal forma que firmamos acuerdos con SpamCop,
+ Spamhaus y SURBL para instalar réplicas públicas de
+ sus bases de datos en nuestro equipo &os;. Gracias a estas
+ réplicas, que nos costaron entre 1 y 2Mbps de tráfico,
+ fuimos capaces de
+ reducir drásticamente la latencia de Spamassassin.
+
+ En un tercer nivel nos encontramos con la entrega a los
+ buzones de correo de los usuarios. Tan pronto como nos pusimos
+ a contruir el nuevo backend Cyrus-Imap con
+ autentificación MySQL,
+ nos dimos cuenta de que necesitábamos multiplexar el correo de
+ entrada a los usuarios en los formatos de los buzones nuevos y
+ antiguos. Finalmente, conseguimos migrar cientos de miles de
+ correos hacia la nueva arquitectura Cyrus utilizando una fenomenal
+ herramienta denominada imapsync, que se puede instalar directamente
+ desde los ports. También instalamos perdition (un proxy de POP3 y
+ de IMAP) entre medias para asegurar una migraci´n transparente
+ y permitir la distribución entre distintos servidores de
+ los buzones.
+ En resumen, toda la información de localización de un
+ buzón de usuario está en MySQL, y dicha información
+ se encuentra disponible para todo el software que forma parte de
+ la cadena.
+
+ Respecto al hardware para el espacio de disco, actualmente
+ utilizamos siete máquinas &os; con Cyrus-Imap de distinto hardware.
+ El mayor es un Pentium IV con 4G de RAM y tarjetas 3ware
+ con 12 bahías extraíbles en caliente,
+ organizadas en 3 unidades RAID-5
+ de 1 Terabyte cada una. El software 3ware envía un correo
+ electrónico al administrador cuando el RAID se degrada
+ (en la mayoría de los casos se trata de errores de disco) y
+ es posible reconstruir el RAID con el sistema a pleno rendimiento.
+ Utilizamos smartmontools en los casos en los que hay
+ menor redundancia, para disponer inmediatamente de alertas de discos
+ con problemas de temperatura o de fallos de
+ selftests.
+
+ Como software de correo web elegimos un producto comercial
+ denominado Atmail, disponible con sus fuentes en perl y que
+ utiliza mod_perl. Bajo &os; resulta extremadamente
+ sencillo gestionar los módulos de perl y no es necesario usar
+ la shell de CPAN; únicamente hay que seleccionar
+ el port correcto y ejecutar make install. Tras varios
+ meses de trabajo de integración pudimos integrar la parte cliente
+ de Atmail que habla IMAP con nuestros backends.
+ Tuvimos que modificar algunas partes del código para adaptar
+ el producto a nuestro entorno libre y para hacerlo compatible con nuestro
+ perímetro antispam antivirus, además de aplicar
+ nuestras personalizaciones y traducciones.
+
+
+
+ Migración web
+
+ Con la adopción de &os; no hubo que realizar ningún
+ esfuerzo adicional para tener en ejecució en cuestion de minutos
+ los entornos de Apache, PHP y MySQL. Incluso las actualizaciones de
+ PHP4 a PHP5 se efectuaron sin problemas. El sistema de ports nos
+ resultó una vez más extremadamente útil
+ y nos permitió hacer cosas como comprimir los contenidos de texto y de
+ html de Apache utilizando unas pocas líneas de
+ documentación. Además, hemos experimentado
+ un rendimiento excelente y una estabilidad y uptimes
+ extraordinarios.
+
+
+
+
+
+ Resultados
+
+ Conseguimos implantar una arquitectura de correo electrónico
+ basada en &os; que es escalable horizontalmente, utilizando 3
+ Terabytes de almacenamiento basado en servidores Intel incurriendo
+ en un coste de 3 dólares por Gigabyte con redundancia.
+
+ La gran estabilidad alcanzada permitió a Argentina.com explorar
+ otros campos como el hosting para terceros y el
+ housing con presencia
+ en los centros de datos argentinos.
+
+ Ahora ofrecemos también acceso telefónico a redes
+ corporativas para usuarios de roaming y Perú
+ gracias a nuestra presencia y a los acuerdos suscritos con la
+ mayoría de los operadores de telecomunicaciones.
+ Entre nuestros clientes indirectos se encuentran las principales
+ compañías americanas como Ford, Exxon y Reuters.
+ También estamos en el negocio del acceso telefónico a redes
+ en Brasil, Chile, Colombia y Panamá.
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/articles/p4-primer/Makefile b/es_ES.ISO8859-1/articles/p4-primer/Makefile
new file mode 100644
index 0000000000..a70387182f
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/p4-primer/Makefile
@@ -0,0 +1,19 @@
+#
+# $FreeBSD$
+#
+# Articulo sobre el uso de Perforce en el desarrollo en FreeBSD.
+
+DOC?= article
+
+FORMATS?= html
+WITH_ARTICLE_TOC?= YES
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+SRCS= article.sgml
+
+URL_RELPREFIX?= ../../../..
+DOC_PREFIX?= ${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/es_ES.ISO8859-1/articles/p4-primer/article.sgml b/es_ES.ISO8859-1/articles/p4-primer/article.sgml
new file mode 100644
index 0000000000..42d261ec33
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/p4-primer/article.sgml
@@ -0,0 +1,1005 @@
+$FreeBSD$
+
+
+
+
+
+%man;
+ %freebsd;
+ %newsgroups;
+
+%authors;
+
+%trademarks;
+
+%translators;
+ %mailing-lists;
+
+]>
+
+
+ Perforce en el contexto del desarrollo de &os;
+
+
+
+
+
+ Scott
+ Long
+
+ scottl@FreeBSD.org
+
+
+
+
+
+ $FreeBSD$
+
+
+ &tm-attrib.freebsd;
+ &tm-attrib.cvsup;
+ &tm-attrib.general;
+
+
+
+
+ Introducción
+
+ El proyecto &os; utiliza el sistema de control de versiones
+ Perforce para gestionar proyectos
+ experimentales que todavía no están listos para ser
+ incluidos en el repositorio principal de CVS.
+
+
+ Disponibilidad, documentación y recursos
+
+ Aunque que el producto Perforce
+ es un producto comercial, el software cliente que se encarga de
+ interactuar con el servidor se distribuye libremente. Pueden
+ descargarse versiones binarias del mismo desde el
+ sitio web de Perforce:
+ .
+
+
+ Existe un cliente gráfico, pero la mayoría de la gente
+ utiliza la aplicación de línea de órdenes,
+ p4. Este documento trata sobre el uso de
+ dicha herramienta para la línea de órdenes.
+
+ En
+
+ encontrará documentación online
+ detallada.
+
+ Se recomienda encarecidamente leer la guía de
+ usuario y el manual de Perforce.
+ La aplicación p4 dispone de una extensa
+ ayuda online a la que puede accederse mediante la
+ orden p4 help.
+
+ El servidor &os; Perforce se
+ encuentra en
+ perforce.freebsd.org,
+ puerto 1666. Puede navegar por el
+ repositorio desde
+ .
+ Ciertas partes del repositorio se exportan automáticamente hacia
+ diversos servidores CVSup.
+
+
+
+
+ Los comienzos
+
+ El primer paso para utilizar
+ Perforce consiste en obtener una cuenta
+ en el servidor. Si ya dispone de una cuenta en
+ FreeBSD.org
+ entre en
+ freefall
+ y ejecute el siguiente comando utilizando una contraseña distinta
+ del acceso de su &os; o de cualquier otro mecanismo de
+ autenticación SSH:
+
+ &prompt.user; /usr/local/bin/p4newuser
+
+ Por supuesto si no tiene una cuenta en
+ FreeBSD.org
+ necesitará coordinarse con su mentor.
+
+
+ El siguiente paso consiste en establecer las variables de
+ entorno que necesita p4 y en verificar
+ que puede conectarse al servidor. Es necesario especificar la variable
+ P4PORT para realizar cualquier operación. Dicha
+ variable indica el servidor Perforce
+ con el que se va a trabajar. En el caso del Proyecto &os;, créela
+ con el siguiente valor:
+
+ &prompt.user; export P4PORT=perforce.freebsd.org:1666
+
+
+ Los usuarios con acceso shell al
+ cluster
+ FreeBSD.org
+ pueden querer encapsular el protocolo cliente-servidor de
+ Perforce a través de un
+ túnel SSH, en cuyo caso la variable de arriba
+ debería establecerse al valor
+ localhost.
+
+
+ El servidor &os; también necesita que se establezcan las
+ variables P4PASSWD y P4USER. Utilice
+ el nombre de usuario y la contraseña anteriores del siguiente
+ modo:
+
+ &prompt.user; export P4USER=nombre_de_usuario
+&prompt.user; export P4PASSWD=contraseña
+
+ Compruebe que todo funciona mediante la siguiente
+ orden:
+
+ &prompt.user; p4 info
+
+ A resultas de esta orden debería ver información
+ referente al servidor. Si no es así compruebe que
+ la variable P4PORT tiene el valor correcto.
+
+
+
+
+ Clientes
+
+ El sistema Perforce proporciona
+ acceso al repositorio y mantiene el estado del cliente de forma
+ individualizada. En términos de
+ Perforce, un cliente es una
+ especificación que asocia
+
+ Este término, que también puede traducirse como
+ asociar o asignar, suele aparecer en la jerga de la
+ administración de sistemas como
+ mapear.
+
+ ficheros y directorios desde el
+ repositorio hasta la máquina local. Cada usuario puede poseer
+ varios clientes, y cada cliente puede acceder a distintas partes
+ del repositorio (incluso a varias partes que se solapan entre sí).
+ El cliente también especifica el directorio raíz del
+ árbol de
+ directorios sobre el que se realiza la asociación y la
+ máquina
+ donde efectivamente está dicho árbol. Es por esto que
+ si pretende trabajar en varias máquinas tendrá que
+ usar varios clientes.
+
+
+ Puede acceder a los clientes mediante
+ p4 client. Si se ejecuta esta orden sin
+ argumentos aparece una plantilla del cliente dentro de un
+ editor, permitiendo de esta forma crear un nuevo cliente. Los
+ campos importantes de esta plantilla se explican a
+ continuación:
+
+
+
+ Client:
+
+
+ Este es el nombre de la especificación del cliente.
+ Puede ser cualquier cosa, pero debe ser una cadena única
+ dentro del servidor Perforce. Suelen
+ usarse nombres como
+ nombre_de_usuario_nombre_de_máquina,
+ que permite identificar fácilmente a los clientes cuando se
+ navega por ellos.
+ Por defecto hay ya un nombre, que se
+ corresponde con el nombre de la máquina.
+
+
+
+
+ Description:
+
+
+ Este campo suele consistir en un breve texto descriptivo
+ que ayude a identificar al cliente.
+
+
+
+
+ Root:
+
+
+ Se trata del directorio local que actuará como
+ directorio raíz para todos los ficheros dentro de la
+ asociación en el cliente.
+ Debe ser una localización única
+ dentro del sistema
+ de ficheros que no se solape con otros ficheros o clientes
+ Perforce.
+
+
+
+
+ Options:
+
+
+ La mayoría de las opciones por defecto son correctas y
+ válidas para todo el mundo, aunque suele ser recomendable
+ comprobar que estén activadas las opciones
+ y
+ y que no tienen el prefijo no. Los
+ detalles de cada una de estas opciones están en la
+ documentación de Perforce.
+
+
+
+
+
+ LineEnd:
+
+
+ Este parámetro gestiona las conversiones CR-LF y debe
+ dejarse tal cual salvo que sus necesidades específicas
+ requieran cambiarlo.
+
+
+
+
+ View:
+
+
+ Aquí es donde están las asociaciones de ficheros
+ servidor-a-local.
+ El valor por defecto es:
+
+ //depot/... //cliente/...
+
+ Esto asociará por completo el repositorio
+ Perforce al directorio
+ Root
+ del cliente. NO USE ESTE VALOR POR DEFECTO.
+ El repositorio de &os; es enorme e intentar asociarlo y
+ sincronizarse con dicho repositorio tardará muchísimo y
+ consumirá enormes recursos. Asocie
+ sólamente la sección del repositorio en la que va a
+ trabajar. Por ejemplo, hay un árbol para el proyecto
+ smpng en //depot/projects/smpng. Una
+ asociación en ese caso sería algo así:
+
+ //depot/projects/smpng/... //cliente/...
+
+ Los ... deben tomarse literalmente
+ tal cual están. Es un dialecto de
+ Perforce para decir este
+ directorio y todos los ficheros y directorios por debajo de
+ él..
+
+ Una vista (View) puede contener múltiples
+ asociaciones. Vamos a suponer que quiere asociar los
+ árboles de SMPng
+ y de NFS. Su View sería algo
+ así:
+
+ //depot/projects/smpng/... //cliente/smpng/...
+ //depot/projects/nfs/... //cliente/nfs/...
+
+ Recuerde que cliente es el
+ nombre del cliente que se especificó en la sección
+ Client, pero en la sección
+ View además se utiliza para resolver al
+ directorio especificado en la sección
+ Root.
+
+ También tenga en cuenta que el mismo fichero o
+ directorio no puede asociarse más de una vez dentro de una
+ única vista. La orden del siguiente ejemplo no es correcta
+ y producirá resultados imprevistos:
+
+
+ //depot/projects/smpng/... //cliente/smpng-esto/...
+ //depot/projects/smpng/... //cliente/smpng-lo_otro/...
+
+ Las vistas son la parte compleja del proceso de
+ aprendizaje de Perforce, así que
+ no tenga miedo de hacer tantas preguntas como estime
+ oportunas.
+
+
+
+
+ Puede listar los clientes existentes mediante
+ p4 clients. Puede listarlos sin que sufran
+ modificaciones mediante p4 client -o
+ nombre_cliente.
+
+ Siempre que se interactue con ficheros en
+ Perforce la variable de entorno
+ P4CLIENT debe contener al nombre del cliente que
+ se está utilizando, es decir:
+
+ &prompt.user; export P4CLIENT=nombredemicliente
+
+ Fíjese en que las asociaciones del cliente en el repositorio
+ no son exclusivos; varios clientes pueden estar asociados en la
+ misma zona del respositorio.
+ Esto permite el trabajo en equipo sobre el mismo
+ código, permitiendo que distintas personas accedan y
+ modifiquen la misma parte del respositorio.
+
+
+
+ Sincronizaciones
+
+ Una vez definida la especificación del cliente y una vez
+ establecida la variable de entorno P4CLIENT, el
+ siguiente paso consiste en recuperar los ficheros para el cliente en
+ cuestión desde el servidor hasta la máquina local.
+ Esto se realiza
+ con p4 sync, el cual indica a
+ Perforce que sincronice los ficheros
+ locales con los del repositorio. La primera vez que se ejecuta
+ descargará todos los ficheros. Las siguientes ejecuciones
+ sólo descargarán aquellos ficheros que hayan cambiado
+ desde la última ejecución de la orden.
+ Gracias a esto es posible sincronizar sus fuentes con
+ las de otras personas con las que esté trabajando.
+
+ Las operaciones de sincronización sólo
+ atañen a aquellos ficheros cuyas modificaciones han
+ sido transmitidas a Perforce.
+ Si se modifica o borra un fichero en local sin informar de ello
+ al servidor la ejecución de un
+ sync no reflejará dichos cambios. No obstante, la
+ ejecución de p4 sync -f sincrozará
+ incondicionalmente todos los ficheros, sin que importe su estado.
+ Esto resulta útil para solucionar problemas cuando se cree que el
+ árbol pueda haber sufrido algún tipo de
+ corrupción.
+
+ Puede sincronizarse parte del árbol o del cliente
+ especificando una ruta relativa a la orden sync.
+ Por ejemplo, para sincronizar sólo el directorio
+ ufs
+ del proyecto smpng ejecute lo
+ siguiente:
+
+ &prompt.user; cd raizdelproyecto/smpng
+&prompt.user; p4 sync src/sys/ufs/...
+
+ El uso de rutas locales relativas funciona en muchas otras
+ órdenes p4.
+
+
+ Ramas
+
+ Una de las características más interesantes de
+ Perforce es la posibilidad de crear
+ ramas. Las ramas son muy sencillas de crear y también resulta muy
+ fácil mover cambios entre distintas ramas (como se verá
+ más
+ adelante). Las ramas también nos permiten realizar trabajos muy
+ experimentales dentro de un entorno de sandbox, sin
+ necesidad de tener que preocuparnos por las colisiones con otros
+ usuarios o por desestabilizar el árbol principal. Además,
+ las ramas
+ proporcionan el aislamiento necesario frente a los errores que se
+ cometen cuando se aprende a manejar el sistema
+ Perforce. Vistas estas ventajas es
+ lógico que cada proyecto disponga de su propia rama y
+ en &os; recomendamos encarecidamente este esquema.
+ También se recomienda la aplicación frecuente de los cambios
+ realizados.
+
+ El repositorio Perforce (conocido
+ como el depósito, o depot en
+ la jerga de Perforce)
+ es un único árbol plano. Se accede a cada fichero a
+ través de una
+ sencilla ruta bajo el directorio //depot, tanto si se trata de un
+ fichero de nueva creación como si proviene de una
+ ramificación.
+ Esto supone una gran diferencia con respecto a sistemas como CVS,
+ donde cada rama se encuentra en la misma ruta que su rama padre.
+ En Perforce el servidor mantiene las
+ relaciones entre los ficheros padre e hijo, pero los
+ ficheros en sí están bajo sus propias rutas.
+
+
+ El primer para para crear una rama consiste en crear una
+ especificación de rama. Es similar a la especificación
+ de un cliente,
+ pero se crea mediante la orden p4 branch
+ nombre_de_rama.
+
+ Veamos los campos más importantes:
+
+
+
+ Branch
+
+
+ El nombre de la rama. Puede ser cualquier nombre, pero
+ debe ser único en el repositorio. La convención
+ que se usa en &os; es
+ nombre_de_usuario_nombre_del_proyecto.
+
+
+
+
+ Description
+
+
+ Puede poner aquí un texto simple que describa la
+ rama.
+
+
+
+
+ View
+
+
+ Esto es la asociación de la rama. En lugar de asociar
+ desde el depósito hacia la máquina local
+ como una asociación de cliente, se crea una asociación
+ entre la rama padre y la rama hija
+ dentro del depósito. Por ejemplo, puede
+ querer crear una rama del proyecto smpng. La asociación
+ resultaría en algo parecido a esto:
+
+ //depot/projects/smpng/... //depot/projects/mi-super-smpng/...
+
+ O puede crear una rama totalmente nueva a
+ partir de las fuentes de &os;:
+
+ //depot/vendor/freebsd/... //depot/projects/mi-nuevo-proyecto/...
+
+ Esto asociará el HEAD del árbol de &os; a su
+ nueva rama.
+
+
+
+
+ La creación de la especificación de rama
+ únicamente graba la
+ especificación en sí misma dentro del servidor. No
+ modifica el depósito ni cambia
+ ningún fichero. El directorio que se declara en la rama
+ permanece vacío en el servidor hasta que se comience a
+ llenar.
+
+
+ Para rellenar la rama primero debemos editar el cliente con
+ la orden p4 client y asegurarnos de que el
+ directorio de rama está asociado en el cliente. Puede ser
+ necesario añadir una línea View
+ como esta:
+
+ //depot/projects/mi-nuevo-proyecto/... //micliente/mi-nuevo-proyecto/...
+
+ El siguiente paso consiste en ejecutar p4
+ integrate, como se describe en la siguiente
+ sección.
+
+
+ Integraciones
+
+ Integración es el término que se utiliza
+ en Perforce para describir la acción de
+ mover cambios desde una parte del depósito a otra.
+ Se suele realizar junto con las órdenes creación y
+ mantenimiento de ramas. Una integración es necesaria cuando se
+ quiere rellenar inicialmente una rama y cuando se quieren mover cambios
+ realizados en la rama padre hacia la rama hija, o de la la rama hija
+ a la padre. Un caso muy común es la integración
+ periódica desde el árbol original de &os; hacia la rama
+ hija propia del usuario.
+ El servidor Perforce
+ mantiene el estado de los cambios en cada rama y sabe cuándo
+ hay cambios que pueden integrarse de una rama a otra.
+
+ La forma más común de hacer una integración
+ se muestra en la siguiente orden:
+
+
+ &prompt.user; p4 integrate -b nombrederama
+
+ nombrederama es el nombre que se
+ ha dado a la
+ especificación de rama, tal y como se explicó en la
+ sección anterior.
+ Esta orden indica a Perforce que
+ busque cambios en la rama padre que todavía no se hayan
+ aplicado a la rama hija. En base a los cambios encontrados se
+ prepara un listado de diferencias a aplicar. Si la integración
+ se realiza por primera vez sobre una rama (por ejemplo cuando se
+ realiza una operación de rellenado inicial) los ficheros
+ de la rama padre simplemente se copiarán en la ubicación
+ en la rama hija de la máquina local.
+
+ Una vez que la operación de integración ha finalizado
+ se debe ejecutar p4 resolve, que aplicará
+ los cambios y resolverá posibles conflictos.
+ Los conflictos puede surgir debido a
+ cambios que se solapan al encontrarse tanto en fichero de la rama
+ padre como en la copia del fichero de la rama hija. Normalmente no
+ suelen aparecer conflictos y Perforce
+ puede calcular rápidamente cómo unir los cambios.
+ Para ejecutar una operación de resolución
+ (resolve) utilice las siguientes órdenes:
+
+ &prompt.user; p4 resolve -as
+&prompt.user; p4 resolve
+
+ La primera invocación indica a
+ Perforce que una automáticamente los
+ cambios y que acepte aquellos ficheros que no den conflictos. La
+ segunda invocación permite inspeccionar cada fichero con conflictos
+ y resolver de forma manual dichas incompatiblidades.
+
+ Una vez hecha la integración de los ficheros llega el
+ momento de aplicar los cambios al repositorio. Para ello se
+ emplearemos la orden
+ p4 submit, cuyo uso se explica en la
+ siguiente sección.
+
+
+
+ Aplicación de cambios en el repositorio
+
+ Los cambios que se han realizado en local se deben
+ aplicar en el contenido del servidor Perforce
+ para mayor seguridad frente a pérdidas y para que otras
+ personas puedan acceder a dichos cambios; esto se hace con la
+ orden p4 submit. Cuando se ejecuta esta
+ orden se abre una plantilla (submit template)
+ en el editor. &os; dispone de una platilla personalizada, de la
+ que a continuación se explican los campos más
+ importantes:
+
+ Description:
+ <enter description here>
+ PR:
+ Submitted by:
+ Reviewed by:
+ Approved by:
+ Obtained from:
+ MFP4 after:
+
+ es decir
+
+ Descripción:
+ <Introduzca una descripción>
+ PR:
+ Enviado por:
+ Revisado por:
+ Aprobado por:
+ Obtenido de:
+ MFP4 tras:
+
+
+ Se considera una buena práctica proporcionar al menos dos o
+ tres frases que describan los cambios entregados. Debería
+ declarar aquí qué hacen dichos cambios, por qué
+ se han hecho de esa forma o qué problemas intenta resolver
+ con ellos. También
+ conviene explicar qué APIs cambian y qué otros efectos
+ secundarios pueden tener.
+ Este texto debe sustituir a la línea <enter
+ description here> que aparece en la plantilla. Debe
+ recubrir las líneas y comenzar cada línea con una
+ tabulación. Las etiquetas de más abajo son
+ específicas de &os; y puede eliminarlas si no resultan
+ útiles o apropiadas en su contexto.
+
+ Files:
+
+ Este campo se rellena automáticamente con todos los ficheros
+ que el cliente etiquetó en el servidor con estados de
+ adición, borrado, integración o edición.
+ Le aconsejamos que revise esta lista y elimine de ella los ficheros
+ que todavía no esten listos.
+
+ Una vez guardada la sesión de su editor tiene lugar la entrega
+ de los datos al servidor. Esto significa que las copias locales de
+ los ficheros entregados se enviarán al servidor. Si algo va
+ mal durante este proceso se cancelará la entrega y se
+ avisará al usuario de que la entrega se ha convertido en
+ una lista de cambios que deben corregirse y reenviarse. Las
+ entregas son atómicas, es decir, si un fichero falla
+ la entrega se cancela en su totalidad.
+
+ Los cambios efectuados en el servidor no pueden cancelarse
+ una vez hechos, pero sí que pueden cancelarse si, dentro
+ aún del editor, se sale de él sin cambiar el
+ texto del campo
+ Description. Perforce
+ se quejará la primera vez que intente salir y le
+ devolverá al editor. Si sale por segunda vez el editor
+ cancelará la operación. Devolver el repositorio
+ al estado anterior a un cambio ya efectuado es un proceso
+ muy complicado y no hay un procedimiento estándar, por lo
+ que depende del caso concreto.
+
+
+
+
+ Edición
+
+ En el servidor se almacena y mantiene el estado de cada
+ fichero del cliente. Para evitar colisiones entre distintas
+ personas trabajando al mismo tiempo en el mismo fichero
+ Perforce presta atención a qué
+ ficheros están abiertos en modo de edición, y utiliza
+ esa información para poder gestionar posteriormente las
+ operaciones de entrega, las sincronizaciones y las
+ integraciones.
+
+ Para abrir un fichero para editarlo utilice p4
+ edit de la siguiente forma:
+
+ &prompt.user; p4 edit nombredefichero
+
+ Esto marca el fichero en el servidor con el estado de
+ edición, lo que permite entregar el fichero posteriormente
+ una vez realizados los cambios oportunos, o lo etiqueta como de
+ tratamiento especial cuando se está efectuando una
+ operación de integración o sincronización.
+ Tenga en cuenta que la edición no es exclusiva en
+ Perforce. Varias personas pueden tener
+ el mismo fichero en estado de edición (será
+ informado de ello si es necesario cuando ejecute
+ edit), pero podrá entregar sus cambios
+ incluso cuando haya otras personas que tengan ese fichero en estado
+ de edición.
+
+ Cuando alguien entregue un cambio de un fichero que usted
+ esté editando necesitará cotejar sus modificaciones
+ con las de la otra u otras personas para poder aplicar
+ correctamente sus modifaciones al repositorio. La forma más
+ sencilla de hacerlo es ejecutar
+ p4 sync o p4 submit y dejar
+ que el programa encuentre algún conflicto, y a
+ continuación
+ ejecutar p4 resolve para resolver
+ manualmente los conflictos y aceptar los cambios de la otra persona
+ en su copia del fichero. Hecho esto, utilice p4
+ submit para aplicar sus cambios en el
+ repositorio.
+
+ Si posee un fichero abierto para su edición y
+ quiere descartar los cambios y devolverlo a su estado
+ original ejecute
+ p4 revert de la siguiente forma:
+
+ &prompt.user; p4 revert nombredefichero
+
+ Esto resincroniza el fichero con el contenido del servidor y
+ elimina en el servidor el atributo de edición para ese fichero.
+ Se perderá cualquier cambio que haya hecho en local.
+ Esto resulta muy útil cuando se han efectuado una serie de
+ cambios en un determinado fichero y se decide posteriormente que
+ no se desean aplicar dichos cambios en el servidor.
+
+ Cuando se sincroniza un fichero se marca como sólo lectura en
+ el sistema de ficheros. Aunque se pueden sobreescribir fácilmente
+ dichos permisos se aplican para recordar al usuario de una forma
+ educada que para ello se debe utilizar p4 edit.
+ Los ficheros modificados en local pero que no están en
+ estado de edición pueden sobreescribirse al ejecutar
+ p4 sync.
+
+
+ Cambios, descripciones e historial
+
+ Puede ver el historial de cambios realizados al
+ depósito de
+ Perforce puede consultarse mediante
+ p4 changes. Esta orden proporciona una breve
+ descripción de cada cambio, quién la realizó
+ y cúal es el número de
+ modificación. Si lo que se quiere son los detalles
+ de un cambio en concreto utilice
+ p4 describe
+ numero_de_cambio. Esta orden
+ proporciona el log y los
+ diffs de dicho cambio.
+ Normalmente se utilizan las opciones o
+ para generar diffs unificados o
+ contextuales, respectivamente, en lugar del formato
+ del diff nativo.
+
+ p4 filelog nombre_de_fichero
+ muestra el historial de un fichero, incluyendo todas sus modificaciones,
+ integraciones y ramas que contenga.
+
+
+
+ diffs
+
+ Existen dos formas de generar diffs de ficheros en
+ Perforce, bien entre cambios locales
+ que todavía no se han entregado o bien entre dos
+ árboles (o dentro de una misma rama) del
+ depósito. Estos diffs
+ se generan mediante órdenes distintas,
+ y :
+
+
+
+ p4 diff
+
+
+ Ese comando genera un diff entre los cambios
+ locales y los cambios de ficheros en estado de edición. Los
+ parámetros y
+ permiten crear diffs unificados o contextuales,
+ respectivamente. También se puede establecer la variable
+ P4DIFF para que apunte a un
+ diff local. Le recomendamos encarecidamente
+ usar esta orden para revisar sus cambios antes de
+ aplicarlos en el servidor.
+
+
+
+
+ p4 diff2
+
+
+ Esta orden crea un diffs entre ficheros
+ dados en el depósito, o entre
+ ficheros especificados en una especificación de rama. La
+ operación tiene lugar en el servidor, así que
+ la variable P4DIFF no surte ningún efecto,
+ aunque las opciones y
+ sí pueden usarse. Las dos formas de
+ esta orden son:
+
+ &prompt.user; p4 diff2 -b nombrederama
+
+ y
+
+ &prompt.user; p4 diff2 //depot/ruta1 //depot/ruta2
+
+
+
+
+ En todos los casos los diffs se muestran en la salida
+ estándar. Por desgracia Perforce
+ usa un formato de diffs que resulta ser ligeramente
+ incompatible con las herramientas Unix estándar
+ diff y patch. La utilización
+ de la variable P4DIFF para que apunte al verdadero
+ &man.diff.1; puede paliar este problema, o al menos en ciertos casos,
+ puesto sólo funciona con la orden
+ p4 diff. La salida de
+ debe procesarse para que sea de alguna
+ utilidad (la opción de
+ producirá diffs
+ unificados que serán más o menos
+ compatibles, pero no esto no incluye ficheros
+ nuevos o borrados. Este script puede serle
+ de utilidad para este proceso necesario:
+ .
+
+
+
+ Añadir o eliminar ficheros
+
+ La integración de una rama hará que
+ se añadan ficheros existentes en el servidor en su
+ árbol, pero quizás sea necesario añadir
+ nuevos ficheros o eliminar alguno de los ya existentes.
+ Para añadir ficheros no tiene más que
+ crear el fichero y ejecutar
+ p4 add de la siguiente forma:
+
+ &prompt.user; p4 add nombredefichero
+
+ Si quiere añadir un árbol completo de ficheros
+ ejecute:
+
+ &prompt.user; find . -type f |xargs p4 add
+
+ Al ejecutar p4 submit se copiarán los
+ ficheros al depósito del servidor.
+ Es muy importante añadir
+ sólo ficheros y no directorios. Si se añade
+ explícitamente un
+ directorio, Perforce lo tratará como
+ fichero, lo cual seguramente no es lo que usted tenía
+ previsto.
+
+ Borrar un fichero es igualmente sencillo mediante
+ p4 delete:
+
+ &prompt.user; p4 delete nombredefichero
+
+ Esta orden marcará el fichero para que sea borrado del
+ depósito la siguiente vez que se ejecute una
+ entrega.
+ También borrará la copia local del fichero, así que
+ sea cauteloso cuando la use.
+
+ Por supuesto que borrar un fichero no significa que se borre
+ realmente del repositorio.
+
+ Los ficheros borrados se pueden resucitar
+ mediante la sincronización con una versión
+ previa. La única forma de borrar de forma permanente un
+ fichero es mediante la orden p4 obliterat.
+ Dicha orden es irreversible y costosa, así que sólo
+ está al alcance del personal que administra
+ el repositorio.
+
+
+
+ El trabajo con diffs
+
+ Algunas veces puede ser necesario aplicar un diff
+ al árbol
+ de Perfoce que provenga de otra
+ aplicación. Si se trata de un diff
+ de gran tamaño y que afecta a muchos ficheros, puede resultar
+ tedioso ejecutar manualmente p4 edit sobre cada
+ fichero. Hay un truco para hacerlo de una forma más sencilla.
+ En primer lugar, asegúrese de que no hay ficheros abiertos en su
+ cliente y de que su árbol está sincronizado y actualizado a la
+ última versión. A continuación aplique
+ sus cambios mediante las herramientas habituales, y forzando los
+ permisos de los ficheros en caso de ser necesario. Después
+ ejecute lo siguiente:
+
+ &prompt.user; p4 diff -se ... |xargs p4 edit
+&prompt.user; p4 diff -sd ... |xargs p4 delete
+&prompt.user; find . -type f |xargs p4 add
+
+ La primera orden le dice a
+ Perforce que busque los ficheros que
+ han cambiado, incluso si no están abiertos. La segunda
+ orden le dice a Perforce que busque
+ los ficheros que no existen en la máquina local pero que
+ sí están en el servidor. La tercera orden intenta
+ añadir todos los ficheros que están en local. Es
+ un método de fuerza bruta, pero funciona bien porque
+ Perforce sólo añadirá
+ los ficheros que le resulten desconocidos. El resultado de estas
+ órdenes es un conjunto de ficheros abiertos para edición,
+ borrado o para ser añadidos, según el caso. Hecho
+ esto solo nos queda ejecutar
+ p4 submit para entregar los cambios.
+
+
+
+ Cambiar nombres de ficheros
+
+ Perforce no dispone de una forma
+ predefinida de cambiar nombres a ficheros o de moverlos a otra parte
+ del árbol. Si se copia el fichero en
+ cuestión a una nueva ubicación mediante p4
+ add, y posteriormente p4
+ delete en la versión anterior, se obtiene
+ algo muy parecido a lo que se quería, pero tiene el
+ inconveniente de que no se preserva el historial de cambios
+ de ese fichero. Esto puede perjudicar futuras integraciones entre
+ padres e hijos. Hay otro método más recomendable,
+ que consiste en efectuar una integración dentro del
+ mismo árbol y de una sola vez. Veamos un ejemplo:
+
+ &prompt.user; p4 integrate -i ficheroprevioficheronuevo
+&prompt.user; p4 resolve
+&prompt.user; p4 delete ficheroprevio
+&prompt.user; p4 submit
+
+ La integración fuerza a Perforce a
+ mantener un registro de las relaciones entre los nombres antiguos y
+ los nuevos, lo cual será muy útil en futuras
+ integraciones. La opción
+ indica que se trata de una integración
+ sin base, es decir, que no existe un historial de
+ ramas al que recurrir en la integración. Este
+ parámetro tiene sentido en el presente ejemplo, pero
+ no debería utilizarse en integraciones basadas en ramas.
+
+
+ Interacciones entre el CVS de &os; y Perforce
+
+ Los repositorios de
+ Perforce y de CVS de &os; están
+ completamente separados. No obstante, los cambios que se producen
+ en CVS se reflejan casi en tiempo real en
+ Perforce. Cada 2 minutos se pregunta al
+ servidor de CVS sobre cambios realizados en la rama HEAD, y dichos
+ cambios se entregan a Perforce dentro del
+ árbol //depot/vendor/freebsd/....
+ De este modo este árbol permite la ramificación y
+ la integración de proyectos derivados. Cualquier proyecto
+ que implique la modificación del código fuente de
+ &os; debería tener este árbol como su rama padre
+ (o rama abuela, dependiendo
+ de las necesidades concretas de cada proyecto), y deberían tener
+ lugar integraciones periódicas y sincronizaciones para que el
+ árbol esté en consonancia con el desarrollo de &os; y
+ evitar conflictos en la medida de lo posible.
+
+ El puente entre CVS y Perforce es
+ de un sólo sentido; los cambios del CVS se reflejarán en
+ Perforce, pero los cambios en
+ Perforce no se reflejarán en el CVS.
+ Si es necesario, se pueden exportar partes del repositorio de
+ Perforce al
+ CVSup y que así se puedan distribuir.
+ Por favor, contacte con los
+ administradores de Perforce de &os; si
+ ese es su caso.
+
+
+
+ Funcionamiento sin conexión de red
+
+ Uno de los inconvenientes de Perforce es
+ que supone que siempre es posible acceder al servidor a través
+ de la red. La mayoría de los estados, el historial y los
+ metadatos se almacenan en el servidor y no existe mecanismo alguno
+ para replicar el servidor como los hay en
+ CVS/CVSup. Es posible
+ ejecutar un servidor proxy, pero solamente ayuda un poco si se quiere
+ trabajar sin conexión al servidor.
+
+ La mejor forma de trabajar sin conexión de red es
+ comprobando que el cliente no tiene ningún fichero abierto y
+ que está totalmente sincronizado antes de dejar de estar
+ conectado.
+ Cuando se edite un fichero se deberán cambiar manualmente
+ los permisos a lectura-escritura. Cuando vuelva a estar
+ conectado ejecute la orden que se mostraba
+ en la para
+ identificar automáticamente los ficheros que se han editado,
+ añadido o eliminado.
+ Es bastante común encontrarse con la sorpresa de que
+ Perforce ha sobreescrito un fichero
+ modificado en local que no se abrió en modo edición,
+ así que tenga especial cuidado con esto.
+
+
+
+ Consideraciones finales para el Google Summer of Code
+
+ La mayoría de los proyectos de &os; dentro del programa
+ Google Summer of Code están en
+ //depot/projects/soc2005/nombre_del_proyecto/...
+ en el servidor &os; de Perforce.
+
+ Entre las responsabilidades del mentor del proyecto
+ está seleccionar un nombre adecuado para dicho proyecto y
+ hacer que el estudiante sea capaz de trabajar con
+ Perforce.
+
+ El acceso al servidor &os; de
+ Perforce no implica pasar a ser miembro
+ de la comunidad de committers del CVS de &os;, aunque animamos
+ de todo corazón a todos los estudiantes que consideren la
+ posibilidad de unirse al proyecto cuando estén listos
+ para ello.
+
+