 normally marks all of its files as well.
 If no files have been marked, commit recursively the file at point."
   (interactive)
-  (save-some-buffers)
+  (when (member svn-status-do-prompt-for-save '(before-log-edit t))
+    (svn-status-save-some-buffers))
   (let* ((selected-files (svn-status-marked-files))
          (marked-files-p (svn-status-some-files-marked-p)))
     (setq svn-status-files-to-commit selected-files

(defcustom svn-status-preserve-window-configuration nil
  "*Try to preserve the window configuration."
  :type 'boolean
  :group 'psvn)

(defcustom svn-status-negate-meaning-of-arg-commands '()

;; svn status persistent options
;; --------------------------------------------------------------------------------

(defun svn-status-base-dir (&optional start-directory)
  "Find the svn root directory for the current working copy.
Return nil, if not in a svn working copy."
  (let* ((base-dir (expand-file-name (or start-directory default-directory)))
         (dot-svn-dir (concat base-dir (svn-wc-adm-dir-name)))
         (in-tree (file-exists-p dot-svn-dir))
         (dir-below (expand-file-name default-directory)))
    (while (when (and dir-below (file-exists-p dot-svn-dir))
             (setq base-dir (file-name-directory dot-svn-dir))
             (string-match "\\(.+/\\).+/" dir-below)
