Larry Jones wrote:
> 
> Todd Denniston writes:
> >
> > with (CVS) 1.9 (client/server) ---as shipped with slackware 3.2
> > "cvs diff -ybw" would give me the familiar side by side diff I want but with
> > (CVS) 1.10.8 (client/server)  --- compiled by me on slack 7.0 with
> > ./configure;make;make install
> > "cvs diff -ybw" only gives
> > diff: invalid option -- y
> > Usage: cvs diff.....
> >
> > looking at cvs-1.10.8/diff/diff.c it looks as though the y should be processed if
> > the option ever made it there, but by putting a printf in the y case I know it
> > never does.
> 
> The following comment in src/diff.c tells the story:
> 
> /* CVS 1.9 and similar versions seemed to have pretty weird handling
>    of -y and -T.  In the cases where it called rcsdiff,
<SNIP>
>    mostly to ignore -q.  Maybe this should be fixed, but I think it's
>    a larger issue than the changes included here.  */
> 
> > or maybe if I can find time to do it where to start on a fix, BIG maybe?
> 
> I'd start by comparing the options lists in src/diff.c, diff/diff.c, and
> the rcsdiff man page.  And if you do decide to do it, please change the
> diff_usage message (in src/diff.c) to document all of the options rather
> than deferring to "rcsdiff-options".  (And, although I haven't looked, I
> suspect a similar change ought to be made to the Cederqvist manual.)
> 
> -Larry Jones
> 
> Pitiful.  Just pitiful. -- Calvin
Thanks for the pointers, and I love those C&H comments especially when they hit the 
context :).

- I have not looked at changing Cederqvist, I hate doing documentation but love to 
have it. :)
- I have updated the diff_usage message.
note: I looked through and tried to remove any option that did not show up in the
getopt_long call or in longopts[], but I could have missed one.

- from what I remember I think people on the list have suggested changing the 
following line
    "(The most popular is -c for context diffs but there are many more).\n"
to indicate that to generate patches the -u option was there i.e.
    "(The most popular is -c for context diffs and -u for patches).\n"
but as I could not find you or Greg indicating as such I did not change it.

-I have done some local testing of various  options and could not find that I had 
broken anything so this
should be good.(crosses fingers and grabs the asbestos)
--- diff.c      2000/04/01 00:27:55     1.1
+++ diff.c      2000/04/01 00:39:24
@@ -64,6 +64,7 @@
 /* FIXME: should be documenting all the options here.  They don't
    perfectly match rcsdiff options (for example, we always support
    --ifdef and --context, but rcsdiff only does if diff does).  */
