diff(1) -N behaviour - Bug 233402

Fehmi Noyan ISI fnoyanisi at yahoo.com
Wed May 27 23:38:43 UTC 2020



> On 27/05/2020, at 9:52 PM, Yuri Pankov <ypankov at fastmail.com> wrote:
> 
> Fehmi Noyan ISI via freebsd-hackers wrote:
>>> On 27/05/2020, at 9:06 PM, Baptiste Daroussin <bapt at FreeBSD.org> wrote:
>>> 
>>> On Wed, May 27, 2020 at 08:52:38PM +1200, Fehmi Noyan ISI via freebsd-hackers wrote:
>>>> 
>>>> 
>>>>> On 23/05/2020, at 11:47 PM, Yuri Pankov <ypankov at fastmail.com> wrote:
>>>>> 
>>>>> Fehmi Noyan ISI via freebsd-hackers wrote:
>>>>>>> On 23/05/2020, at 11:21 PM, Yuri Pankov <ypankov at fastmail.com> wrote:
>>>>>>> 
>>>>>>> Fehmi Noyan ISI via freebsd-hackers wrote:
>>>>>>>> Hiya
>>>>>>>> Apparently, after we switched from GNU diff to BSD diff, the -N flag no longer assumes absent files as empty.
>>>>>>>> There is a bug report about GNU diff compatibility but when I look at diff(1) man page, I see that not treating absent files as empty is intentional rather than a missing functionality.
>>>>>>>> If this is not the case, I can work on patch to match to GNU diff behaviour, otherwise, this bug report can be closed I think.
>>>>>>>> What’s your take on this?
>>>>>>>> -N --new-file
>>>>>>>>    If a file is found in only one directory, act as if it was found
>>>>>>>>    in the other directory too but was of zero size.
>>>>>>>> man for GNU diff
>>>>>>>> -N, --new-file
>>>>>>>>    treat absent files as empty
>>>>>>> 
>>>>>>> I think both descriptions say the same, i.e. "zero size" == "empty”?
>>>>>> Maybe it’s my interpretation, but if you do not supply the second argument to diff(1), it complains
>>>>>> $ echo “test” > a.txt
>>>>>> $ diff -N a.txt nofile
>>>>>> diff: nofile: No such file or directory
>>>>>> $
>>>>>> GNU diff assumes an empty file for the missing second file and makes the comparison
>>>>>> $ echo “test” > a.txt
>>>>>> $ diff -N a.txt nofile
>>>>>> 1d0
>>>>>> < test
>>>>>> $
>>>>> 
>>>>> I must admit that I never used -N without -r, so it's probably the only case that needs fixing?
>>>>> 
>>>>> $ mkdir a b
>>>>> $ echo bar > a/foo
>>>>> $ diff -ruN a b
>>>>> diff -ruN a/foo b/foo
>>>>> --- a/foo       2020-05-23 14:44:34.525932000 +0300
>>>>> +++ b/foo       1970-01-01 03:00:00.000000000 +0300
>>>>> @@ -1 +0,0 @@
>>>>> -bar
>>>>> 
>>>> 
>>>> Took me a while to reply…
>>>> With -N, GNU diff does not give an ENOENT
>>>> 
>>>> % echo foo > bar
>>>> % diff bar nofile.txt
>>>> diff: nofile.txt no such file or directory
>>>> % diff -N bar nofile.txt
>>>> 1d0
>>>> < foo
>>>> 
>>>> Do we want BSD diff do the same, i.e. match the -N functionality of GNU diff?
>>>> 
>>> Yes we do, if you do provide a patch I would be more than happy to review and
>>> apply it.
>>> 
>>> Best regards,
>>> Bapt
>> Cheers…
>> I will be working on it and update bug 233402
> 
> Great!  I wasn't discouraging you, rather trying to understand what case exactly we are talking about.  Also, I think the -N option description in the man page should look more like GNU's one, as currently (I think) it implies that -r is used and we are comparing directories recursively.
> _______________________________________________
> 

Yes, the BSD diff.1 man page also needs updating since the current wording implies that diff(1) does not treat missing files as empty unless it is found in any one of the directories. GNU diff’s approach here is more loose I think.

Fehmi 



More information about the freebsd-hackers mailing list