CVS su OS X Mavericks


17

Apparentemente, Apple ha rimosso CVS sotto gli OS X 10.9 Mavericks devtools (e sì, è davvero sparito). Per chi non lo sapesse, CVS è il Concurrent Version System , uno strumento per mantenere aggiornati i file tra diversi computer e utenti (sviluppatori).

Ho alcuni progetti legacy che lo richiedono ancora (no, non posso cambiarlo per usare SVN, tanto meno git).

Qual è il posto migliore per ottenere una versione che funziona con OS X Mavericks?


Hai verificato se è ancora in /usr/bin/cvs?
Nohillside

Sì, è davvero andato.
Andrew Jaffe,

Risposte:


16

Il modo più semplice per la maggior parte dei programmi è l'installazione con un gestore di pacchetti come Macports, Homebrew o Fink. I portatori avranno risolto i problemi relativi al porting del codice su OSX, quindi dovrebbe essere semplice come segue (per Macports )

  1. Installa macports, scarica il file .pkg ed eseguilo
  2. Installa Xcode e i suoi strumenti da riga di comando
  3. Aggiungi /opt/local/binal tuo percorso: il programma di installazione tenta di farlo per te, quindi probabilmente devi solo controllare
  4. Installa la porta sudo port install cvs
  5. Esegui cvs con il percorso completo /opt/local/bin/cvso usa il PERCORSO

16

Un gestore di pacchetti unix-ish è chiaramente la strada da percorrere. Mi sono trasferito da Fink e Macports a homebrew , che ha una ricetta per cvs:

brew install cvs

Per completezza storica, è in precedenza era necessario utilizzare il (un po 'difficile da trovare) ricetta per cvs : brew install homebrew/dupes/cvs.

Dopo solo test molto minimi, sembra funzionare.


3
Ho provato il comando leggermente più breve brew install cvs(OS 10.9, Homebrew 0.9.5); ha installato CVS 1.12.13, che sembra funzionare.
nknight

3
Sì, il comando di nknight è quello giusto. Il comando è cambiato perché la formula CVS è passata da homebrew-dupes al core di Homebrew nel novembre 2013.
herzbube

2

modifica: Come osservato nei commenti git richiede un client cvs funzionante che rende questo approccio solo un buon livello di interoperabilità ma non una soluzione al problema di un client CSV mancante.

Un'altra opzione sarebbe usare git come client cvs e spingere direttamente sul server CVS.

A seconda delle tue esigenze, questo potrebbe essere sufficiente cvs interop + un vantaggio dell'utilizzo di git localmente.


Non avevo idea che tu potessi farlo. Molto bello!
Andrew Jaffe,

2
Ho provato questo, ma git-cvsimportsembra richiedere un client CVS, quindi è un problema di pollo e uova.
David Moles,

1
Grazie @DavidMoles. Ho modificato la risposta per assicurarmi che tutti siano a conoscenza di questa limitazione. Non l'ho provato prima.
OliverS,

0

CVSNT funziona su Mac OS X 10.9 e supporta la codifica HQX delle risorse, ecc. Beta per 10.9 è disponibile qui: http://march-hare.com/cvspro/#downcvsnt

Se in precedenza hai utilizzato Mac CVS ​​X, questa (CVSNT) è la "riga di comando" precedentemente inclusa.


1
Benvenuti nel sito. Dai un'occhiata a apple.stackexchange.com/help/behavior , in particolare la parte relativa all'auto-promozione.
Nohillside

Sono abbastanza sicuro che il mio commento sia pertinente alla domanda posta e che la mia affiliazione al prodotto sia ben nota e chiaramente identificata (ad esempio: il mio avatar è il logo dell'azienda) e sono membro del progetto Concurrent Versions System .
Arthur Barrett,

0

Ho appena avuto lo stesso problema, e un grosso problema con Macports, Fink ecc. È che hanno molte altre dipendenze che sono confuse e inutili se tutto ciò di cui hai bisogno è un singolo strumento come cvs. Nel mio caso, il tentativo di installarlo utilizzando macports ha portato a un popup che mi chiedeva di installare un compilatore Java (?!) E che dovevano essere creati dozzine di altri pacchetti, quindi ho subito tirato fuori espulsione :)

Se tutto ciò di cui hai bisogno è cvs, costruirlo da solo è facile e più pulito e il binario risultante si integra con tutte le librerie esistenti ecc. Sul computer. Hai bisogno di Xcode installato e dei suoi strumenti da riga di comando, ma se hai bisogno di cvs, sono sicuro che lo hai già installato.

Ottieni il codice sorgente cvs da:

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

decomprimilo in una cartella, inserisci la cartella ed esegui ./configure

Quindi (purtroppo) è necessario modificare i file in src / e lib / per rinominare la loro funzione getline in, diciamo, getlineX, perché getline si scontra con una funzione libc. Potrei fare una patch di questo e metterlo da qualche parte immagino ..

Dopodiché, fai "make" e otterrai un binario in src / cvs che puoi mettere nella tua cartella ~ / bin o ovunque, e assicurati che i tuoi PATH puntino lì.


> Potrei fare una patch di questo e metterlo da qualche parte immagino. Sarebbe bello e vale la pena inviarlo di nuovo. (Non urgente per me, in genere ho buona fortuna con Homebrew.)
Flash Sheridan,

0

Seguendo la risposta di BjornW con una patch.

Dopo aver scaricato e annullato l'archiviazione della fonte da: http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Copia la patch qui sotto in un file, ad esempio cvs-1.11.23.patch, quindi applica la patch con:

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

Quindi compilare secondo READMEle istruzioni del file cvs-1.11.23 :

cd cvs-1.11.23
./configure
make
make install

Ecco la patch:

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));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.