   (save-excursion
     (set-buffer (process-buffer proc))
     (goto-char (process-mark proc))
+    ;; put point back where it was to avoid scrolling for long output
+    ;; (e.g., large diffs)
     (let ((p (point))
           (inhibit-read-only t))
       (insert-before-markers str)
-      (goto-char p)
-      (while (search-forward "\r" (process-mark proc) t)
-        (save-excursion
-          (beginning-of-line)
-          (delete-region (point) (match-beginning 0))))
       (goto-char p))))
-
-(defvar svn-status-buffer nil
-  "svn-status buffer describing the files that a commit operation applies to")
-(make-variable-buffer-local 'svn-status-buffer)
 
 (defvar svn-todo-queue '()
   "A queue of commands to run when the current command finishes.")

(defun svn-commit-sentinel (proc reason)
  "Sentinel function for `svn commit'."
  (with-current-buffer (process-buffer proc)
    (setq svn-running nil)
    (if (/= (process-exit-status proc) 0)
        (set-svn-process-status 'failed)
      (set-svn-process-status 'finished)
      (while svn-commit-files
        (let* ((file (car svn-commit-files))
               (path (concat default-directory file))

    proc))

(defun svn-check-running ()
  (when svn-running
    (error "Can't run two svn processes from the same buffer")))

(defun svn-run-async (command args &optional file-filter)
