Às vezes, as atualizações de pacotes do MELPA podem quebrar parte do emacs e, quando isso acontece, eu gostaria de poder voltar a usar uma versão mais antiga do pacote.
No momento, eu posso fazer isso de duas maneiras:
Eu configurei o emacs para excluir arquivos movendo-os para o lixo e, quando atualizo um pacote, a versão mais antiga é lixeira. Posso recuperar a versão mais antiga e substituir a
~/.emacs.d/elpa
.Vá para o repositório github do pacote que quebrou a funcionalidade, busque uma versão mais antiga do pacote, substitua a
~/.emacs.d/elpa
do gitub e recompile os arquivos.
Ambas as formas envolvem muito trabalho manual movendo as coisas. Existe uma maneira mais fácil (de preferência automática) de fazer o downgrade dos pacotes instalados no MELPA?
fonte
M-x package-install-file
. Também existem outras maneiras de gerenciar pacotes além do ELPA / package.el, como el-get e quelpa , eles parecem poder ser usados sem o ELPA, talvez eles possam fazer o que você deseja.M-x report-emacs-bug
(também é para solicitações de aprimoramento).Respostas:
Quando você atualiza seus pacotes pela
M-x list-packages
interface, após a instalação bem-sucedida do pacote, você será perguntado se deseja remover o pacote antigo. Não os exclua para que eles permaneçam no lugar e, em seguida, você poderá remover o pacote mais recente por essa interface.Minha lista de pacotes atual mostra 4 versões do magit instaladas na minha árvore de diretórios ~ / .emacs.d / elpa /.
Você pode limpar as versões antigas posteriormente com a tecla
~
(marca do menu pacote obsoleta para exclusão) para marcar todos os pacotes obsoletos. Para excluir uma determinada versão antiga, vá para sua linha e pressioned
para marcá-las para exclusão. Depois de marcar os pacotes, você usariax
para executar as ações como de costume.No Emacs 25, a marcação de todos os pacotes para a
U
funcionalidade pgrade define automaticamente todos os pacotes antigos para exclusão e não solicita confirmação após a instalação. Você precisa procurar linhas que começam com um "D" maiúsculo, que pode ser desmarcado (melhor com a macro a seguir)Digite a tecla ou o acorde à esquerda do traço nas seguintes linhas.
Se não houver mais correspondências para a pesquisa, a macro tocará a campainha e será interrompida. Assim, você poderá
C-u 0 <F4>
desmarcar todos os pacotes marcados para exclusão. Depois disso, você podex
executar as instalações.A função que declarei ser alterada no meu comentário deve ser alterada de uma maneira que ainda não consigo entender, pois é importante que o último bloco (cond) seja bem-sucedido para não fazer loop infinito.
fonte
(t (package-menu-mark-delete))
linhaspackage-menu--mark-upgrades-1
para que a primeira linha seja um teste para uma variável de configuração ou algo que retornenil
quando você não deseja excluir pacotes antigos imediatamentepackage.el
resposta original, para que eu possa aceitar a resposta? ObrigadoA "opção nuclear", por assim dizer, seria abandonar
package.el
completamente e usar o gerenciador de pacotes que escrevistraight.el
,. A vantagem seria questraight.el
instala pacotes clonando seus repositórios Git, tornando fácil o uso da versão que você desejar. Além disso,straight.el
fornece funcionalidade para lidar com arquivos de bloqueio de revisão, que permitem registrar o estado exato da sua configuração de gerenciamento de pacotes nos mínimos detalhes. Então, em caso de emergência, você pode simplesmente reverter todos os pacotes para suas versões em bom estado.Geralmente, esses tipos de operações são impossíveis
package.el
e sempre serão impossíveis devido ao design geral.Em resposta ao seu desejo de evitar fazer um commit toda vez que você atualizar seus pacotes, isso não é necessário
straight.el
. Eu recomendaria escrever uma versão lockfile e confirmar isso toda vez que você atualizar seus pacotes, pois isso torna impossível entrar em um estado em que sua configuração do Emacs é interrompida após uma atualização e você não sabe como reverter. Mas você não precisa fazer isso, se gosta de viver a vida no limite.fonte
Eu acho uma maneira fácil de fazer o downgrade: gerenciar seu próprio arquivo melpa.
make
para criar o pacote desclassificadopackage-archives
lista.package-pinned-packages
para restringir o arquivo de onde o pacote deve ser baixado.fonte
Muitas pessoas optam por não comprometer pacotes ELPA para controle de versão, mas este é um exemplo de por que acredito que você deve fazê-lo.
Reverter qualquer coisa é trivial se tudo estiver comprometido.
Dependendo do estado dos pacotes ELPA upstream, há um risco.
fonte