Douglas Finkle writes: > > The fix should, IMHO, be applied to the server. Maybe this feature > (cvswrappers MERGE directive) is what CVS developers had intended > to do, but have not yet fully implemented. I wish some of them > would kindly speak up. :-)
I hate to encourage anyone to use the wrappers functionality, but here is a patch that attempts to allow wrappers to specify MERGE for binary files. It should also allow merge options to work in client/server mode. Feel free to test and report back. Index: cvs.h =================================================================== RCS file: /cvs/ccvs/src/cvs.h,v retrieving revision 1.241 diff -u -r1.241 cvs.h --- cvs.h 25 Feb 2003 22:02:13 -0000 1.241 +++ cvs.h 27 Feb 2003 16:26:02 -0000 @@ -876,6 +876,7 @@ char *wrap_rcsoption PROTO ((const char *fileName, int asFlag)); char *wrap_tocvs_process_file PROTO((const char *fileName)); int wrap_merge_is_copy PROTO((const char *fileName)); +int wrap_merge_is_merge PROTO((const char *fileName)); void wrap_fromcvs_process_file PROTO ((const char *fileName)); void wrap_add_file PROTO((const char *file,int temp)); void wrap_add PROTO((char *line,int temp)); Index: update.c =================================================================== RCS file: /cvs/ccvs/src/update.c,v retrieving revision 1.204 diff -u -r1.204 update.c --- update.c 9 Feb 2003 04:13:28 -0000 1.204 +++ update.c 27 Feb 2003 16:26:05 -0000 @@ -2003,8 +2003,8 @@ copy_file (finfo->file, backup); xchmod (finfo->file, 1); - if (strcmp (vers->options, "-kb") == 0 - || wrap_merge_is_copy (finfo->file) + if ((strcmp (vers->options, "-kb") == 0 ? !wrap_merge_is_merge (finfo->file) + : wrap_merge_is_copy (finfo->file)) || special_file_mismatch (finfo, NULL, vers->vn_rcs)) { /* For binary files, a merge is always a conflict. Same for @@ -2165,14 +2165,16 @@ char *jdate1; char *jdate2; - TRACE ( 1, "join_file(%s, %s%s%s%s, %s, %s)", - finfo->file, - vers->tag ? vers->tag : "", - vers->tag ? " (" : "", - vers->vn_rcs ? vers->vn_rcs : "", - vers->tag ? ")" : "", - join_rev1 ? join_rev1 : "", - join_rev2 ? join_rev2 : "" ); + if (trace) + fprintf (stderr, "%s-> join_file(%s, %s%s%s%s, %s, %s)\n", + CLIENT_SERVER_STR, + finfo->file, + vers->tag ? vers->tag : "", + vers->tag ? " (" : "", + vers->vn_rcs ? vers->vn_rcs : "", + vers->tag ? ")" : "", + join_rev1 ? join_rev1 : "", + join_rev2 ? join_rev2 : ""); jrev1 = join_rev1; jrev2 = join_rev2; @@ -2524,8 +2526,8 @@ /* Avoid this in the text file case. See below for why. */ - && (strcmp (t_options, "-kb") == 0 - || wrap_merge_is_copy (finfo->file))) + && (strcmp (t_options, "-kb") == 0 ? !wrap_merge_is_merge (finfo->file) + : wrap_merge_is_copy (finfo->file))) { /* FIXME: Verify my comment below: * @@ -2567,8 +2569,8 @@ print. */ write_letter (finfo, 'U'); } - else if (strcmp (t_options, "-kb") == 0 - || wrap_merge_is_copy (finfo->file) + else if ((strcmp (t_options, "-kb") == 0 ? !wrap_merge_is_merge (finfo->file) + : wrap_merge_is_copy (finfo->file)) || special_file_mismatch (finfo, rev1, rev2)) { /* We are dealing with binary files, or files with a Index: wrapper.c =================================================================== RCS file: /cvs/ccvs/src/wrapper.c,v retrieving revision 1.31 diff -u -r1.31 wrapper.c --- wrapper.c 23 May 2002 18:13:17 -0000 1.31 +++ wrapper.c 27 Feb 2003 16:26:05 -0000 @@ -170,11 +170,6 @@ and (more importantly) where we found it. */ error (0, 0, "\ -t and -f wrapper options are not supported remotely; ignored"); - if (wrap_list[i]->mergeMethod == WRAP_COPY) - /* For greater studliness we would print the offending option - and (more importantly) where we found it. */ - error (0, 0, "\ --m wrapper option is not supported remotely; ignored"); send_to_server ("Argument -W\012Argument ", 0); send_to_server (wrap_list[i]->wildCard, 0); send_to_server (" -k '", 0); @@ -182,6 +177,11 @@ send_to_server (wrap_list[i]->rcsOption, 0); else send_to_server ("kv", 0); + if (wrap_list[i]->mergeMethod != + (wrap_list[i]->rcsOption && wrap_list[i]->rcsOption[0] == 'b') + ? WRAP_COPY : WRAP_MERGE) + send_to_server (wrap_list[i]->mergeMethod == WRAP_COPY ? + "' -m 'COPY" : "' -m 'MERGE", 0); send_to_server ("'\012", 0); } } @@ -574,10 +574,15 @@ const char *fileName; { WrapperEntry *e=wrap_matching_entry(fileName); - if(e==NULL || e->mergeMethod==WRAP_MERGE) - return 0; + return (e != NULL && e->mergeMethod == WRAP_COPY); +} - return 1; +int +wrap_merge_is_merge (fileName) + const char *fileName; +{ + WrapperEntry *e=wrap_matching_entry(fileName); + return (e != NULL && e->mergeMethod == WRAP_MERGE); } void -Larry Jones Just when I thought this junk was beginning to make sense. -- Calvin _______________________________________________ Info-cvs mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/info-cvs