summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorJean-Francois Brousseau <jfb@cvs.openbsd.org>2005-04-13 16:37:51 +0000
committerJean-Francois Brousseau <jfb@cvs.openbsd.org>2005-04-13 16:37:51 +0000
commit1dc2aba9e4036dc1fbbfc48e971e7a4275a3fa9f (patch)
tree5e6ddf58d64d5984b20d7f164723bffb1fc69d9f /usr.bin
parent093229fbc48f0c156488ed2052541171587f30a7 (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.c150
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