=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/getlog.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- src/usr.bin/cvs/getlog.c 2005/04/13 16:37:50 1.20 +++ src/usr.bin/cvs/getlog.c 2005/04/13 19:44:42 1.21 @@ -1,4 +1,4 @@ -/* $OpenBSD: getlog.c,v 1.20 2005/04/13 16:37:50 jfb Exp $ */ +/* $OpenBSD: getlog.c,v 1.21 2005/04/13 19:44:42 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. @@ -47,7 +47,7 @@ #define CVS_GETLOG_REVEND \ "=============================================================================" -static int cvs_getlog_file (CVSFILE *, void *); +static int cvs_getlog_remote (CVSFILE *, void *); static int cvs_getlog_local (CVSFILE *, void *); int cvs_getlog_options(char *, int, char **, int *); @@ -55,15 +55,16 @@ struct cvs_cmd_info cvs_getlog = { cvs_getlog_options, NULL, - cvs_getlog_file, + cvs_getlog_remote, NULL, NULL, CF_RECURSE, CVS_REQ_LOG, CVS_CMD_SENDDIR | CVS_CMD_ALLOWSPEC | CVS_CMD_SENDARGS2 }; -static int rfonly = 0; -static int honly = 0; +static int log_rfonly = 0; +static int log_honly = 0; +static int log_notags = 0; int cvs_getlog_options(char *opt, int argc, char **argv, int *arg) @@ -75,13 +76,16 @@ case 'd': break; case 'h': - honly = 1; + log_honly = 1; break; case 'l': cvs_getlog.file_flags &= ~CF_RECURSE; break; + case 'N': + log_notags = 1; + break; case 'R': - rfonly = 1; + log_rfonly = 1; break; case 'r': break; @@ -96,21 +100,18 @@ /* - * cvs_getlog_file() + * cvs_getlog_remote() * - * Diff a single file. */ static int -cvs_getlog_file(CVSFILE *cf, void *arg) +cvs_getlog_remote(CVSFILE *cf, void *arg) { int ret; char *repo, fpath[MAXPATHLEN]; - RCSFILE *rf; struct cvsroot *root; struct cvs_ent *entp; ret = 0; - rf = NULL; root = CVS_DIR_ROOT(cf); repo = CVS_DIR_REPO(cf); @@ -133,17 +134,14 @@ switch (cf->cf_cvstat) { case CVS_FST_UNKNOWN: - ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, - CVS_FILE_NAME(cf)); + ret = cvs_sendreq(root, CVS_REQ_QUESTIONABLE, cf->cf_name); break; case CVS_FST_UPTODATE: - ret = cvs_sendreq(root, CVS_REQ_UNCHANGED, - CVS_FILE_NAME(cf)); + ret = cvs_sendreq(root, CVS_REQ_UNCHANGED, cf->cf_name); break; case CVS_FST_ADDED: case CVS_FST_MODIFIED: - ret = cvs_sendreq(root, CVS_REQ_ISMODIFIED, - CVS_FILE_NAME(cf)); + ret = cvs_sendreq(root, CVS_REQ_ISMODIFIED, cf->cf_name); break; default: break; @@ -160,21 +158,23 @@ cvs_getlog_local(CVSFILE *cf, void *arg) { int nrev; - char fpath[MAXPATHLEN], rcspath[MAXPATHLEN], numbuf[64]; + char rcspath[MAXPATHLEN], numbuf[64]; char *repo; RCSFILE *rf; struct rcs_sym *sym; struct rcs_delta *rdp; + struct rcs_access *acp; struct cvsroot *root; - cvs_file_getpath(cf, fpath, sizeof(fpath)); if (cf->cf_cvstat == CVS_FST_UNKNOWN) { - cvs_printf("? %s\n", fpath); + cvs_log(LP_WARN, "nothing known about %s", cf->cf_name); return (0); } - if (cf->cf_type == DT_DIR) + if (cf->cf_type == DT_DIR) { + cvs_log(LP_INFO, "Logging %s", cf->cf_name); return (0); + } nrev = 0; root = CVS_DIR_ROOT(cf); @@ -183,6 +183,11 @@ snprintf(rcspath, sizeof(rcspath), "%s/%s/%s%s", root->cr_dir, repo, CVS_FILE_NAME(cf), RCS_FILE_EXT); + if (log_rfonly) { + cvs_printf("%s\n", rcspath); + return (0); + } + rf = rcs_open(rcspath, RCS_READ); if (rf == NULL) return (-1); @@ -192,29 +197,39 @@ 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("locks: %s\n", (rf->rf_flags & RCS_SLOCK) ? "strict" : ""); - 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("access list:\n"); + TAILQ_FOREACH(acp, &(rf->rf_access), ra_list) + cvs_printf("\t%s\n", acp->ra_name); + + if (!log_notags) { + 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"); - - TAILQ_FOREACH(rdp, &(rf->rf_delta), rd_list) { - rcsnum_tostr(rdp->rd_num, numbuf, sizeof(numbuf)); - 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); + if (log_honly) + cvs_printf("total revisions: %u;\n", rf->rf_ndelta); + else { + cvs_printf("total revisions: %u;\tselected revisions: %u\n", + rf->rf_ndelta, nrev); + cvs_printf("description:\n%s", rf->rf_desc); + TAILQ_FOREACH(rdp, &(rf->rf_delta), rd_list) { + rcsnum_tostr(rdp->rd_num, numbuf, sizeof(numbuf)); + 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");