On Tue, Oct 27, 2020 at 12:27:26PM +0000, Kyle Evans wrote:
> Author: kevans
> Date: Tue Oct 27 12:27:26 2020
> New Revision: 367076
> URL: https://svnweb.freebsd.org/changeset/base/367076
> 
> Log:
>   diff: don't force the format to 'context' with -p immediately
>   
>   Instead, leave the fomat as unspecified (if it hasn't been) and use the
>   -p flag as a hint to 'context' if no other formatting option is specified.
>   
>   This fixes `diff -purw`, used frequently by emaste, and matches the behavior
>   of its GNU counterpart.
>   
>   PR:         250015
>   Reviewed by:        emaste
>   MFC after:  1 week
> 
> Modified:
>   head/usr.bin/diff/diff.c
> 
> Modified: head/usr.bin/diff/diff.c
> ==============================================================================
> --- head/usr.bin/diff/diff.c  Tue Oct 27 11:29:11 2020        (r367075)
> +++ head/usr.bin/diff/diff.c  Tue Oct 27 12:27:26 2020        (r367076)
> @@ -210,17 +210,6 @@ main(int argc, char **argv)
>                       diff_format = D_NREVERSE;
>                       break;
>               case 'p':
> -                     /*
> -                      * If it's not unset and it's not set to context or
> -                      * unified, we'll error out here as a conflicting
> -                      * format.  If it's unset, we'll go ahead and set it to
> -                      * context.
> -                      */
> -                     if (FORMAT_MISMATCHED(D_CONTEXT) &&
> -                         FORMAT_MISMATCHED(D_UNIFIED))
> -                             conflicting_format();
> -                     if (diff_format == D_UNSET)
> -                             diff_format = D_CONTEXT;
>                       dflags |= D_PROTOTYPE;
>                       break;
>               case 'P':
> @@ -320,6 +309,8 @@ main(int argc, char **argv)
>               newarg = optind != prevoptind;
>               prevoptind = optind;
>       }
> +     if (diff_format == D_UNSET && (dflags & D_PROTOTYPE) != 0)
> +             diff_format = D_CONTEXT;
>       if (diff_format == D_UNSET)
>               diff_format = D_NORMAL;
>       argc -= optind;

I think it would be great to have a test to ensure we don't break it in the
futur.

Bapt

Attachment: signature.asc
Description: PGP signature

Reply via email to