diff options
Diffstat (limited to 'gnu/usr.bin/cvs/cvs/admin.c')
| -rw-r--r-- | gnu/usr.bin/cvs/cvs/admin.c | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/gnu/usr.bin/cvs/cvs/admin.c b/gnu/usr.bin/cvs/cvs/admin.c new file mode 100644 index 000000000000..91d3929a83e2 --- /dev/null +++ b/gnu/usr.bin/cvs/cvs/admin.c @@ -0,0 +1,124 @@ +/* + * Copyright (c) 1992, Brian Berliner and Jeff Polk + * Copyright (c) 1989-1992, Brian Berliner + * + * You may distribute under the terms of the GNU General Public License as + * specified in the README file that comes with the CVS 1.3 kit. + * + * Administration + * + * For now, this is basically a front end for rcs. All options are passed + * directly on. + */ + +#include "cvs.h" + +#ifndef lint +static char rcsid[] = "@(#)admin.c 1.17 92/03/31"; +#endif + +#if __STDC__ +static Dtype admin_dirproc (char *dir, char *repos, char *update_dir); +static int admin_fileproc (char *file, char *update_dir, + char *repository, List *entries, + List *srcfiles); +#else +static int admin_fileproc (); +static Dtype admin_dirproc (); +#endif /* __STDC__ */ + +static char *admin_usage[] = +{ + "Usage: %s %s rcs-options files...\n", + NULL +}; + +static int ac; +static char **av; + +int +admin (argc, argv) + int argc; + char *argv[]; +{ + int err; + + if (argc <= 1) + usage (admin_usage); + + /* skip all optional arguments to see if we have any file names */ + for (ac = 1; ac < argc; ac++) + if (argv[ac][0] != '-') + break; + argc -= ac; + av = argv + 1; + argv += ac; + ac--; + if (ac == 0 || argc == 0) + usage (admin_usage); + + /* start the recursion processor */ + err = start_recursion (admin_fileproc, (int (*) ()) NULL, admin_dirproc, + (int (*) ()) NULL, argc, argv, 0, + W_LOCAL, 0, 1, (char *) NULL, 1); + return (err); +} + +/* + * Called to run "rcs" on a particular file. + */ +/* ARGSUSED */ +static int +admin_fileproc (file, update_dir, repository, entries, srcfiles) + char *file; + char *update_dir; + char *repository; + List *entries; + List *srcfiles; +{ + Vers_TS *vers; + char *version; + char **argv; + int argc; + int retcode = 0; + + vers = Version_TS (repository, (char *) NULL, (char *) NULL, (char *) NULL, + file, 0, 0, entries, srcfiles); + + version = vers->vn_user; + if (version == NULL) + return (0); + else if (strcmp (version, "0") == 0) + { + error (0, 0, "cannot admin newly added file `%s'", file); + return (0); + } + + run_setup ("%s%s", Rcsbin, RCS); + for (argc = ac, argv = av; argc; argc--, argv++) + run_arg (*argv); + run_arg (vers->srcfile->path); + if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_NORMAL)) != 0) + { + if (!quiet) + error (0, retcode == -1 ? errno : 0, + "%s failed for `%s'", RCS, file); + return (1); + } + return (0); +} + +/* + * Print a warm fuzzy message + */ +/* ARGSUSED */ +static Dtype +admin_dirproc (dir, repos, update_dir) + char *dir; + char *repos; + char *update_dir; +{ + if (!quiet) + error (0, 0, "Administrating %s", update_dir); + return (R_PROCESS); +} |
