=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/diff.c,v retrieving revision 1.157 retrieving revision 1.158 diff -u -r1.157 -r1.158 --- src/usr.bin/cvs/diff.c 2010/07/23 21:46:05 1.157 +++ src/usr.bin/cvs/diff.c 2010/07/28 21:19:30 1.158 @@ -1,4 +1,4 @@ -/* $OpenBSD: diff.c,v 1.157 2010/07/23 21:46:05 ray Exp $ */ +/* $OpenBSD: diff.c,v 1.158 2010/07/28 21:19:30 nicm Exp $ */ /* * Copyright (c) 2008 Tobias Stoeckmann * Copyright (c) 2006 Joris Vink @@ -49,7 +49,7 @@ "Show differences between revisions", "[-abcdilNnpRuw] [[-D date] [-r rev] [-D date2 | -r rev2]] " "[-k mode] [file ...]", - "abcfdD:ik:lNnpr:Ruw", + "abcfC:dD:ik:lNnpr:RuU:w", NULL, cvs_diff }; @@ -70,6 +70,7 @@ { int ch, flags; char *arg = "."; + const char *errstr; struct cvs_recursion cr; flags = CR_RECURSE_DIRS; @@ -91,6 +92,14 @@ strlcat(diffargs, " -c", sizeof(diffargs)); diff_format = D_CONTEXT; break; + case 'C': + diff_context = strtonum(optarg, 0, INT_MAX, &errstr); + if (errstr != NULL) + fatal("context lines %s: %s", errstr, optarg); + strlcat(diffargs, " -C ", sizeof(diffargs)); + strlcat(diffargs, optarg, sizeof(diffargs)); + diff_format = D_CONTEXT; + break; case 'd': strlcat(diffargs, " -d", sizeof(diffargs)); dflags |= D_MINIMAL; @@ -161,6 +170,14 @@ strlcat(diffargs, " -u", sizeof(diffargs)); diff_format = D_UNIFIED; break; + case 'U': + diff_context = strtonum(optarg, 0, INT_MAX, &errstr); + if (errstr != NULL) + fatal("context lines %s: %s", errstr, optarg); + strlcat(diffargs, " -U ", sizeof(diffargs)); + strlcat(diffargs, optarg, sizeof(diffargs)); + diff_format = D_UNIFIED; + break; case 'V': fatal("the -V option is obsolete " "and should not be used"); @@ -209,13 +226,23 @@ switch (diff_format) { case D_CONTEXT: - cvs_client_send_request("Argument -c"); + if (cvs_cmdop == CVS_OP_RDIFF) + cvs_client_send_request("Argument -c"); + else { + cvs_client_send_request("Argument -C %d", + diff_context); + } break; case D_RCSDIFF: cvs_client_send_request("Argument -n"); break; case D_UNIFIED: - cvs_client_send_request("Argument -u"); + if (cvs_cmdop == CVS_OP_RDIFF) + cvs_client_send_request("Argument -u"); + else { + cvs_client_send_request("Argument -U %d", + diff_context); + } break; default: break;