This is log.c in view mode; [Download] [Up]
/*
* 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.4 kit.
*
* Print Log Information
*
* This line exists solely to test some pcl-cvs/ChangeLog stuff. You
* can delete it, if indeed it's still here when you read it. -Karl
*
* Prints the RCS "log" (rlog) information for the specified files. With no
* argument, prints the log information for all the files in the directory
* (recursive by default).
*/
#include "cvs.h"
#ifndef lint
static const char rcsid[] = "$CVSid: @(#)log.c 1.44 94/09/30 $";
USE(rcsid)
#endif
static Dtype log_dirproc PROTO((char *dir, char *repository, char *update_dir));
static int log_fileproc PROTO((char *file, char *update_dir, char *repository,
List * entries, List * srcfiles));
static const char *const log_usage[] =
{
"Usage: %s %s [-l] [rlog-options] [files...]\n",
"\t-l\tLocal directory only, no recursion.\n",
NULL
};
static int ac;
static char **av;
int
cvslog (argc, argv)
int argc;
char **argv;
{
int i;
int err = 0;
int local = 0;
if (argc == -1)
usage (log_usage);
/*
* All 'log' command options except -l are passed directly on to 'rlog'
*/
for (i = 1; i < argc && argv[i][0] == '-'; i++)
if (argv[i][1] == 'l')
local = 1;
wrap_setup ();
#ifdef CLIENT_SUPPORT
if (client_active) {
/* We're the local client. Fire up the remote server. */
start_server ();
ign_setup ();
for (i = 1; i < argc && argv[i][0] == '-'; i++)
send_arg (argv[i]);
#if 0
/* FIXME: We shouldn't have to send current files to get log entries, but it
doesn't work yet and I haven't debugged it. So send the files --
it's slower but it works. gnu@cygnus.com Apr94 */
send_file_names (argc - i, argv + i);
#else
send_files (argc - i, argv + i, local, 0);
#endif
if (fprintf (to_server, "log\n") < 0)
error (1, errno, "writing to server");
err = get_responses_and_close ();
return err;
}
ac = argc;
av = argv;
#endif
err = start_recursion (log_fileproc, (int (*) ()) NULL, log_dirproc,
(int (*) ()) NULL, argc - i, argv + i, local,
W_LOCAL | W_REPOS | W_ATTIC, 0, 1,
(char *) NULL, 1, 0);
return (err);
}
/*
* Do an rlog on a file
*/
/* ARGSUSED */
static int
log_fileproc (file, update_dir, repository, entries, srcfiles)
char *file;
char *update_dir;
char *repository;
List *entries;
List *srcfiles;
{
Node *p;
RCSNode *rcsfile;
int retcode = 0;
p = findnode (srcfiles, file);
if (p == NULL || (rcsfile = (RCSNode *) p->data) == NULL)
{
/* no rcs file. What *do* we know about this file? */
p = findnode (entries, file);
if (p != NULL)
{
Entnode *e;
e = (Entnode *) p->data;
if (e->version[0] == '0' || e->version[1] == '\0')
{
if (!really_quiet)
error (0, 0, "%s has been added, but not committed",
file);
return(0);
}
}
if (!really_quiet)
error (0, 0, "nothing known about %s", file);
return (1);
}
run_setup ("%s%s", Rcsbin, RCS_RLOG);
{
int i;
for (i = 1; i < ac && av[i][0] == '-'; i++)
if (av[i][1] != 'l')
run_arg (av[i]);
}
run_arg (rcsfile->path);
if (*update_dir)
{
char *workfile = xmalloc (strlen (update_dir) + strlen (file) + 2);
sprintf (workfile, "%s/%s", update_dir, file);
run_arg (workfile);
free (workfile);
}
if ((retcode = run_exec (RUN_TTY, RUN_TTY, RUN_TTY, RUN_REALLY)) == -1)
{
error (1, errno, "fork failed for rlog on %s", file);
}
return (retcode);
}
/*
* Print a warm fuzzy message
*/
/* ARGSUSED */
static Dtype
log_dirproc (dir, repository, update_dir)
char *dir;
char *repository;
char *update_dir;
{
if (!isdir (dir))
return (R_SKIP_ALL);
if (!quiet)
error (0, 0, "Logging %s", update_dir);
return (R_PROCESS);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.