home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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);
- }
-