Subject: Re: bug#4422: diff-switches is a bad idea

From: Eli Zaretskii <[email-masked]>
Date: Tue, 01 Oct 2019 16:42:14 +0300

> From: Lars Ingebrigtsen <[email-masked]>
> Date: Tue, 01 Oct 2019 15:18:29 +0200
> Cc: [email-masked]
> 
> Reuben Thomas <[email-masked]> writes:
> 
> > I'm using Emacs 23, and I have just been puzzling over why vc-diff
> > stopped working in CVS checkouts. I eventually traced it to
> > diff-switches: I have mine set to "-Nur", quite reasonably, I think,
> > but of course "-r" means something quite different to CVS, and I ended
> > up with a hard-to-understand error message about tags.
> >
> > I suggest not using diff-switches (this would also remove some
> > special-case code, as no other vc command respects a non-vc option
> > like this.) Yes, some users will have to configure the same thing in
> > two places, but others will be saved the confusion I had. For the
> > switches to be commoned up sensibly, a more structured approach to
> > setting them is needed that takes semantics into account, and that way
> > lies madness.
> 
> (I'm going through old bug reports that unfortunately didn't get any
> response at the time.)
> 
> I'm not extremely familiar with the vc code, but looking at it in Emacs
> 27, at least, the switches for diff in CVS comes from
> vc-cvs-diff-switches, if I read the `vc-switches' function correctly.

It uses vc-cvs-diff-switches, but if that's nil (the default), it will
try to use vc-diff-switches (which is also nil by default) and
diff-switches, using the first non-nil of these.

I think the current situation is reasonable, since to resolve it the
user could customize vc-diff-switches or vc-cvs-diff-switches to t to
avoid this problem.