Emacs: ¿Hay alguna forma de generar un esqueleto ChangeLog desde diff?

Me gustaría automatizar parcialmente la creación de inputs ChangeLog de estilo GNU al trabajar con código fuente en control de versiones. La add-changelog-entry-other-window works con un file a la vez y debe visitar el file para usarlo.

Lo que me gustaría ver en su lugar es tener algún command que tome una salida de diff -u -p (o tener integración con los modos de VC para que pueda procesar svn diff etc.) y crear todas las inputs de esqueleto a la vez.

Por ejemplo, si el svn status muestra

 D file1.c M file2.c A file3.c 

el command crearía

 2009-09-05 My Name <my.email> * file1.c: Removed. * file2.c: WRITE YOUR CHANGES HERE * file3.c: New. 

Mejor aún, si pudiera analizar los files modificados en algunos idiomas hasta cierto punto, por lo que podría ofrecer:

  * file2.c (new_function): New function. (deleted_function): Removed. (changed_function): WRITE YOUR CHANGES HERE 

Encontré esta característica en el manual de Emacs , pero no veo cómo podría aplicarla aquí.

¿Alguna sugerencia? Gracias.

EDITAR: Una respuesta sugirió vc-update-change-log . Desafortunadamente, solo es compatible con CVS y crea inputs ChangeLog al consultar los loggings de VC ya confirmados. Por lo tanto, incluso si soportara svn y otros, sería imposible comprometer los cambios y ChangeLog en el mismo commit.

EDIT2: Aparentemente add-changelog-entry-other-window (Cx 4 a) funciona no solo desde el file visitado sino también desde el file diff que involucra ese file. ( Fuente ) Esto es casi lo que estoy buscando. Esto junto con el loop elisp para iterar a través de todos los trozos debería resolverlo.

No sé de una function que hace esto, pero debería ser fácil de implementar. Básicamente, quieres

  • get los files modificados
  • para cada file, llame a add-change-log
 "Encuentra el file de logging de cambios y agrega una input para hoy y un elemento para este file.
 ARG opcional WHOAMI (prefijo interactivo) no-nil significa aviso para el usuario
 nombre y correo electrónico (almacenado en `add-log-full-name 'y` add-log-mailing-address').

 El segundo arg FILE-NAME es el nombre del file del logging de cambios.
 Si es nulo, use el valor de `change-log-default-name '.

 Third arg OTHER-WINDOW no-nil significa visita en otra window.

 Cuarto arg NEW-ENTRY no-nil significa siempre crear una nueva input en el frente;
 nunca anexar a una input existente.  Opción `add-log-keep-changes-together '
 de lo contrario, afecta si se crea una nueva input.

 La opción `add-log-always-start-new-record 'no-nil significa siempre crear un
 nuevo logging, incluso cuando el último logging se realizó en la misma date y por
 la misma persona.

 El file de logging de cambios puede comenzar con un aviso de copyright y una copy
 aviso de permiso  La primera línea en blanco indica el final de estos
 avisos.

 La date de hoy se calcula de acuerdo con `add-log-time-zone-rule 'si
 no-nil, de lo contrario, en hora local ". 

por lo que el código mágico se verá algo así como

 (apply 'make-magic-change-log-entry changed-files-list) 

y make-magic-change-log-entry simplemente curry la function add-change-log para que el único argumento sea file-name – establezca los demás.

Existe una function vc-update-change-log que genera automáticamente inputs de logging de cambios desde las inputs del logging de control de versiones.

He escrito una function para hacer algo similar a lo que estabas hablando. Puede get el código en http://www.emacswiki.org/emacs/log-edit-fill

diff-add-change-log-entries-other-window está documentado para hacer exactamente lo que mencionas en EDIT2:

 diff-add-change-log-entries-other-window is an interactive compiled Lisp function in `diff-mode.el'. (diff-add-change-log-entries-other-window) Iterate through the current diff and create ChangeLog entries. Ie like `add-change-log-entry-other-window' but applied to all hunks. 

Lamentablemente, no funciona muy bien para, por ejemplo, nuevos files: ni siquiera incluye los nombres de file de dichos files en la input esquemática de logging de cambios.

Puede tener mejor suerte con la secuencia de commands mklog de gcc, que puede get en http://gcc.gnu.org/viewcvs/gcc/trunk/contrib/mklog .