CVS no OS X Mavericks


17

Aparentemente, a Apple removeu o CVS sob os devtools do OS X 10.9 Mavericks (e sim, ele realmente se foi). Para os não iniciados, o CVS é ​​o Concurrent Version System , uma ferramenta para manter os arquivos atualizados entre diferentes máquinas e usuários (desenvolvedores).

Eu tenho alguns projetos herdados que ainda o exigem (não, não posso alterá-lo para usar o SVN, muito menos o git).

Onde é o melhor lugar para obter uma versão que funcione no OS X Mavericks?


Você checou se ainda está dentro /usr/bin/cvs?
Nohillside

Sim, realmente se foi.
Andrew Jaffe

Respostas:


16

A maneira mais fácil para a maioria dos programas é instalar com um gerenciador de pacotes como Macports, Homebrew ou Fink. Os porteiros terão resolvido os problemas sobre a portabilidade do código para o OSX, por isso deve ser tão simples quanto a seguir (para Macports )

  1. Instale macports, baixe o arquivo .pkg e execute-o
  2. Instale o Xcode e suas ferramentas de linha de comando
  3. Adicione /opt/local/binao seu caminho - o instalador tenta fazer isso por você, então você provavelmente só precisa verificar
  4. Instale a porta sudo port install cvs
  5. Execute cvs com o caminho completo /opt/local/bin/cvsou use seu PATH

16

Um gerenciador de pacotes unix-ish é claramente o caminho a percorrer. Mudei de fink e Macports para homebrew , que tem uma receita para cvs:

brew install cvs

Para completar histórico, você teve anteriormente para usar o (um pouco difícil de encontrar) receita para o cvs : brew install homebrew/dupes/cvs.

Após apenas testes muito mínimos, parece funcionar.


3
Eu tentei o comando um pouco mais curto brew install cvs(OS 10.9, Homebrew 0.9.5); instalou o CVS 1.12.13, que parece funcionar.
Nknight

3
Sim, o comando do nknight é o correto. O comando foi alterado porque a fórmula CVS mudou de fermentação home-tolos para o núcleo Homebrew em Novembro de 2013.
herzbube

2

edit: Como observado nos comentários, o git requer um cliente cvs que funcione, o que torna essa abordagem apenas uma boa camada de interoperabilidade, mas não uma solução para o problema de um cliente csv ausente.

Outra opção seria usar o git como um cliente cvs e enviar diretamente para o servidor CVS.

Dependendo das suas necessidades, isso pode ser suficiente cvs interop + uma vantagem de usar o git localmente.


Eu não tinha ideia de que você poderia fazer isso. Muito legal!
Andrew Jaffe

2
Eu tentei isso, mas git-cvsimportparece exigir um cliente CVS, por isso é um problema de galinha e ovo.
David Moles

1
Obrigado @DavidMoles. Alterei a resposta para garantir que todos estejam cientes dessa limitação. Eu nunca tentei antes.
precisa saber é

0

O CVSNT é executado no Mac OS X 10.9 e suporta a codificação de recursos HQX etc. O Beta para 10.9 está disponível aqui: http://march-hare.com/cvspro/#downcvsnt

Se você usou o Mac CVS ​​X anteriormente, este (CVSNT) é a 'linha de comando' incluída anteriormente.


1
Bem vindo ao site. Consulte apple.stackexchange.com/help/behavior , especialmente a parte sobre autopromoção.
nohillside

Tenho certeza de que meu comentário foi relevante para a pergunta, e minha afiliação ao produto é bem conhecida e claramente identificada (por exemplo: meu avatar é o logotipo da empresa) e sou membro do projeto Concurrent Versions System .
Arthur Barrett

0

Acabei de ter esse mesmo problema, e um grande problema com o Macports, o Fink etc. é que eles geram muitas outras desvantagens, o que é confuso e desnecessário se tudo o que você precisa é de uma única ferramenta como o cvs. No meu caso, tentar instalá-lo usando o macports resultou em um pop-up solicitando a instalação de um compilador java (?!) E dezenas de outros pacotes tiveram que ser construídos para que eu rapidamente puxasse a ejeção :)

Se tudo o que você precisa é cvs, é simples e fácil criar o arquivo e o binário resultante se integra a todas as bibliotecas existentes etc. no computador. Você precisa do Xcode instalado e de suas ferramentas de linha de comando, mas se precisar de cvs, tenho certeza de que já o possui.

Obtenha o código-fonte cvs em:

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

desmarque-o em uma pasta, insira a pasta e execute ./configure

Você (infelizmente) precisa editar os arquivos em src / e lib / para renomear sua função getline em, digamos, getlineX, porque o getline entra em conflito com uma função libc. Eu poderia fazer um patch disso e colocar em algum lugar, eu acho ..

Depois disso, faça "make" e você obterá um binário no src / cvs que você pode colocar na sua pasta ~ / bin ou em qualquer outro lugar, e verifique se o seu PATH aponta para lá.


> Eu poderia fazer um patch disso e colocar em algum lugar, eu acho. Seria bom e vale a pena enviar de volta. (Não é urgente para mim, eu geralmente têm boa sorte com Homebrew.)
o Flash Sheridan

0

Seguindo a resposta de BjornW com um patch.

Depois de baixar e desarquivar a fonte em: http://download.savannah.gnu.org/releases/cvs/source/stable/1.11.23/

Copie o patch abaixo para algum arquivo, digamos cvs-1.11.23.patch, e aplique o patch com:

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

Em seguida, crie conforme as READMEinstruções do arquivo cvs-1.11.23 :

cd cvs-1.11.23
./configure
make
make install

Aqui está o 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));
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.