changeset 93886:ed131d081eab

(vc-svn-modify-change-comment): Add support for the file:// access method.
author Dan Nicolaescu <dann@ics.uci.edu>
date Wed, 09 Apr 2008 03:38:39 +0000
parents 6c6216b3b878
children 95ab8057090d
files lisp/ChangeLog lisp/vc-svn.el
diffstat 2 files changed, 40 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Apr 09 03:34:19 2008 +0000
+++ b/lisp/ChangeLog	Wed Apr 09 03:38:39 2008 +0000
@@ -1,3 +1,8 @@
+2008-04-09  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* vc-svn.el (vc-svn-modify-change-comment): Add support for the
+	file:// access method.
+
 2008-04-09  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* minibuffer.el: New file.
--- a/lisp/vc-svn.el	Wed Apr 09 03:34:19 2008 +0000
+++ b/lisp/vc-svn.el	Wed Apr 09 03:38:39 2008 +0000
@@ -386,27 +386,42 @@
 (defun vc-svn-modify-change-comment (files rev comment)
   "Modify the change comments for a specified REV.
 You must have ssh access to the repository host, and the directory Emacs
-uses locally for temp files must also be writeable by you on that host."
-  (vc-do-command nil 0 "svn" nil "info")
-  (set-buffer "*vc*")
-  (goto-char (point-min))
-  (unless (re-search-forward "Repository Root: svn\\+ssh://\\([^/]+\\)\\(/.*\\)" nil t)
-    (error "Repository information is unavailable."))
-  (let* ((tempfile (make-temp-file user-mail-address))
-	(host (match-string 1))
-	(directory (match-string 2))
-	(remotefile (concat host ":" tempfile)))
+uses locally for temp files must also be writeable by you on that host.
+This is only supported if the repository access method is either file://
+or svn+ssh://."
+  (let (tempfile host remotefile directory fileurl-p)
     (with-temp-buffer
-      (insert comment)
-      (write-region (point-min) (point-max) tempfile))
-    (unless (vc-do-command nil 0 "scp" nil "-q" tempfile remotefile)
-      (error "Copy of comment to %s failed" remotefile))
-    (unless (vc-do-command nil 0 "ssh" nil
-			   "-q" host
-			   (format "svnadmin setlog --bypass-hooks %s -r %s %s; rm %s"
-				   directory rev tempfile tempfile))
-      (error "Log edit failed"))
-  ))
+      (vc-do-command (current-buffer) 0 "svn" nil "info")
+      (goto-char (point-min))
+      (unless (re-search-forward "Repository Root: \\(file://\\(/.*\\)\\)\\|\\(svn\\+ssh://\\([^/]+\\)\\(/.*\\)\\)" nil t)
+	(error "Repository information is unavailable"))
+      (if (match-string 1)
+	  (progn
+	    (setq fileurl-p t)
+	    (setq directory (match-string 2)))
+	(setq host (match-string 4))
+	(setq directory (match-string 5))
+	(setq remotefile (concat host ":" tempfile))))
+    (with-temp-file (setq tempfile (make-temp-file user-mail-address))
+      (insert comment))
+    (if fileurl-p
+	;; Repository Root is a local file.
+	(progn
+	  (unless (vc-do-command
+		   nil 0 "svnadmin" nil
+		   "setlog" "--bypass-hooks" directory 
+		   "-r" rev (format "%s" tempfile))
+	    (error "Log edit failed"))
+	  (delete-file tempfile))
+
+      ;; Remote repository, using svn+ssh.
+      (unless (vc-do-command nil 0 "scp" nil "-q" tempfile remotefile)
+	(error "Copy of comment to %s failed" remotefile))
+      (unless (vc-do-command
+	       nil 0 "ssh" nil "-q" host
+	       (format "svnadmin setlog --bypass-hooks %s -r %s %s; rm %s"
+		       directory rev tempfile tempfile))
+	(error "Log edit failed")))))
 
 ;;;
 ;;; History functions