+/*should this FIXME comment go away now? -- Todd*/
 static const char *const diff_usage[] =
 {
     "Usage: %s %s [-lNR] [rcsdiff-options]\n",
@@ -76,8 +77,67 @@
     "\t-r rev1\tDiff revision for rev1 against working file.\n",
     "\t-r rev2\tDiff rev1/date1 against rev2.\n",
     "\t--ifdef=arg\tOutput diffs in ifdef format.\n",
-    "(consult the documentation for your diff program for rcsdiff-options.\n",
-    "The most popular is -c for context diffs but there are many more).\n",
+    "  rcsdiff-options are as follows:\n",
+
+"\t-i  --ignore-case  Consider upper- and lower-case to be the same.\n",
+"\t-w  --ignore-all-space  Ignore all white space.\n",
+"\t-b  --ignore-space-change  Ignore changes in the amount of white space.\n",
+"\t-B  --ignore-blank-lines  Ignore changes whose lines are all blank.\n",
+"\t-I RE  --ignore-matching-lines=RE  Ignore changes whose lines all match RE.\n",
+"\t--binary  Read and write data in binary mode.\n",/*it is in the longopts
+                                                     i do not know if it 
+                                                     works*/
+"\t-a  --text  Treat all files as text.\n\n",
+"\t-c  -C NUM  --context[=NUM]  Output NUM (default 2) lines of copied context.\n",
+"\t-u  -U NUM  --unified[=NUM]  Output NUM (default 2) lines of unified context.\n",
+"\t  -NUM  Use NUM context lines.\n",
+"\t  -L LABEL  --label LABEL  Use LABEL instead of file name.\n",
+"\t  -p  --show-c-function  Show which C function each change is in.\n",
+"\t  -F RE  --show-function-line=RE  Show the most recent line matching RE.\n",
+"\t-e  --ed  Output an ed script.\n",
+"\t-n  --rcs  Output an RCS format diff.\n",
+"\t-y  --side-by-side  Output in two columns.\n",
+"\t  --width=NUM  Output at most NUM (default 130) characters per line.\n",
+"\t  --left-column  Output only the left column of common lines.\n",
+"\t  --suppress-common-lines  Do not output common lines.\n",
+"\t-DNAME  --ifdef=NAME  Output merged file to show `#ifdef NAME' diffs.\n",
+"\t--GTYPE-group-format=GFMT  Similar, but format GTYPE input groups with GFMT.\n",
+"\t--line-format=LFMT  Similar, but format all input lines with LFMT.\n",
+"\t--LTYPE-line-format=LFMT  Similar, but format LTYPE input lines with LFMT.\n",
+"\t  LTYPE is `old', `new', or `unchanged'.  GTYPE is LTYPE or `changed'.\n",
+"\t  GFMT may contain:\n",
+"\t    %<  lines from FILE1\n",
+"\t    %>  lines from FILE2\n",
+"\t    %=  lines common to FILE1 and FILE2\n",
+"\t    %[-][WIDTH][.[PREC]]{doxX}LETTER  printf-style spec for LETTER\n",
+"\t      LETTERs are as follows for new group, lower case for old group:\n",
+"\t        F  first line number\n",
+"\t        L  last line number\n",
+"\t        N  number of lines = L-F+1\n",
+"\t        E  F-1\n",
+"\t        M  L+1\n",
+"\t  LFMT may contain:\n",
+"\t    %L  contents of line\n",
+"\t    %l  contents of line, excluding any trailing newline\n",
+"\t    %[-][WIDTH][.[PREC]]{doxX}n  printf-style spec for input line number\n",
+"\t  Either GFMT or LFMT may contain:\n",
+"\t    %%  %\n",
+"\t    %c'C'  the single character C\n",
+"\t    %c'\\OOO'  the character with octal code OOO\n\n",
+"\t-l  --paginate  Pass the output through `pr' to paginate it.\n",
+"\t-t  --expand-tabs  Expand tabs to spaces in output.\n",
+/* "\t-T  --initial-tab  Make tabs line up by prepending a tab.\n\n", */
+    /* there is a conflict between -T in diff(the above) and rcsdiff
+       (Preserve the modification time on the RCS file...) 
+       we could do either but as it is a conflict we do neither. --Todd*/
+"\t-N  --new-file  Treat absent files as empty.\n",
+"\t-s  --report-identical-files  Report when two files are the same.\n",
+"\t--horizon-lines=NUM  Keep NUM lines of the common prefix and suffix.\n",
+"\t-d  --minimal  Try hard to find a smaller set of changes.\n",
+"\t-H  --speed-large-files  Assume large files and many scattered small changes.\n\n",
+
+    "\n",
+    "(The most popular is -c for context diffs but there are many more).\n",
     "(Specify the --help global option for a list of other help options)\n",
     NULL
 };
@@ -138,7 +198,7 @@
     {"report-identical-files", 0, 0, 's'},
     {"expand-tabs", 0, 0, 't'},
     {"ignore-all-space", 0, 0, 'w'},
-    {"side-by-side", 0, 0, 147},
+    {"side-by-side", 0, 0, 'y'}, 
     {"unified", 2, 0, 146},
     {"left-column", 0, 0, 129},
     {"suppress-common-lines", 0, 0, 130},
@@ -185,6 +245,9 @@
    anything.)  For the purposes of producing output, CVS diff appears
    mostly to ignore -q.  Maybe this should be fixed, but I think it's
    a larger issue than the changes included here.  */
+/* the -y option was not used by rcsdiff, only passed to diff.
+   -y: have diff output side by side differences.
+   the other options are noted correctly. -- Todd*/
 
 static void strcat_and_allocate PROTO ((char **, size_t *, const char *));
 
@@ -246,7 +309,7 @@
 
     optind = 0;
     while ((c = getopt_long (argc, argv,
-              "+abcdefhilnpstuw0123456789BHNRC:D:F:I:L:U:V:W:k:r:",
+              "+abcdefhilnpstuyw0123456789BHNRC:D:F:I:L:U:V:W:k:r:",
                             longopts, &option_index)) != -1)
     {
        switch (c)
@@ -255,7 +318,7 @@
            case 'h': case 'i': case 'n': case 'p': case 's': case 't':
            case 'u': case 'w': case '0': case '1': case '2':
            case '3': case '4': case '5': case '6': case '7': case '8':
-           case '9': case 'B': case 'H':
+           case '9': case 'B': case 'H': case 'y':
                (void) sprintf (tmp, " -%c", (char) c);
                strcat_and_allocate (&opts, &opts_allocated, tmp);
                break;
@@ -283,7 +346,7 @@
            case 129: case 130:           case 132: case 133: case 134:
            case 135: case 136: case 137: case 138: case 139: case 140:
            case 141: case 142: case 143: case 144: case 145: case 146:
-           case 147: case 148:
+           case 148:
                strcat_and_allocate (&opts, &opts_allocated, " --");
                strcat_and_allocate (&opts, &opts_allocated,
                                     longopts[option_index].name);
The opinions expressed here are not sanctioned by and do not necessarily 
represent those of my employer.

Reply via email to