CVS en OS X Mavericks

17

Aparentemente, Apple ha eliminado CVS bajo las herramientas de desarrollo Mavericks OS X 10.9 (y sí, realmente se ha ido). Para los no iniciados, CVS es el sistema de versión concurrente , una herramienta para mantener actualizados los archivos entre diferentes máquinas y usuarios (desarrolladores).

Tengo algunos proyectos heredados que aún lo requieren (no, no puedo cambiarlo para usar SVN, mucho menos git).

¿Dónde está el mejor lugar para obtener una versión que funcione con OS X Mavericks?

Andrew Jaffe
fuente
¿Verificaste si todavía está adentro /usr/bin/cvs?
nohillside
Sí, realmente se ha ido.
Andrew Jaffe el

Respuestas:

16

La forma más fácil para la mayoría de los programas es instalar con un administrador de paquetes como Macports, Homebrew o Fink. Los porteros habrán resuelto los problemas relacionados con la transferencia del código a OSX, por lo que debería ser tan simple como se indica a continuación (para Macports )

  1. Instale macports, descargue el archivo .pkg y ejecútelo
  2. Instale Xcode y sus herramientas de línea de comando
  3. Agregue /opt/local/bina su ruta: el instalador intenta hacer esto por usted, por lo que probablemente solo necesite verificar
  4. Instalar el puerto sudo port install cvs
  5. Ejecute cvs con la ruta completa /opt/local/bin/cvso use su RUTA
usuario151019
fuente
16

Un administrador de paquetes unix-ish es claramente el camino a seguir. Me mudé de fink y Macports a homebrew , que tiene una receta para cvs:

brew install cvs

Para completar histórico, que antiguamente tenía que utilizar el (un poco difícil de encontrar) receta para cvs : brew install homebrew/dupes/cvs.

Después de pruebas muy mínimas, parece funcionar.

Andrew Jaffe
fuente
3
Probé el comando un poco más corto brew install cvs(OS 10.9, Homebrew 0.9.5); instaló CVS 1.12.13, que parece funcionar.
nknight
3
Sí, el comando de nknight es el correcto. El comando ha cambiado porque la fórmula CVS se ha movido de homebrew-dupes a Homebrew core en noviembre de 2013.
herzbube
2

editar: Como se observó en los comentarios, git requiere un cliente cvs que funcione, lo que hace que este enfoque sea solo una buena capa de interoperabilidad, pero no una solución al problema de un cliente csv perdido.

Otra opción sería usar git como cliente cvs y enviar directamente al servidor CVS.

Dependiendo de sus necesidades, esto podría ser suficiente cvs interop + una ventaja de usar git localmente.

OliverS
fuente
No tenía idea de que pudieras hacer eso. ¡Muy genial!
Andrew Jaffe
2
Intenté esto, pero git-cvsimportparece requerir un cliente CVS, por lo que es un problema de huevo y gallina.
David Moles
1
Gracias @DavidMoles. He cambiado la respuesta para asegurarme de que todos conozcan esta limitación. No lo intenté yo mismo antes.
OliverS
0

CVSNT se ejecuta en Mac OS X 10.9 y admite la codificación HQX de recursos, etc. La versión beta de 10.9 está disponible aquí: http://march-hare.com/cvspro/#downcvsnt

Si anteriormente utilizó Mac CVS ​​X, entonces esta (CVSNT) es la 'línea de comando' que se incluyó anteriormente.

Arthur Barrett
fuente
1
Bienvenido al sitio. Eche un vistazo a apple.stackexchange.com/help/behavior , especialmente la parte sobre autopromoción.
nohillside
Estoy bastante seguro de que mi comentario fue relevante para la pregunta formulada, y mi afiliación con el producto es bien conocida y está claramente identificada (por ejemplo: mi avatar es el logotipo de la compañía), y soy miembro del proyecto del Sistema de Versiones Simultáneas .
Arthur Barrett
0

Acabo de tener este mismo problema, y ​​un gran problema con Macports, Fink, etc. es que atraen muchas otras dependencias que son confusas e innecesarias si todo lo que necesita es una herramienta única como cvs. En mi caso, tratar de instalarlo usando macports resultó en una ventana emergente que me pidió que instalara un compilador de Java (?!) Y se tuvieron que construir docenas de otros paquetes, así que rápidamente saqué la expulsión :)

Si todo lo que necesita son cvs, solo construirlo usted mismo es fácil y más limpio y el binario resultante se integra con todas las bibliotecas existentes, etc. en la computadora. Necesita Xcode instalado y sus herramientas de línea de comandos, pero si necesita cvs, estoy seguro de que ya lo tiene instalado.

Obtenga el código fuente de cvs de:

http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Descomprímalo en una carpeta, ingrese la carpeta y ejecute ./configure

Entonces (desafortunadamente) necesita editar los archivos en src / y lib / para cambiar el nombre de su función getline a, digamos, getlineX, porque getline choca con una función libc. Podría hacer un parche de esto y ponerlo en algún lugar, supongo ...

Después de esto, haga "make" y obtendrá un binario en src / cvs que puede poner en su carpeta ~ / bin o donde sea, y asegúrese de que su PATH apunte allí.

BjornW
fuente
> Podría hacer un parche de esto y ponerlo en algún lugar, supongo. Eso sería bueno, y vale la pena enviarlo de vuelta. (No es urgente para mí, generalmente tengo buena suerte con Homebrew.)
Flash Sheridan
0

Continuando con la respuesta de BjornW con un parche.

Después de descargar y desarchivar la fuente de: http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Copie el parche a continuación en algún archivo, por ejemplo cvs-1.11.23.patch, luego aplique el parche con:

patch -d cvs-1.11.23 -p1 < cvs-1.11.23.patch

Luego compile según las READMEinstrucciones del archivo cvs-1.11.23 :

cd cvs-1.11.23
./configure
make
make install

Aquí está el parche:

diff -r -u cvs-1.11.23/lib/getline.c cvs-1.11.23-osx/lib/getline.c
--- cvs-1.11.23/lib/getline.c   2005-04-05 06:46:05.000000000 +1000
+++ cvs-1.11.23-osx/lib/getline.c       2017-01-31 12:04:19.000000000 +1100
@@ -154,13 +154,10 @@
   return ret;
 }

-int
-getline (lineptr, n, stream)
-     char **lineptr;
-     size_t *n;
-     FILE *stream;
+ssize_t
+     getline(char ** restrict lineptr, size_t * restrict linecapp, FILE *     restrict stream)
 {
-  return getstr (lineptr, n, stream, '\n', 0, GETLINE_NO_LIMIT);
+  return (ssize_t)getstr (lineptr, linecapp, stream, '\n', 0, GETLINE_NO_LIMIT);
 }

 int
diff -r -u cvs-1.11.23/lib/getline.h cvs-1.11.23-osx/lib/getline.h
--- cvs-1.11.23/lib/getline.h   2005-04-05 06:46:05.000000000 +1000
+++ cvs-1.11.23-osx/lib/getline.h       2017-01-31 12:03:21.000000000 +1100
@@ -11,8 +11,8 @@    

 #define GETLINE_NO_LIMIT -1

-int
-  getline __PROTO ((char **_lineptr, size_t *_n, FILE *_stream));
+ssize_t
+  getline(char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream);
 int
   getline_safe __PROTO ((char **_lineptr, size_t *_n, FILE *_stream,
                      int limit));
usuario2067021
fuente