From fd0644516654b82dda26fea572917e6ad92423fd Mon Sep 17 00:00:00 2001 From: Dan Nicolaescu Date: Wed, 9 Apr 2008 03:38:39 +0000 Subject: [PATCH] (vc-svn-modify-change-comment): Add support for the file:// access method. --- lisp/ChangeLog | 5 +++++ lisp/vc-svn.el | 55 +++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 80f6f61f26a..a2a219479c7 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2008-04-09 Dan Nicolaescu + + * vc-svn.el (vc-svn-modify-change-comment): Add support for the + file:// access method. + 2008-04-09 Stefan Monnier * minibuffer.el: New file. diff --git a/lisp/vc-svn.el b/lisp/vc-svn.el index e36a16d7758..c2c665cb275 100644 --- a/lisp/vc-svn.el +++ b/lisp/vc-svn.el @@ -386,27 +386,42 @@ The changes are between FIRST-VERSION and SECOND-VERSION." (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 -- 2.11.4.GIT