changeset 91525:15d5c70e7c61

Add new TODO entry. (diff-create-changelog): New function. (diff-mode-menu): Bind it.
author Dan Nicolaescu <dann@ics.uci.edu>
date Mon, 04 Feb 2008 21:41:09 +0000
parents de01d1b47b9d
children 44f0cbc44295
files lisp/ChangeLog lisp/diff-mode.el
diffstat 2 files changed, 39 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Mon Feb 04 17:27:36 2008 +0000
+++ b/lisp/ChangeLog	Mon Feb 04 21:41:09 2008 +0000
@@ -1,3 +1,9 @@
+2008-02-04  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* diff-mode.el: Add new TODO entry.
+	(diff-create-changelog): New function.
+	(diff-mode-menu): Bind it.
+
 2008-02-04  Kenichi Handa  <handa@ni.aist.go.jp>
 
 	* international/mule-diag.el (print-fontset-element): Handle the
--- a/lisp/diff-mode.el	Mon Feb 04 17:27:36 2008 +0000
+++ b/lisp/diff-mode.el	Mon Feb 04 21:41:09 2008 +0000
@@ -39,6 +39,8 @@
 
 ;; Todo:
 
+;; - Improve `diff-create-changelog', it is very simplistic now.
+;;  
 ;; - Add a `delete-after-apply' so C-c C-a automatically deletes hunks.
 ;;   Also allow C-c C-a to delete already-applied hunks.
 ;;
@@ -171,6 +173,8 @@
     ["Apply hunk"		diff-apply-hunk		t]
     ["Test applying hunk"	diff-test-hunk		t]
     ["Apply diff with Ediff"	diff-ediff-patch	t]
+    ["Create Change Log"        diff-create-changelog
+     :help "Create ChangeLog entries for the changes in the diff buffer"]
     "-----"
     ["Reverse direction"	diff-reverse-direction	t]
     ["Context -> Unified"	diff-context->unified	t]
@@ -1725,6 +1729,35 @@
                                   props 'diff-refine-preproc))))))))
 
 
+(defun diff-create-changelog ()
+  "Iterate through the current diff and create ChangeLog entries."
+  (interactive)
+  ;; XXX: Currently add-change-log-entry-other-window is only called
+  ;; once per hunk.  Some hunks have multiple changes, it would be
+  ;; good to call it for each change.
+  (save-excursion
+    (goto-char (point-min))
+    (let ((orig-buffer (current-buffer)))
+      (condition-case nil
+	  ;; Call add-change-log-entry-other-window for each hunk in
+	  ;; the diff buffer.
+	  (while t
+	    (set-buffer orig-buffer)
+	    (diff-hunk-next)
+	    (beginning-of-line)
+	    (while (not (looking-at "^ "))
+	      (forward-line 1))
+	    ;; Move to where the changes are,
+	    ;; `add-change-log-entry-other-window' works better in
+	    ;; that case.
+	    (while (not (looking-at "^[!+-]"))
+	      (forward-line 1))
+	    (add-change-log-entry-other-window)
+	    ;; Insert a "." so that the entries created don't get
+	    ;; merged.
+	    (insert "."))
+	(error nil)))))
+
 ;; provide the package
 (provide 'diff-mode)