   (svn-status-show-svn-diff-internal (svn-status-marked-files)
                                      (not (svn-status-some-files-marked-p))
                                      (if arg :ask "BASE")))
+
+(defun svn-status-diff-show-changeset (rev &optional user-confirmation)
+  "Show the changeset for a given log entry.
+When called with a prefix argument, ask the user for the revision."
+  (let* ((upper-rev rev)
+         (lower-rev (number-to-string (- (string-to-number upper-rev) 1)))
+         (rev-arg (concat lower-rev ":" upper-rev)))
+    (when user-confirmation
+      (setq rev-arg (read-string "Revision for changeset: " rev-arg)))
+    (svn-run nil t 'diff "diff" (concat "-r" rev-arg))
+    (svn-status-activate-diff-mode)))
 
 (defun svn-status-show-svn-diff-internal (line-infos recursive revision)
   ;; REVISION must be one of:

                        (let ((src-line-number (svn-line-number-at-pos)))
                          (pop-to-buffer (get-buffer svn-status-last-output-buffer-name))
                          (goto-line src-line-number)))))
                  (message "svn blame finished"))
                 ((eq svn-process-cmd 'commit)
                  (svn-process-sentinel-fixup-path-seperators)

  (when current-prefix-arg
    (setq revision (svn-status-read-revision-string "Blame for version: " "BASE")))
  (unless revision (setq revision "BASE"))
  (setq svn-status-blame-file-name (svn-status-line-info->filename (svn-status-get-file-information)))
  (svn-run t t 'blame "blame" "-r" revision svn-status-blame-file-name))

(defun svn-status-show-svn-diff (arg)
  "Run `svn diff' on the current file.
