diff options
author | Jean-Francois Brousseau <jfb@cvs.openbsd.org> | 2005-04-13 16:37:51 +0000 |
---|---|---|
committer | Jean-Francois Brousseau <jfb@cvs.openbsd.org> | 2005-04-13 16:37:51 +0000 |
commit | 1dc2aba9e4036dc1fbbfc48e971e7a4275a3fa9f (patch) | |
tree | 5e6ddf58d64d5984b20d7f164723bffb1fc69d9f /usr.bin | |
parent | 093229fbc48f0c156488ed2052541171587f30a7 (diff) |
cleanup and split the log code into two separate functions for local
and remote, and a first stab at the code for local log
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/cvs/getlog.c | 150 |
1 files changed, 82 insertions, 68 deletions
diff --git a/usr.bin/cvs/getlog.c b/usr.bin/cvs/getlog.c index 06a40c8d93c..9f799d6f75b 100644 --- a/usr.bin/cvs/getlog.c +++ b/usr.bin/cvs/getlog.c @@ -1,4 +1,4 @@ -/* $OpenBSD: getlog.c,v 1.19 2005/04/12 14:58:40 joris Exp $ */ +/* $OpenBSD: getlog.c,v 1.20 2005/04/13 16:37:50 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -47,10 +47,8 @@ #define CVS_GETLOG_REVEND \ "=============================================================================" -#ifdef notyet -static void cvs_getlog_print (const char *, RCSFILE *, u_int); -#endif static int cvs_getlog_file (CVSFILE *, void *); +static int cvs_getlog_local (CVSFILE *, void *); int cvs_getlog_options(char *, int, char **, int *); @@ -117,60 +115,38 @@ cvs_getlog_file(CVSFILE *cf, void *arg) repo = CVS_DIR_REPO(cf); if (cf->cf_type == DT_DIR) { - if (root->cr_method != CVS_METHOD_LOCAL) { - if (cf->cf_cvstat == CVS_FST_UNKNOWN) - ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, - CVS_FILE_NAME(cf)); - else - ret = cvs_senddir(root, cf); - } - + if (cf->cf_cvstat == CVS_FST_UNKNOWN) + ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, + CVS_FILE_NAME(cf)); + else + ret = cvs_senddir(root, cf); return (ret); } cvs_file_getpath(cf, fpath, sizeof(fpath)); entp = cvs_ent_getent(fpath); - if (root->cr_method != CVS_METHOD_LOCAL) { - if ((entp != NULL) && (cvs_sendentry(root, entp) < 0)) { - cvs_ent_free(entp); - return (CVS_EX_PROTO); - } - - switch (cf->cf_cvstat) { - case CVS_FST_UNKNOWN: - ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, - CVS_FILE_NAME(cf)); - break; - case CVS_FST_UPTODATE: - ret = cvs_sendreq(root, CVS_REQ_UNCHANGED, - CVS_FILE_NAME(cf)); - break; - case CVS_FST_ADDED: - case CVS_FST_MODIFIED: - ret = cvs_sendreq(root, CVS_REQ_ISMODIFIED, - CVS_FILE_NAME(cf)); - break; - default: - break; - } - } else { - if (cf->cf_cvstat == CVS_FST_UNKNOWN) { - cvs_printf("? %s\n", fpath); - return (0); - } - - snprintf(fpath, sizeof(fpath), "%s/%s/%s%s", - root->cr_dir, repo, CVS_FILE_NAME(cf), RCS_FILE_EXT); - - rf = rcs_open(fpath, RCS_READ); - if (rf == NULL) { - if (entp != NULL) - cvs_ent_free(entp); - return (CVS_EX_DATA); - } + if ((entp != NULL) && (cvs_sendentry(root, entp) < 0)) { + cvs_ent_free(entp); + return (-1); + } - rcs_close(rf); + switch (cf->cf_cvstat) { + case CVS_FST_UNKNOWN: + ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, + CVS_FILE_NAME(cf)); + break; + case CVS_FST_UPTODATE: + ret = cvs_sendreq(root, CVS_REQ_UNCHANGED, + CVS_FILE_NAME(cf)); + break; + case CVS_FST_ADDED: + case CVS_FST_MODIFIED: + ret = cvs_sendreq(root, CVS_REQ_ISMODIFIED, + CVS_FILE_NAME(cf)); + break; + default: + break; } if (entp != NULL) @@ -178,34 +154,72 @@ cvs_getlog_file(CVSFILE *cf, void *arg) return (ret); } -#ifdef notyet -static void -cvs_getlog_print(const char *file, RCSFILE *rfp, u_int flags) + + +static int +cvs_getlog_local(CVSFILE *cf, void *arg) { - char numbuf[64], datebuf[64], *sp; + int nrev; + char fpath[MAXPATHLEN], rcspath[MAXPATHLEN], numbuf[64]; + char *repo; + RCSFILE *rf; + struct rcs_sym *sym; struct rcs_delta *rdp; + struct cvsroot *root; + + cvs_file_getpath(cf, fpath, sizeof(fpath)); + if (cf->cf_cvstat == CVS_FST_UNKNOWN) { + cvs_printf("? %s\n", fpath); + return (0); + } + + if (cf->cf_type == DT_DIR) + return (0); - cvs_printf("RCS file: %s\nWorking file: %s\n", - rfp->rf_path, file); - cvs_printf("Working file: %s\n", (char *)NULL); - cvs_printf("head: %s\nbranch:\nlocks:\naccess list:\n"); - cvs_printf("symbolic names:\nkeyword substitutions:\n"); - cvs_printf("total revisions: %u;\tselected revisions: %u\n", 1, 1); + nrev = 0; + root = CVS_DIR_ROOT(cf); + repo = CVS_DIR_REPO(cf); + + snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s", + root->cr_dir, repo, CVS_FILE_NAME(cf), RCS_FILE_EXT); + + rf = rcs_open(rcspath, RCS_READ); + if (rf == NULL) + return (-1); + + cvs_printf("\nRCS file: %s\nWorking file: %s\n", rcspath, cf->cf_name); + cvs_printf("head: %s\n", + rcsnum_tostr(rcs_head_get(rf), numbuf, sizeof(numbuf))); + cvs_printf("branch: %s\n", + rcsnum_tostr(rcs_branch_get(rf), numbuf, sizeof(numbuf))); + cvs_printf("locks:\naccess list:\n"); + + cvs_printf("symbolic names:\n"); + TAILQ_FOREACH(sym, &(rf->rf_symbols), rs_list) { + cvs_printf("\t%s: %s\n", sym->rs_name, + rcsnum_tostr(sym->rs_num, numbuf, sizeof(numbuf))); + } + cvs_printf("keyword substitution: %s\n", ""); + cvs_printf("total revisions: %u;\tselected revisions: %u\n", + rf->rf_ndelta, nrev); cvs_printf("description:\n"); - for (;;) { - cvs_printf(CVS_GETLOG_REVSEP "\n"); + TAILQ_FOREACH(rdp, &(rf->rf_delta), rd_list) { rcsnum_tostr(rdp->rd_num, numbuf, sizeof(numbuf)); - cvs_printf("revision %s\n", numbuf); - cvs_printf("date: %d/%02d/%d %02d:%02d:%02d; author: %s;" - " state: %s; lines:", - rdp->rd_date.tm_year, rdp->rd_date.tm_mon + 1, + cvs_printf(CVS_GETLOG_REVSEP "\nrevision %s\n", numbuf); + cvs_printf("date: %d/%02d/%02d %02d:%02d:%02d; author: %s;" + " state: %s;\n", + rdp->rd_date.tm_year + 1900, rdp->rd_date.tm_mon + 1, rdp->rd_date.tm_mday, rdp->rd_date.tm_hour, rdp->rd_date.tm_min, rdp->rd_date.tm_sec, rdp->rd_author, rdp->rd_state); + cvs_printf("%s", rdp->rd_log); } cvs_printf(CVS_GETLOG_REVEND "\n"); + + rcs_close(rf); + + return (0); } -#endif |