Como cometer um arquivo modificado se ele não foi bloqueado pelo RCS antecipadamente (e estou usando o modo Emacs VC)?

5

Às vezes, um arquivo sob o controle do RCS é modificado enquanto não está bloqueado (= check out para modificação por mim).

(Nesses casos, foi realmente definido como somente leitura pelo RCS para evitar tais modificações; mas pode ter sido um arquivo de configuração em / etc / que foi modificado porque eu estava atualizando pacotes.)

E, em seguida, normalmente quero cometer as novas modificações, como se a última revisão tivesse sido verificada antes da modificação.

Como é melhor proceder então?

Eu costumo usar o Emacs VC, e faço C-x v v para fazer o check-out e entrar. Mas se o arquivo não foi verificado de antemão, isso falhará. Existe uma maneira de proceder especificamente a partir do Emacs? Mas as respostas com comandos shell também são bem-vindas.

    
por imz -- Ivan Zakharyaschev 04.04.2014 / 15:23

3 respostas

6

Na verdade, é muito mais simples. Você pode fazer apenas rcs -l para bloqueá-lo e tentar verificá-lo novamente.

Assumo que a situação em que você fez a pergunta foi algo assim:

$ echo v1 >foo
$ ci -u -t-"Test file." foo
$ chmod u+w foo
$ echo v2 >foo

Nesse momento, tanto ci quanto co falharão:

$ co -l foo
foo,v  -->  foo
revision 1.1 (locked)
writable foo exists; remove it? [ny](n): 

$ ci -u foo
foo,v  <--  foo
ci: foo,v: no lock set by username

É assim que você pode bloquear o arquivo e confirmar as alterações:

$ rcs -l foo
RCS file: foo,v
1.1 locked
done
$ ci -u -m"Second revision." foo
foo,v  <--  foo
new revision: 1.2; previous revision: 1.1
done
    
por 05.04.2014 / 21:44
1

Um modo especial de operação do RCS, que é mencionado no manual do Emacs (info) na seção VC, pode ser uma opção de como superar tais problemas:

32.1.12.2 Options for RCS and SCCS

By default, RCS uses locking to coordinate the activities of several users, but there is a mode called "non-strict locking" in which you can check-in changes without locking the file first. Use rcs -U to switch to non-strict locking for a particular file, see the rcs manual page for details.

Mas, claro, pode-se não querer mudar para o modo não estrito.

    
por 06.04.2014 / 09:38
0

Os comandos básicos do Unix podem ser usados para atingir o objetivo. Então, na verdade, não é um grande problema.

  1. copiar / mover o arquivo modificado para fora do caminho do RCS ( cp FILE FILE.new , mv FILE FILE.new ou C-x C-w FILE.new no Emacs);
  2. confira (e bloqueie) a última revisão do RCS ( co -l FILE ou no Emacs: C-x C-f FILE - abra novamente e C-x v v );
  3. sobrescreva-o com as novas modificações;
  4. confirme-o ( ci ... ou no Emacs: C-x v v ).

(Além dessa forma básica, outras formas mais simples de atingir o objetivo também podem ser interessantes, ou seja, com uma opção específica para esse caso.)

    
por 05.04.2014 / 21:32

Tags