2009-05-05 6 views
4

Je voudrais automatiser partiellement la création d'entrées ChangeLog de style GNU lorsque je travaille avec du code source dans le contrôle de version. Le add-changelog-entry-other-window fonctionne avec un fichier à la fois et vous devez visiter le fichier pour l'utiliser. Ce que je voudrais voir à la place est d'avoir une commande qui prendrait une sortie de diff -u -p (ou aurait une intégration avec les modes VC pour qu'il puisse traiter svn diff etc.) et de créer toutes les entrées squelette en une fois.Emacs: Y at-il un moyen de générer un ChangeLog squelette de diff?

Par exemple, si svn status montre

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

la commande créerait

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

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

Mieux encore, si l'on pouvait analyser les fichiers modifiés dans certaines langues dans une certaine mesure il pourrait offrir:

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

J'ai trouvé this feature in Emacs manual, mais je n'ai pas trouvé Je ne vois pas comment je pourrais l'appliquer ici.

Des suggestions? Merci.

EDIT: Une réponse suggérée vc-update-change-log. Malheureusement, il ne prend en charge que CVS et crée des entrées ChangeLog en interrogeant les journaux VC déjà validés. Ainsi, même s'il supportait svn et les autres, il serait impossible de valider les changements et le ChangeLog dans le même commit.

EDIT2: Apparemment, add-changelog-entry-other-window (C-x 4 a) fonctionne non seulement à partir du fichier visité, mais aussi à partir de diff qui concerne ce fichier. (Source) C'est presque ce que je cherche. Ceci avec une boucle d'élisp pour itérer à travers tous les mecs devrait le résoudre.

+0

Je pense que le suivi des changements de niveau de fonction sera difficile. – Amjith

+0

jinxed_coder: pas question à ce sujet. C'était plus envie "tarte dans le ciel". D'un autre côté, il ne doit pas être parfait à 100%. –

Répondre

2

Je ne connais pas de fonction qui le fasse, mais elle devrait être facile à implémenter. En gros, vous voulez

  • obtenir les fichiers modifiés
  • pour chaque fichier, appelez add-change-log
 
"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."

de sorte que le code magique va ressembler à quelque chose comme

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

et make-magic-change-log-entry simplement currys la fonction add-change-log de sorte que le seul argument t est file-name - vous définissez les autres.

+0

Merci. Je suppose que cela va exclure les fichiers supprimés et ajoutés? –

+1

Cela dépend de la manière dont vous générez cette liste de fichiers modifiés. Beaucoup de choses que vous pourriez faire, comme avoir une liste de contre-paires (un "alist") comme ("added". "Filename"). Si vous voulez faire beaucoup de magie, vous pouvez créer une nouvelle entrée custom-add-change-log avec un argument pour tout ce que vous voulez. la chose à faire est de lire le code add-log.el. –

3

Il existe une fonction vc-update-change-log qui génère automatiquement des entrées du journal des modifications à partir des entrées du journal de contrôle de version.

+0

Désolé, ce n'est pas ce que je cherche. Premièrement, il ne supporte que CVS. Même s'il prend en charge d'autres systèmes VC, il crée des entrées ChangeLog à partir des entrées du journal VC, ce qui signifie que les fichiers modifiés sont déjà validés. Bien sûr, ça va avec CVS, mais avec n'importe quel système de contrôle de version du 21ème siècle, je voudrais valider le ChangeLog dans le même ensemble de modifications que les fichiers modifiés eux-mêmes. –

+0

Vous avez raison, je n'ai pas vérifié que ni psvn ni git/magit implémenté cette fonctionnalité, désolé à ce sujet. –

2

J'ai écrit une fonction pour faire quelque chose de similaire à ce dont vous parliez.Vous pouvez obtenir le code à http://www.emacswiki.org/emacs/log-edit-fill

+0

Merci! Finalement je me suis mis à l'essayer. Comment est-ce que je l'utilise réellement? Si j'essaie d'invoquer dans le tampon svn-log-edit, la définition de la fonction de Symbol est void: log-edit-show-diff. En outre, ma question concernant le remplissage du fichier ChangeLog avant la validation réelle, est-il possible d'utiliser log-edit-fill de cette manière? –

2

diff-add-change-log-entries-other-window est documenté à faire exactement ce que vous avez mentionné dans 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. 

Malheureusement, il ne fonctionne pas très bien pour, disons, de nouveaux fichiers: il n'a pas même inclure les noms de fichiers de ces fichiers dans l'entrée de changelog squelettique.

Vous pourriez avoir plus de chance avec le script mklog de gcc, que vous pouvez obtenir à partir de http://gcc.gnu.org/viewcvs/gcc/trunk/contrib/mklog.

+0

En effet 'diff-add-change-log-entrées-other-window' est censé être exactement ce que Laurynas a demandé, mais c'est loin d'être parfait. Nous apprécions les améliorations (par exemple pour manipuler les fichiers supprimés/ajoutés), mais mon expérience quand je l'ai essayé me porte à croire qu'il faut trop d'intelligence pour le faire automatiquement, et que le texte doit être écrit à la main quand même , l'avantage de faire le squelette en une fois n'est pas si important. – Stefan

Questions connexes