Subject: vc-do-command return value when using 'async

From: Dan Nicolaescu <[email-masked]>
Date: Thu, 17 Sep 2009 08:43:36 -0700 (PDT)

When passing 'async to vc-do-command there's no reliable way to
determine the exit status for the command.  

When using (vc-do-command 'async BLAG) it is possible that by the time
the next command is executed the process has finished and it's not
possible to retrieve the process return value.

The patch below change vc-do-command to return the process for the async
case, that way the use has a handle to use in case the return value is
needed.

Index: lisp/vc-dispatcher.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/vc-dispatcher.el,v
retrieving revision 1.69
diff -u -3 -p -r1.69 vc-dispatcher.el
--- lisp/vc-dispatcher.el	7 Aug 2009 08:24:32 -0000	1.69
+++ lisp/vc-dispatcher.el	17 Sep 2009 05:58:06 -0000
@@ -330,13 +330,14 @@ that is inserted into the command line b
 		     (let ((process-connection-type nil))
 		       (apply 'start-file-process command (current-buffer)
                               command squeezed))))
-		(if vc-command-messages
-		    (message "Running %s in background..." full-command))
+		(when vc-command-messages
+		  (message "Running %s in background..." full-command))
 		;;(set-process-sentinel proc (lambda (p msg) (delete-process p)))
 		(set-process-filter proc 'vc-process-filter)
-		(vc-exec-after
-		 `(if vc-command-messages
-		      (message "Running %s in background... done" ',full-command))))
+		(setq status proc)
+		(when vc-command-messages
+		  (vc-exec-after
+		   `(message "Running %s in background... done" ',full-command))))
 	    ;; Run synchronously
 	    (when vc-command-messages
 	      (message "Running %s in foreground..." full-command))