diff options
author | 2005-03-30 17:43:04 +0000 | |
---|---|---|
committer | 2005-03-30 17:43:04 +0000 | |
commit | 16cfc147adf66f74ccd29abadfdbc20d244fb312 (patch) | |
tree | b53fae4d80a26eb8e0143047a04af923d17f78a6 /usr.bin/cvs/diff.c | |
parent | all architectures, like, why the hell not (diff) | |
download | wireguard-openbsd-16cfc147adf66f74ccd29abadfdbc20d244fb312.tar.xz wireguard-openbsd-16cfc147adf66f74ccd29abadfdbc20d244fb312.zip |
move all the client commands to the new command framework.
eliminates a lot of duplicate code.
ok jfb@
Diffstat (limited to 'usr.bin/cvs/diff.c')
-rw-r--r-- | usr.bin/cvs/diff.c | 102 |
1 files changed, 49 insertions, 53 deletions
diff --git a/usr.bin/cvs/diff.c b/usr.bin/cvs/diff.c index 2deefe08358..38fa4df1ff2 100644 --- a/usr.bin/cvs/diff.c +++ b/usr.bin/cvs/diff.c @@ -1,4 +1,4 @@ -/* $OpenBSD: diff.c,v 1.22 2005/02/27 00:22:08 jfb Exp $ */ +/* $OpenBSD: diff.c,v 1.23 2005/03/30 17:43:04 joris Exp $ */ /* * Copyright (C) Caldera International Inc. 2001-2002. * All rights reserved. @@ -213,9 +213,12 @@ struct excludes { char *splice(char *, char *); +int cvs_diff_options(char *, int, char **, int *); int cvs_diffreg(const char *, const char *); int cvs_diff_file(struct cvs_file *, void *); -int cvs_diff_sendflags(struct cvsroot *, struct diff_arg *); +int cvs_diff_sendflags(struct cvsroot *); +int cvs_diff_cleanup(void); + static void output(const char *, FILE *, const char *, FILE *); static void check(FILE *, FILE *); static void range(int, int, char *); @@ -337,40 +340,43 @@ u_char cup2low[256] = { 0xfd, 0xfe, 0xff }; +struct cvs_cmd_info cvs_diff = { + cvs_diff_options, + cvs_diff_sendflags, + cvs_diff_file, + cvs_diff_cleanup, + NULL, + CF_RECURSE | CF_IGNORE | CF_SORT | CF_KNOWN, + CVS_REQ_DIFF, + CVS_CMD_SENDDIR +}; + +static struct diff_arg *dap = NULL; +static int recurse; -/* - * cvs_diff() - * - * Handler for the `cvs diff' command. - * - * SYNOPSIS: cvs [args] diff [-clipu] [-D date] [-r rev] - */ int -cvs_diff(int argc, char **argv) +cvs_diff_options(char *opt, int argc, char **argv, int *arg) { - int ch, recurse, flags; - struct diff_arg darg; - struct cvsroot *root; - - context = CVS_DIFF_DEFCTX; - flags = CF_RECURSE|CF_IGNORE|CF_SORT|CF_KNOWN; - recurse = 1; + int ch; - memset(&darg, 0, sizeof(darg)); + dap = (struct diff_arg *)malloc(sizeof(*dap)); + if (dap == NULL) + return (EX_DATAERR); + dap->date1 = dap->date2 = dap->rev1 = dap->rev2 = NULL; strlcpy(diffargs, argv[0], sizeof(diffargs)); - while ((ch = getopt(argc, argv, "cD:liNpr:u")) != -1) { + while ((ch = getopt(argc, argv, opt)) != -1) { switch (ch) { case 'c': strlcat(diffargs, " -c", sizeof(diffargs)); format = D_CONTEXT; break; case 'D': - if (darg.date1 == NULL && darg.rev1 == NULL) - darg.date1 = optarg; - else if (darg.date2 == NULL && darg.rev2 == NULL) - darg.date2 = optarg; - else { + if (dap->date1 == NULL && dap->rev1 == NULL) { + dap->date1 = optarg; + } else if (dap->date2 == NULL && dap->rev2 == NULL) { + dap->date2 = optarg; + } else { cvs_log(LP_ERR, "no more than two revisions/dates can " "be specified"); @@ -379,7 +385,7 @@ cvs_diff(int argc, char **argv) case 'l': strlcat(diffargs, " -l", sizeof(diffargs)); recurse = 0; - flags &= ~CF_RECURSE; + cvs_diff.file_flags &= ~CF_RECURSE; break; case 'i': strlcat(diffargs, " -i", sizeof(diffargs)); @@ -394,11 +400,12 @@ cvs_diff(int argc, char **argv) pflag = 1; break; case 'r': - if ((darg.rev1 == NULL) && (darg.date1 == NULL)) - darg.rev1 = optarg; - else if ((darg.rev2 == NULL) && (darg.date2 == NULL)) - darg.rev2 = optarg; - else { + if ((dap->rev1 == NULL) && (dap->date1 == NULL)) { + dap->rev1 = optarg; + } else if ((dap->rev2 == NULL) && + (dap->date2 == NULL)) { + dap->rev2 = optarg; + } else { cvs_log(LP_ERR, "no more than two revisions/dates can " "be specified"); @@ -414,34 +421,24 @@ cvs_diff(int argc, char **argv) } } - argc -= optind; - argv += optind; - - if (argc == 0) { - cvs_files = cvs_file_get(".", flags); - } else - cvs_files = cvs_file_getspec(argv, argc, 0); - if (cvs_files == NULL) - return (EX_DATAERR); - - cvs_file_examine(cvs_files, cvs_diff_file, &darg); - - root = cvs_files->cf_ddat->cd_root; - if (root->cr_method != CVS_METHOD_LOCAL) { - cvs_senddir(root, cvs_files); - cvs_sendreq(root, CVS_REQ_DIFF, NULL); - } - + *arg = optind; return (0); } +int +cvs_diff_cleanup(void) +{ + if (dap != NULL) + free(dap); + return (0); +} /* * cvs_diff_sendflags() * */ int -cvs_diff_sendflags(struct cvsroot *root, struct diff_arg *dap) +cvs_diff_sendflags(struct cvsroot *root) { /* send the flags */ if (Nflag && (cvs_sendarg(root, "-N", 0) < 0)) @@ -487,12 +484,9 @@ cvs_diff_file(struct cvs_file *cfp, void *arg) BUF *b1, *b2; RCSNUM *r1, *r2; RCSFILE *rf; - struct diff_arg *dap; struct cvs_ent *entp; struct cvsroot *root; - dap = (struct diff_arg *)arg; - if (cfp->cf_type == DT_DIR) { if (cfp->cf_cvstat == CVS_FST_UNKNOWN) { root = cfp->cf_parent->cf_ddat->cd_root; @@ -500,11 +494,13 @@ cvs_diff_file(struct cvs_file *cfp, void *arg) CVS_FILE_NAME(cfp)); } else { root = cfp->cf_ddat->cd_root; +#if 0 if ((cfp->cf_parent == NULL) || (root != cfp->cf_parent->cf_ddat->cd_root)) { cvs_connect(root); - cvs_diff_sendflags(root, dap); + cvs_diff_sendflags(root); } +#endif cvs_senddir(root, cfp); } |