diff options
author | Niall O'Higgins <niallo@cvs.openbsd.org> | 2005-09-30 16:37:28 +0000 |
---|---|---|
committer | Niall O'Higgins <niallo@cvs.openbsd.org> | 2005-09-30 16:37:28 +0000 |
commit | bff7c2fddfa530273b20f870e81d244c1cba549e (patch) | |
tree | 87691f1db55de34ef42b4d192ad757afd3fa116c /usr.bin | |
parent | 01f9816c65f7be13d83489f6de7ecb9e0f9ae3c1 (diff) |
add a basic ci.c as a starting point. requires more changes to rcs api
to work properly.
ok joris@
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/rcs/Makefile | 4 | ||||
-rw-r--r-- | usr.bin/rcs/ci.c | 157 |
2 files changed, 159 insertions, 2 deletions
diff --git a/usr.bin/rcs/Makefile b/usr.bin/rcs/Makefile index cec1a558101..5befc65fb59 100644 --- a/usr.bin/rcs/Makefile +++ b/usr.bin/rcs/Makefile @@ -1,11 +1,11 @@ -# $OpenBSD: Makefile,v 1.4 2005/09/29 15:16:26 joris Exp $ +# $OpenBSD: Makefile,v 1.5 2005/09/30 16:37:27 niallo Exp $ .PATH: ${.CURDIR}/../cvs PROG= rcs MAN= rcs.1 -SRCS= co.c rcsprog.c buf.c log.c rcs.c rcsnum.c strtab.c +SRCS= ci.c co.c rcsprog.c buf.c log.c rcs.c rcsnum.c strtab.c CFLAGS+=-I${.CURDIR}/../cvs # Don't build the links until we actually support those commands diff --git a/usr.bin/rcs/ci.c b/usr.bin/rcs/ci.c new file mode 100644 index 00000000000..0b60360df8a --- /dev/null +++ b/usr.bin/rcs/ci.c @@ -0,0 +1,157 @@ +/* $OpenBSD: ci.c,v 1.1 2005/09/30 16:37:27 niallo Exp $ */ +/* + * Copyright (c) 2005 Niall O'Higgins <niallo@openbsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following cinditions + * are met: + * + * 1. Redistributions of source cide must retain the above cipyright + * notice, this list of cinditions and the following disclaimer. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/param.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/wait.h> + +#include <err.h> +#include <pwd.h> +#include <errno.h> +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <signal.h> +#include <string.h> + +#include "log.h" +#include "rcs.h" +#include "rcsprog.h" + +extern char *__progname; + +void +checkin_usage(void) +{ + fprintf(stderr, + "usage: %s [-jlMNqu] [-d date | -r rev] [-m msg] [-k mode] " + "file ...\n", __progname); +} + +/* + * checkin_main() + * + * Handler for the `ci' program. + * Returns 0 on success, or >0 on error. + */ +/* +Options: + +-r | -r[rev]: check in revision rev +-l[rev]: ", but do co -l +-u[rev]: ", bt do co -u +-f[rev]: force a deposit (check in?) +-k[rev]: ? +-q[rev]: quiet mode +-i[rev]: initial check in, errors if RCS file already exists. +-j[rev]: just checkin and do not initialize, errors if RCS file already exists. +-I[rev]: user is prompted even if stdin is not a tty +-d[date]: uses date for checkin dat and time. +-M[rev]: set modification time on any new working file to be that of the retrieved version. +-mmsg: msg is the log message, don't start editor. log messages with #are comments. +*/ +int +checkin_main(int argc, char **argv) +{ + int i, ch, dflag, flags, lkmode; + mode_t fmode; + RCSFILE *file; + char fpath[MAXPATHLEN]; + char *rcs_msg, *rev; + + lkmode = -1; + flags = RCS_RDWR; + file = NULL; + rev = rcs_msg = NULL; + fmode = dflag = 0; + + cvs_log_init(LD_STD, 0); + + while ((ch = getopt(argc, argv, "j:l:M:N:qu:d:r::m:k:")) != -1) { + switch (ch) { + case 'h': + (usage)(); + exit(0); + case 'l': + lkmode = RCS_LOCK_STRICT; + break; + case 'm': + rcs_msg = optarg; + break; + case 'r': + rev = optarg; + break; + case 'V': + printf("%s\n", rcs_version); + exit(0); + default: + (usage)(); + exit(1); + } + } + + argc -= optind; + argv += optind; + if (argc == 0) { + cvs_log(LP_ERR, "no input file"); + (usage)(); + exit(1); + } + + for (i = 0; i < argc; i++) { + if (rcs_statfile(argv[i], fpath, sizeof(fpath)) < 0) + continue; + + flags = RCS_RDWR; + file = rcs_open(fpath, flags, fmode); + if (file == NULL) { + exit(1); + } + if (rcs_msg == NULL) { + cvs_log(LP_ERR, "no log message"); + exit(1); + } + if (rev != NULL ) { + /* XXX */ + } else { + if (dflag) { + /* XXX */ + } else { + if (rcs_rev_add(file, RCS_HEAD_REV, rcs_msg, -1) + != 0) { + cvs_log(LP_ERR, + "rcs_rev_add() failure"); + exit(1); + } + } + } + rcs_close(file); + } + + exit(0); +} |