summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/rcs/rcsprog.c46
1 files changed, 41 insertions, 5 deletions
diff --git a/usr.bin/rcs/rcsprog.c b/usr.bin/rcs/rcsprog.c
index 9c99544a623..077f9ceedc3 100644
--- a/usr.bin/rcs/rcsprog.c
+++ b/usr.bin/rcs/rcsprog.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rcsprog.c,v 1.23 2005/10/10 14:37:59 niallo Exp $ */
+/* $OpenBSD: rcsprog.c,v 1.24 2005/10/10 23:38:21 joris Exp $ */
/*
* Copyright (c) 2005 Jean-Francois Brousseau <jfb@openbsd.org>
* All rights reserved.
@@ -129,8 +129,8 @@ void
rcs_usage(void)
{
fprintf(stderr,
- "usage: %s [-hiLMUV] [-a users] [-b [rev]] [-c string] "
- "[-e users] [-k opt] file ...\n", __progname);
+ "usage: %s [-hiLMUV] [-a users] [-b [rev]] [-c string]\n"
+ "[-e users] [-k opt] [-m rev:log] file ...\n", __progname);
}
/*
@@ -144,16 +144,18 @@ rcs_main(int argc, char **argv)
{
int i, ch, flags, kflag, lkmode;
char fpath[MAXPATHLEN];
+ char *logstr, *logmsg;
char *oldfile, *alist, *comment, *elist, *unp, *sp;
mode_t fmode;
RCSFILE *file;
+ RCSNUM *logrev;
kflag = lkmode = -1;
fmode = 0;
flags = RCS_RDWR;
- oldfile = alist = comment = elist = NULL;
+ logstr = oldfile = alist = comment = elist = NULL;
- while ((ch = getopt(argc, argv, "A:a:b::c:e::hik:LMqUV")) != -1) {
+ while ((ch = getopt(argc, argv, "A:a:b::c:e::hik:Lm:MqUV")) != -1) {
switch (ch) {
case 'A':
oldfile = optarg;
@@ -187,6 +189,12 @@ rcs_main(int argc, char **argv)
cvs_log(LP_WARN, "-U overriden by -L");
lkmode = RCS_LOCK_STRICT;
break;
+ case 'm':
+ if ((logstr = strdup(optarg)) == NULL) {
+ cvs_log(LP_ERRNO, "failed to copy logstring");
+ exit(1);
+ }
+ break;
case 'M':
/* ignore for the moment */
break;
@@ -223,6 +231,31 @@ rcs_main(int argc, char **argv)
if (file == NULL)
continue;
+ if (logstr != NULL) {
+ if ((logmsg = strchr(logstr, ':')) == NULL) {
+ cvs_log(LP_ERR, "missing log message");
+ rcs_close(file);
+ continue;
+ }
+
+ *logmsg++ = '\0';
+ if ((logrev = rcsnum_parse(logstr)) == NULL) {
+ cvs_log(LP_ERR, "'%s' bad revision number", logstr);
+ rcs_close(file);
+ continue;
+ }
+
+ if (rcs_rev_setlog(file, logrev, logmsg) < 0) {
+ cvs_log(LP_ERR,
+ "failed to set logmsg for '%s' to '%s'",
+ logstr, logmsg);
+ rcs_close(file);
+ continue;
+ }
+
+ rcsnum_free(logrev);
+ }
+
/* entries to add to the access list */
if (alist != NULL) {
unp = alist;
@@ -252,5 +285,8 @@ rcs_main(int argc, char **argv)
printf("done\n");
}
+ if (logstr != NULL)
+ free(logstr);
+
return (0);
}