File: [local] / src / usr.bin / rcs / ci.c (download)
Revision 1.1, Fri Sep 30 16:37:27 2005 UTC (18 years, 8 months ago) by niallo
Branch: MAIN
add a basic ci.c as a starting point. requires more changes to rcs api
to work properly.
ok joris@
|
/* $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);
}