On Wed, Jul 26, 2017 at 11:06:02PM -0400, Ted Unangst wrote:

> Ibrahim Khalifa wrote:
> > Hi,
> > 
> > If you run diff against two directories where you have file(s) and the
> > only difference is that you have file(s) that only exists in one of the
> > directories, diff will exit with 0. If you use -N och -P it will however
> > exit with 1.
> > 
> > Reading through the man-page, I can???t find any reference that this would
> > be intentionally. Rather I expected it to exit with 1, since there is a
> > difference found. The only other diff I have access to is GNU diff, which
> > seems to exit with 1 in the same scenario.
> > 
> > If the behavior is intentionally, I think the man-page should also reflect
> > this. Otherwise diff should be changed to exit with 1 even if -N or -P
> > isn't used.
> > 
> > Both changes are trivial and I can provide a patch if there is some
> > consensus on which behavior is the best.
> 
> it's probably an oversight. the exit code should be 1.

Great. The attached patch changes the exit code to 1.

//Ibo
? diff-direxit.patch
Index: diffdir.c
===================================================================
RCS file: /cvs/src/usr.bin/diff/diffdir.c,v
retrieving revision 1.45
diff -u -p -r1.45 diffdir.c
--- diffdir.c   5 Oct 2015 20:15:00 -0000       1.45
+++ diffdir.c   27 Jul 2017 09:00:48 -0000
@@ -132,16 +132,20 @@ diffdir(char *p1, char *p2, int flags)
                        if (Nflag)
                                diffit(dent1, path1, dirlen1, path2, dirlen2,
                                    flags);
-                       else
+                       else {
                                print_only(path1, dirlen1, dent1->d_name);
+                               status |= 1;
+                       }
                        dp1++;
                } else {
                        /* file only in second dir, only diff if -N or -P */
                        if (Nflag || Pflag)
                                diffit(dent2, path1, dirlen1, path2, dirlen2,
                                    flags);
-                       else
+                       else {
                                print_only(path2, dirlen2, dent2->d_name);
+                               status |= 1;
+                       }
                        dp2++;
                }
        }

Reply via email to