Domanda

Vorrei automatizzare parzialmente la creazione di voci ChangeLog in stile GNU quando si lavora con il codice sorgente nel controllo versione. aggiungi-changelog-entry-other-window funziona con un file alla volta e devi visitare il file per usarlo.

Quello che mi piacerebbe vedere invece è avere un comando che avrebbe un output di diff -u -p (o avere l'integrazione con le modalità VC in modo che possa elaborare svn diff ecc.) e per creare tutte le voci di scheletro contemporaneamente.

Ad esempio, se svn status mostra

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

il comando creerebbe

2009-09-05  My Name <my.email>

      * file1.c: Removed.
      * file2.c: WRITE YOUR CHANGES HERE
      * file3.c: New.

Meglio ancora, se fosse in grado di analizzare i file modificati in alcune lingue in modo da poter offrire:

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

Ho trovato questa funzione nel manuale di Emacs , ma non vedo come potrei applicarlo qui.

Qualche suggerimento? Grazie.

EDIT: una risposta suggerita VC-update-change-log . Sfortunatamente supporta solo CVS e crea voci ChangeLog interrogando i log VC già sottoposti a commit. Pertanto, anche se supportasse svn e altri, sarebbe impossibile eseguire il commit delle modifiche e del ChangeLog nello stesso commit.

EDIT2: Apparentemente add-changelog-entry-other-window (C-x 4 a) funziona non solo dal file visitato, ma anche dal diff hunk che coinvolge quel file. ( Fonte ) Questo è quasi ciò che sto cercando. Questo, insieme al ciclo elisp, per iterare attraverso tutti gli hunk, dovrebbe risolverlo.

È stato utile?

Soluzione

Non conosco una funzione che lo fa, ma dovrebbe essere facile da implementare. Fondamentalmente, vuoi

  • ottieni i file modificati
  • per ogni file, chiama aggiungi-cambia-registro
"Find change log file, and add an entry for today and an item for this file.
Optional arg WHOAMI (interactive prefix) non-nil means prompt for user
name and email (stored in `add-log-full-name' and `add-log-mailing-address').

Second arg FILE-NAME is file name of the change log.
If nil, use the value of `change-log-default-name'.

Third arg OTHER-WINDOW non-nil means visit in other window.

Fourth arg NEW-ENTRY non-nil means always create a new entry at the front;
never append to an existing entry.  Option `add-log-keep-changes-together'
otherwise affects whether a new entry is created.

Option `add-log-always-start-new-record' non-nil means always create a
new record, even when the last record was made on the same date and by
the same person.

The change log file can start with a copyright notice and a copying
permission notice.  The first blank line indicates the end of these
notices.

Today's date is calculated according to `add-log-time-zone-rule' if
non-nil, otherwise in local time."

quindi il codice magico apparirà simile a

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

e make-magic-change-log-entry elimina semplicemente la funzione aggiungi-cambia-log in modo che l'unico argomento sia nome-file : imposti gli altri.

Altri suggerimenti

Esiste una funzione < code> vc-update-change-log che genera automaticamente voci del registro delle modifiche dalle voci del registro di controllo della versione.

diff-add-change-log-entry-other-window è documentato per fare esattamente ciò che hai menzionato in 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.
I.e. like `add-change-log-entry-other-window' but applied to all hunks.

Sfortunatamente, non funziona molto bene per, diciamo, per i nuovi file: non include nemmeno i nomi dei file di tali file nella voce del log delle modifiche scheletrico.

Potresti avere più fortuna con lo script mklog di gcc, che puoi ottenere da http :. //gcc.gnu.org/viewcvs/gcc/trunk/contrib/mklog

Ho scritto una funzione per fare qualcosa di simile a quello di cui stavi parlando. Puoi ottenere il codice su http://www.emacswiki.org/emacs/log- edit-riempimento

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top