A veces, las actualizaciones de paquetes de MELPA pueden romper parte de emacs y, cuando eso ocurra, me gustaría poder volver a usar una versión anterior del paquete.
En este momento, puedo hacerlo de dos maneras:
He configurado emacs para eliminar archivos moviéndome a la papelera y cuando actualizo un paquete, la versión anterior se descarta. Puedo recuperar la versión anterior y reemplazarla
~/.emacs.d/elpa
.Vaya al repositorio de github del paquete que rompió la funcionalidad, busque una versión anterior del paquete, reemplace la que está
~/.emacs.d/elpa
con la de gitub, vuelva a compilar los archivos.
Ambas formas implican mucho trabajo manual para mover las cosas. ¿Existe una manera más fácil (preferiblemente automática) de degradar los paquetes instalados desde MELPA?
fuente
M-x package-install-file
. También hay otras formas de administrar paquetes además de ELPA / package.el, como el-get y quelpa , parece que pueden usarse sin ELPA, tal vez puedan hacer lo que quieras.M-x report-emacs-bug
(también es para solicitudes de mejora).Respuestas:
Cuando actualice sus paquetes a través de la
M-x list-packages
interfaz, después de la instalación exitosa del paquete, se le preguntará si desea eliminar el paquete anterior. No los elimine para que permanezcan en su lugar y luego pueda eliminar el paquete más nuevo a través de esta interfaz.Mi lista de paquetes actual muestra 4 versiones de magit instaladas en mi árbol de directorios ~ / .emacs.d / elpa /.
Puede limpiar versiones anteriores más tarde con la clave
~
(package-menu-mark-obsolete-for-deletion) para marcar todos los paquetes obsoletos. Para eliminar una cierta versión anterior, muévase a su línea y presioned
para marcarlas para su eliminación. Después de marcar los paquetes que usaríax
para ejecutar las acciones como de costumbre.En Emacs 25, la marca de todos los paquetes para la
U
funcionalidad pgrade establece automáticamente la eliminación de todos los paquetes antiguos y no solicita confirmación después de la instalación. Debe buscar líneas que comiencen con una "D" mayúscula, que simplemente puede desmarcar (mejor con la siguiente macro)Escriba la tecla o acorde a la izquierda del guión de las siguientes líneas.
Si no hay más coincidencias para la búsqueda, la macro hará sonar la campana y se detendrá, por lo que podría
C-u 0 <F4>
desmarcar todos los paquetes marcados para su eliminación. Después de esto, puedex
ejecutar las instalaciones.La función que he declarado que ha cambiado en mi comentario tiene que cambiarse de una manera que aún no puedo comprender, ya que es importante que el último bloque (cond) tenga éxito para que no se repita sin parar.
fuente
(t (package-menu-mark-delete))
líneaspackage-menu--mark-upgrades-1
para que la primera línea sea una prueba para una variable de configuración o algo que regresenil
cuando no desee eliminar paquetes antiguos de inmediatopackage.el
la respuesta original, para que pueda aceptar la respuesta? GraciasLa "opción nuclear", por así decirlo, sería para deshacerse
package.el
por completo y en su lugar utilizar el gestor de paquetes que escribí,straight.el
. La ventaja sería questraight.el
instala paquetes clonando sus repositorios Git, lo que hace que sea trivial usar la versión que desee. Además,straight.el
proporciona funcionalidad para tratar con archivos de bloqueo de revisión, que le permiten registrar el estado exacto de la configuración de administración de paquetes hasta el más mínimo detalle. Luego, en el caso de una emergencia, simplemente puede revertir todos los paquetes a sus versiones conocidas.Este tipo de operaciones son, en general, imposibles con
package.el
, y siempre serán imposibles, debido al diseño general.En respuesta a su deseo de evitar comprometerse cada vez que actualice sus paquetes, esto no es necesario con
straight.el
. Me gustaría recomendar escribir un fichero de bloqueo de versión y la comisión de ese cada vez que actualice sus paquetes, ya que hace que sea imposible conseguir nunca en un estado en el que la configuración de Emacs se rompe después de una actualización y que no saben cómo revertir. Pero no tiene que hacer esto, si le gusta vivir la vida al límite.fuente
Encuentro una manera fácil de degradar: administrar su propio archivo melpa.
make
para construir el paquete degradadopackage-archives
lista.package-pinned-packages
para restringir el archivo desde donde se debe descargar el paquete.fuente
Mucha gente elige no enviar paquetes ELPA al control de versiones, pero este es un ejemplo de por qué creo que debería hacerlo.
Revertir cualquier cosa es trivial si todo está comprometido.
Dependiendo del estado de los paquetes ELPA aguas arriba es un riesgo.
fuente