--- vc-svn.el.qdist 2005-01-20 02:57:32.000000000 -0500 +++ vc-svn.el 2005-02-12 13:22:33.000000000 -0500 @@ -293,15 +293,43 @@ check out the head of the trunk. For Subversion, that's equivalent to passing nil. If optional arg DESTFILE is given, it is an alternate filename to -write the contents to; we raise an error." - (unless editable - (error "VC asked Subversion to check out a read-only copy of file")) - (when destfile - (error "VC asked Subversion to check out a file under another name")) - (when (equal rev "") - (setq rev nil)) - (apply 'vc-do-command nil 0 vc-svn-program-name file - "update" (if rev (list "-r" rev) '())) +write the contents to. EDITABLE is ignored in this case." + (if destfile + (let ((failed t) + (backup-name (if (string= file destfile) + (car (find-backup-file-name destfile))))) + (when backup-name + (copy-file destfile backup-name + 'ok-if-already-exists 'keep-date) + (unless (file-writable-p destfile) + (set-file-modes destfile + (logior (file-modes destfile) 128)))) + (unwind-protect + (progn + (let ((coding-system-for-read 'no-conversion) + (coding-system-for-write 'no-conversion)) + (with-temp-file destfile + (apply 'vc-do-command + (current-buffer) 0 vc-svn-program-name file + "cat" + (if rev (list "-r" rev))))) + (setq failed nil)) + (if failed + (if backup-name + (rename-file backup-name destfile + 'ok-if-already-exists) + (if (file-exists-p destfile) + (delete-file destfile))) + (and backup-name + (not vc-make-backup-files) + (delete-file backup-name))))) + (unless editable + (error "VC asked Subversion to check out a read-only copy of file")) + (when (equal rev "") + (setq rev nil)) + (apply 'vc-do-command (current-buffer) 0 vc-svn-program-name file + "update" (if rev (list "-r" rev) '())) + ) (vc-file-setprop file 'vc-workfile-version nil))