rbj@DSYS.NCSL.NIST.GOV (Root Boy Jim) (08/16/89)
This is not really a bug, but a request for an enhancement. At USENIX,
I talked with Keith Bostic about this and I have good reason to believe
that he will add it. I have sent him the diffs for 4.3 as well.
The problem with diff is that it has no way just to tell you that
source files differ; it insists on telling you what the differences
are. The GNU project has added the -a option to tell diff that all
files are to be treated as text; my -q option tells diff to treat
them all as binary. The message produced is "Source files %s and %s differ",
which may be grep'ed for in the output.
Here are the diffs, and two runs showing the output produced.
========================================================================
*** analyze.c.orig Fri Feb 24 12:42:16 1989
--- analyze.c Wed Aug 16 11:13:56 1989
***************
*** 23,28 ****
--- 23,30 ----
#include "diff.h"
+ extern int quick; /*RBJ*/
+
extern int no_discards;
static int *xvec, *yvec; /* Vectors being compared. */
***************
*** 660,672 ****
compare the two files as binary. This can happen
only when the first chunk is read. */
! if (binary)
{
int differs = (filevec[0].buffered_chars != filevec[1].buffered_chars
|| bcmp (filevec[0].buffer, filevec[1].buffer,
filevec[1].buffered_chars));
if (differs)
! message ("Binary files %s and %s differ\n",
filevec[0].name, filevec[1].name);
for (i = 0; i < 2; ++i)
--- 662,676 ----
compare the two files as binary. This can happen
only when the first chunk is read. */
! if (binary || quick) /*RBJ*/
{
int differs = (filevec[0].buffered_chars != filevec[1].buffered_chars
|| bcmp (filevec[0].buffer, filevec[1].buffer,
filevec[1].buffered_chars));
if (differs)
! message (binary ?
! "Binary files %s and %s differ\n" :
! "Source files %s and %s differ\n",
filevec[0].name, filevec[1].name);
for (i = 0; i < 2; ++i)
*** diff.c.orig Wed Apr 26 15:38:27 1989
--- diff.c Wed Aug 16 11:10:11 1989
***************
*** 24,30 ****
--- 24,33 ----
#include "regex.h"
#include "diff.h"
+ /* RBJ nonzero for -q */
+ int quick;
+
/* Nonzero for -r: if comparing two directories,
compare their common subdirectories recursively. */
***************
*** 105,111 ****
/* Decode the options. */
! while ((c = getopt (argc, argv, "0123456789abBcC:defF:hHiI:lnNprsS:tTw"))
!= EOF)
{
switch (c)
--- 108,114 ----
/* Decode the options. */
! while ((c = getopt (argc, argv, "0123456789abBcC:defF:hHiI:lnNqprsS:tTw"))
!= EOF)
{
switch (c)
***************
*** 235,240 ****
--- 238,248 ----
specify_style (OUTPUT_CONTEXT);
function_regexp = "^[_a-zA-Z]";
break;
+
+ case 'q': /*RBJ*/
+ /* When comparing directorys, no source diffs */
+ quick = 1;
+ break;
case 'r':
/* When comparing directories,
========================================================================
/p/x/gnu/diff.sun [rbj@dsys 44] diff -rc ../diff .
diff -rc ../diff/Makefile ./Makefile
*** ../diff/Makefile Fri Feb 24 12:40:43 1989
--- ./Makefile Wed Aug 16 11:01:06 1989
***************
*** 23,29 ****
# Also, gcc supports -O and -g together.
CC=gcc -O
CFLAGS = -g
! INSTALL = install
# On system V, enable these three lines:
# CFLAGS = -g -DUSG
--- 23,29 ----
# Also, gcc supports -O and -g together.
CC=gcc -O
CFLAGS = -g
! INSTALL = install -c
# On system V, enable these three lines:
# CFLAGS = -g -DUSG
***************
*** 53,59 ****
context.o diff.o: regex.h
diff3.o: diff3.c
! $(CC) -c $(CFLAGS) -DDIFF_PROGRAM=\"$(bindir)/diff\" diff3.c
clean:
rm -f *.o diff diff3 diff.tar diff.tar.Z
--- 53,59 ----
context.o diff.o: regex.h
diff3.o: diff3.c
! $(CC) -c $(CFLAGS) -DDIFF_PROGRAM=\"$(bindir)/gdiff\" diff3.c
clean:
rm -f *.o diff diff3 diff.tar diff.tar.Z
***************
*** 60,74 ****
install: install-diff install-diff3
! install-diff: $(prefix)$(bindir)/diff
! $(prefix)$(bindir)/diff: diff
! $(INSTALL) diff $(prefix)$(bindir)/diff
! install-diff3: $(prefix)$(bindir)/diff3
! $(prefix)$(bindir)/diff3: diff3
! $(INSTALL) diff3 $(prefix)$(bindir)/diff3
diff.tar: $(tapefiles)
mkdir tmp
--- 60,74 ----
install: install-diff install-diff3
! install-diff: $(prefix)$(bindir)/gdiff
! $(prefix)$(bindir)/gdiff: diff
! $(INSTALL) diff $(prefix)$(bindir)/gdiff
! install-diff3: $(prefix)$(bindir)/gdiff3
! $(prefix)$(bindir)/gdiff3: diff3
! $(INSTALL) diff3 $(prefix)$(bindir)/gdiff3
diff.tar: $(tapefiles)
mkdir tmp
Only in .: Makefile.orig
Only in .: Makefile.~1~
Only in .: TAGS
diff -rc ../diff/analyze.c ./analyze.c
*** ../diff/analyze.c Fri Feb 24 12:42:16 1989
--- ./analyze.c Wed Aug 16 11:13:56 1989
***************
*** 23,28 ****
--- 23,30 ----
#include "diff.h"
+ extern int quick; /*RBJ*/
+
extern int no_discards;
static int *xvec, *yvec; /* Vectors being compared. */
***************
*** 660,672 ****
compare the two files as binary. This can happen
only when the first chunk is read. */
! if (binary)
{
int differs = (filevec[0].buffered_chars != filevec[1].buffered_chars
|| bcmp (filevec[0].buffer, filevec[1].buffer,
filevec[1].buffered_chars));
if (differs)
! message ("Binary files %s and %s differ\n",
filevec[0].name, filevec[1].name);
for (i = 0; i < 2; ++i)
--- 662,676 ----
compare the two files as binary. This can happen
only when the first chunk is read. */
! if (binary || quick) /*RBJ*/
{
int differs = (filevec[0].buffered_chars != filevec[1].buffered_chars
|| bcmp (filevec[0].buffer, filevec[1].buffer,
filevec[1].buffered_chars));
if (differs)
! message (binary ?
! "Binary files %s and %s differ\n" :
! "Source files %s and %s differ\n",
filevec[0].name, filevec[1].name);
for (i = 0; i < 2; ++i)
Only in .: analyze.c.orig
Only in .: analyze.c.~1~
Only in .: analyze.o
Only in .: context.o
Only in .: diff
diff -rc ../diff/diff.c ./diff.c
*** ../diff/diff.c Wed Apr 26 15:38:27 1989
--- ./diff.c Wed Aug 16 11:10:11 1989
***************
*** 24,30 ****
--- 24,33 ----
#include "regex.h"
#include "diff.h"
+ /* RBJ nonzero for -q */
+ int quick;
+
/* Nonzero for -r: if comparing two directories,
compare their common subdirectories recursively. */
***************
*** 105,111 ****
/* Decode the options. */
! while ((c = getopt (argc, argv, "0123456789abBcC:defF:hHiI:lnNprsS:tTw"))
!= EOF)
{
switch (c)
--- 108,114 ----
/* Decode the options. */
! while ((c = getopt (argc, argv, "0123456789abBcC:defF:hHiI:lnNqprsS:tTw"))
!= EOF)
{
switch (c)
***************
*** 235,240 ****
--- 238,248 ----
specify_style (OUTPUT_CONTEXT);
function_regexp = "^[_a-zA-Z]";
break;
+
+ case 'q': /*RBJ*/
+ /* When comparing directorys, no source diffs */
+ quick = 1;
+ break;
case 'r':
/* When comparing directories,
Only in .: diff.c.orig
Only in .: diff.c.~1~
Only in .: diff.o
Only in .: diff3
Only in .: diff3.o
Only in .: diffs
Only in .: dir.o
Only in .: ed.o
Only in .: io.o
Only in .: normal.o
Only in .: regex.o
Only in .: util.o
/p/x/gnu/diff.sun [rbj@dsys 45]diff -rcq ../diff .
Source files ../diff/Makefile and ./Makefile differ
Only in .: Makefile.orig
Only in .: Makefile.~1~
Only in .: TAGS
Source files ../diff/analyze.c and ./analyze.c differ
Only in .: analyze.c.orig
Only in .: analyze.c.~1~
Only in .: analyze.o
Only in .: context.o
Only in .: diff
Source files ../diff/diff.c and ./diff.c differ
Only in .: diff.c.orig
Only in .: diff.c.~1~
Only in .: diff.o
Only in .: diff3
Only in .: diff3.o
Only in .: diffs
Only in .: dir.o
Only in .: ed.o
Only in .: io.o
Only in .: normal.o
Only in .: regex.o
Only in .: util.o
/p/x/gnu/diff.sun [rbj@dsys 46]
Root Boy Jim
Have GNU, Will Travel.