Subject: Re: bug#59232:

From: Dmitry Gutov <[email-masked]>
Date: Thu, 21 Dec 2023 02:12:06 +0200

On 21/12/2023 00:50, Urban Engberg wrote:

> Using make-process:
> 
>     (let ((process-connection-type nil))
>        (make-process
>         :name "xxx"
>         :buffer "*Test*"
>         :command (list "svn" "annotate" "FILE")))
> 
> This fails, just like before. Interestingly, adding
> 
>     :stderr "*Stderr*"
> 
> 
> to the argument list makes the command */not*/ fail and *Stderr* thus 
> just contains "Process xxx stderr finished"

Hmm, then perhaps it might make sense to test this full patch. Ideally, 
though, someone knowledgeable about our subprocess system would chime in 
about the whole situation: are there programs like this, and should we 
work around that.

diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index fd5f655a0f6..18ba317242b 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -379,9 +379,12 @@ vc-do-command
  	    (if (eq okstatus 'async)
  	        ;; Run asynchronously.
  	        (let ((proc
-		       (let ((process-connection-type nil))
-		         (apply #'start-file-process command
-                                (current-buffer) command squeezed))))
+                       (make-process
+                        :name "vc"
+                        :command (cons command squeezed)
+                        :connection-type 'pipe
+                        :buffer (current-buffer)
+                        :stderr " *vc-errors*")))
  		  (when vc-command-messages
  		    (let ((inhibit-message vc-inhibit-message))
  		      (message "Running in background: %s"

>     There are also some options outlined for trying to get more verbose
>     output of it here --
>     https://stackoverflow.com/questions/8416989/is-it-possible-to-get-svn-client-debug-output <https://stackoverflow.com/questions/8416989/is-it-possible-to-get-svn-client-debug-output>
>     -- but it seems like this might only work with some client versions.
>     And
>     most answers are 5-10 years old.
> 
> 
> No, I don't get much more from that. But perhaps interesting as well, I 
> gave the "svn annotate" a "-v" to generate more verbose output. It seems 
> this makes it output the full date on each line of the output. With this 
> option, the process is terminated after just 56 lines, or around 4900 
> characters – close to what we got before. Could it in some way be that 
> the pipe into the output buffer is closed down prematurely?

That the pipe is closed prematurely, but only with SVN and not any other 
VCS client? That seems odd, it likely involved some particular factors. 
Well, aside from the fact that 'svn' inevitably accesses the network.

> As again, it 
> doesn't seem that the svn process itself fails, when run in any other way?

Sure, it is weird.

Other ways you could try to run it are:

- From Emacs's 'M-x shell' buffer.
- Through a shell wrapper that redirects stderr somewhere, but then 
appends it at the end of the output when the main program finishes.
- Through the ':term' terminal emulator in Vim 8.1+? Just being 
thorough, I have no idea how it is implemented.