summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/log-view.el27
-rw-r--r--lisp/vc-cvs.el4
-rw-r--r--lisp/vc-mcvs.el6
-rw-r--r--lisp/vc-rcs.el5
-rw-r--r--lisp/vc-sccs.el6
-rw-r--r--lisp/vc.el18
7 files changed, 74 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 7372e106510..6a4893e8441 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,12 @@
+2007-12-27 Eric S. Raymond <esr@snark.thyrsus.com>
+
+ * (vc.el, vc-sccs.el, vc-rcs.el, vc-cs.el, vc-mcvs.el): Put
+ machinery in place to support editing of change comments
+ with 'e' in a log-view buffer. Not documented yet as this
+ only works for SCCS, RCS, and maybe CVS if you have admin
+ privileges. When we have backend support for Subversion and
+ more modern systems it will ve time to write this up.
+
2007-12-27 Kenichi Handa <handa@ni.aist.go.jp>
* international/mule-cmds.el (select-safe-coding-system): When a
diff --git a/lisp/log-view.el b/lisp/log-view.el
index ceda42eb687..d14b33262cc 100644
--- a/lisp/log-view.el
+++ b/lisp/log-view.el
@@ -128,7 +128,7 @@
'(("q" . quit-window)
("z" . kill-this-buffer)
("m" . log-view-toggle-mark-entry)
- ;; ("e" . cvs-mode-edit-log)
+ ("e" . log-view-modify-change-comment)
("d" . log-view-diff)
("a" . log-view-annotate-version)
("f" . log-view-find-revision)
@@ -411,6 +411,31 @@ log entries."
(switch-to-buffer (vc-find-revision (log-view-current-file)
(log-view-current-tag)))))
+
+(defun log-view-extract-comment ()
+ "Parse comment from around the current point in the log."
+ (save-excursion
+ (let (st en (backend (vc-backend (log-view-current-file))))
+ (log-view-end-of-defun)
+ (cond ((eq backend 'SVN)
+ (forward-line -1)))
+ (setq en (point))
+ (log-view-beginning-of-defun)
+ (cond ((memq backend '(SCCS RCS CVS MCVS SVN))
+ (forward-line 2))
+ ((eq backend 'Hg)
+ (forward-line 4)
+ (re-search-forward "summary: *" nil t)))
+ (setq st (point))
+ (buffer-substring st en))))
+
+(defun log-view-modify-change-comment ()
+ "Edit the change comment displayed at point."
+ (interactive)
+ (vc-modify-change-comment (list (log-view-current-file))
+ (log-view-current-tag)
+ (log-view-extract-comment)))
+
(defun log-view-annotate-version (pos)
"Annotate the version at point."
(interactive "d")
diff --git a/lisp/vc-cvs.el b/lisp/vc-cvs.el
index 337170ab896..cdb3aae8020 100644
--- a/lisp/vc-cvs.el
+++ b/lisp/vc-cvs.el
@@ -494,6 +494,10 @@ The changes are between FIRST-REVISION and SECOND-REVISION."
(error "Couldn't analyze cvs update result")))
(message "Merging changes into %s...done" file))))
+(defun vc-cvs-modify-change-comment (files rev comment)
+ "Modify the change comments for FILES on a specified REV.
+Will fail unless you have administrative privileges on the repo."
+ (vc-cvs-command nil 0 files "rcs" (concat "-m" comment ":" rev)))
;;;
;;; History functions
diff --git a/lisp/vc-mcvs.el b/lisp/vc-mcvs.el
index 70d502c7670..ba0ccf47747 100644
--- a/lisp/vc-mcvs.el
+++ b/lisp/vc-mcvs.el
@@ -432,6 +432,12 @@ The changes are between FIRST-REVISION and SECOND-REVISION."
(error "Couldn't analyze mcvs update result")))
(message "Merging changes into %s...done" file))))
+(defun vc-mcvs-modify-change-comment (files rev comment)
+ "Modify the change comments for FILES on a specified REV.
+Will fail unless you have administrative privileges on the repo."
+ (vc-mcvs-command nil 0 files "rcs" (concat "-m" comment ":" rev)))
+
+
;;;
;;; History functions
;;;
diff --git a/lisp/vc-rcs.el b/lisp/vc-rcs.el
index 35eba607bea..a092a91e918 100644
--- a/lisp/vc-rcs.el
+++ b/lisp/vc-rcs.el
@@ -510,6 +510,11 @@ Needs RCS 5.6.2 or later for -M."
;; expanded headers.
(vc-do-command nil 0 "co" (vc-name file) "-f" (concat "-l" rev)))
+(defun vc-rcs-modify-change-comment (files rev comment)
+ "Modify the change comments change on FILES on a specified REV."
+ (dolist (file files)
+ (vc-do-command nil 0 "rcs" (vc-name file)
+ (concat "-m" comment ":" rev))))
;;;
diff --git a/lisp/vc-sccs.el b/lisp/vc-sccs.el
index 06fcff3ceb5..749ec83a196 100644
--- a/lisp/vc-sccs.el
+++ b/lisp/vc-sccs.el
@@ -285,6 +285,12 @@ locked. REV is the revision to check out."
(vc-do-command nil 0 "unget" (vc-name file) "-n" (if rev (concat "-r" rev)))
(vc-do-command nil 0 "get" (vc-name file) "-g" (if rev (concat "-r" rev))))
+(defun vc-sccs-modify-change-comment (files rev comment)
+ "Modify (actually, append to) the change comments for FILES on a specified REV."
+ (dolist (file files)
+ (vc-do-command nil 0 "cdc" (vc-name file)
+ (concat "-y" comment) (concat "-r" rev))))
+
;;;
;;; History functions
diff --git a/lisp/vc.el b/lisp/vc.el
index d8c99b25108..3d1132aab77 100644
--- a/lisp/vc.el
+++ b/lisp/vc.el
@@ -318,6 +318,11 @@
;; used for files under this backend, and if files can indeed be
;; locked by other users.
;;
+;; - modify-change-comment (files rev comment)
+;;
+;; Modify the change comments associated with the files at the
+;; given revision. This is optional, many backends do not support it.
+;;
;; HISTORY FUNCTIONS
;;
;; * print-log (files &optional buffer)
@@ -2137,6 +2142,19 @@ The headers are reset to their non-expanded form."
(vc-call-backend backend 'clear-headers)
(kill-buffer filename)))))
+(defun vc-modify-change-comment (files rev oldcomment)
+ "Edit the comment associated with the given files and revision."
+ (vc-start-entry
+ files rev oldcomment t
+ "Enter a replacement change comment."
+ (lambda (files rev comment)
+ (vc-call-backend
+ ;; Less of a kluge than it looks like; log-view mode only passes
+ ;; this function a singleton list. Arguments left in this form in
+ ;; case the more general operation ever becomes meaningful.
+ (vc-responsible-backend (car files))
+ 'modify-change-comment files rev comment))))
+
;;;###autoload
(defun vc-merge ()
"Merge changes between two revisions into the current buffer's file.