Support the environtmental var "CVS_OPTIONS". Which can hold a set of

default options for cvs.  These options are interpreted first and can be
overwritten by explicit command line parameters.

Obtained from:	GNU Grep 2.3
This commit is contained in:
David E. O'Brien 1999-12-04 01:23:26 +00:00
parent 6af65c6902
commit eaf4925a25
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=54107
7 changed files with 250 additions and 2 deletions

View File

@ -233,7 +233,10 @@ environment variable is set.
.B \-R
Turns on read-only repository mode. This allows one to check out from a
read-only repository, such as within an anoncvs server, or from a CDROM
repository. Using
repository.
Same effect as if the
.SM CVSREADONLYFS
environment variable is set. Using
.B \-R
can also considerably speed up checkout's over NFS.
.TP
@ -2047,6 +2050,13 @@ will try hard to make the files in your working directory read-only.
When this is not set, the default behavior is to permit modification
of your working files.
.TP
.SM CVSREADONLYFS
If this is set, the
.B \-R
option is assumed, and
.B cvs
operates in read-only repository mode.
.TP
.SM RCSBIN
Specifies the full pathname where to find
.SM RCS
@ -2072,6 +2082,12 @@ If this variable is set then
.B cvs
will ignore all references to remote repositories in the CVS/Root file.
.TP
.SM CVS_OPTIONS
Specifies a set of default options for
.B cvs.
These options are interpreted before the startup file (\fI~/.cvsrc\fP) is read
and can be overridden by explicit command line parameters.
.TP
.SM CVS_RSH
.B cvs
uses the contents of this variable to determine the name of the

View File

@ -12,7 +12,10 @@
*
*/
/* $FreeBSD$ */
#include "cvs.h"
#include "prepend_args.h"
#ifdef HAVE_WINSOCK_H
#include <winsock.h>
@ -465,6 +468,8 @@ main (argc, argv)
logoff = 1;
}
prepend_default_options (getenv ("CVS_OPTIONS"), &argc, &argv);
/* Set this to 0 to force getopt initialization. getopt() sets
this to 1 internally. */
optind = 0;

View File

@ -0,0 +1,87 @@
/* prepend_args.c - utilility programs for manpiulating argv[]
Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* $FreeBSD$ */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "cvs.h"
#include "../diff/system.h"
#include "prepend_args.h"
/* Find the white-space-separated options specified by OPTIONS, and
using BUF to store copies of these options, set ARGV[0], ARGV[1],
etc. to the option copies. Return the number N of options found.
Do not set ARGV[N] to NULL. If ARGV is NULL, do not store ARGV[0]
etc. Backslash can be used to escape whitespace (and backslashes). */
static int
prepend_args (options, buf, argv)
char const *options;
char *buf;
char **argv;
{
char const *o = options;
char *b = buf;
int n = 0;
for (;;)
{
while (ISSPACE ((unsigned char) *o))
o++;
if (!*o)
return n;
if (argv)
argv[n] = b;
n++;
do
if ((*b++ = *o++) == '\\' && *o)
b[-1] = *o++;
while (*o && ! ISSPACE ((unsigned char) *o));
*b++ = '\0';
}
}
/* Prepend the whitespace-separated options in OPTIONS to the argument
vector of a main program with argument count *PARGC and argument
vector *PARGV. */
void
prepend_default_options (options, pargc, pargv)
char const *options;
int *pargc;
char ***pargv;
{
if (options)
{
char *buf = xmalloc (strlen (options) + 1);
int prepended = prepend_args (options, buf, (char **) NULL);
int argc = *pargc;
char * const *argv = *pargv;
char **pp = (char **) xmalloc ((prepended + argc + 1) * sizeof *pp);
*pargc = prepended + argc;
*pargv = pp;
*pp++ = *argv++;
pp += prepend_args (options, buf, pp);
while ((*pp++ = *argv++))
continue;
}
}

View File

@ -0,0 +1,26 @@
/* prepend_args.h - utilility programs for manpiulating argv[]
Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* $FreeBSD$ */
/* This code, taken from GNU Grep, originally used the "PARAM" macro, as the
current GNU coding standards requires. Older GNU code used the "PROTO"
macro, before the GNU coding standards replaced it. We use the older
form here to keep from having to include another file in cvs/src/main.c. */
void prepend_default_options PROTO ((char const *, int *, char ***));

View File

@ -15,7 +15,8 @@ SRCS= add.c admin.c buffer.c checkin.c checkout.c classify.c client.c \
expand_path.c fileattr.c filesubr.c find_names.c \
hardlink.c hash.c history.c \
ignore.c import.c lock.c log.c login.c logmsg.c main.c mkmodules.c \
modules.c myndbm.c no_diff.c parseinfo.c patch.c rcs.c rcscmds.c \
modules.c myndbm.c no_diff.c parseinfo.c patch.c prepend_args.c \
rcs.c rcscmds.c \
recurse.c release.c remove.c repos.c root.c rtag.c run.c scramble.c \
server.c status.c subr.c tag.c update.c vers_ts.c version.c watch.c \
wrapper.c zlib.c

View File

@ -0,0 +1,87 @@
/* prepend_args.c - utilility programs for manpiulating argv[]
Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* $FreeBSD$ */
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "cvs.h"
#include "../diff/system.h"
#include "prepend_args.h"
/* Find the white-space-separated options specified by OPTIONS, and
using BUF to store copies of these options, set ARGV[0], ARGV[1],
etc. to the option copies. Return the number N of options found.
Do not set ARGV[N] to NULL. If ARGV is NULL, do not store ARGV[0]
etc. Backslash can be used to escape whitespace (and backslashes). */
static int
prepend_args (options, buf, argv)
char const *options;
char *buf;
char **argv;
{
char const *o = options;
char *b = buf;
int n = 0;
for (;;)
{
while (ISSPACE ((unsigned char) *o))
o++;
if (!*o)
return n;
if (argv)
argv[n] = b;
n++;
do
if ((*b++ = *o++) == '\\' && *o)
b[-1] = *o++;
while (*o && ! ISSPACE ((unsigned char) *o));
*b++ = '\0';
}
}
/* Prepend the whitespace-separated options in OPTIONS to the argument
vector of a main program with argument count *PARGC and argument
vector *PARGV. */
void
prepend_default_options (options, pargc, pargv)
char const *options;
int *pargc;
char ***pargv;
{
if (options)
{
char *buf = xmalloc (strlen (options) + 1);
int prepended = prepend_args (options, buf, (char **) NULL);
int argc = *pargc;
char * const *argv = *pargv;
char **pp = (char **) xmalloc ((prepended + argc + 1) * sizeof *pp);
*pargc = prepended + argc;
*pargv = pp;
*pp++ = *argv++;
pp += prepend_args (options, buf, pp);
while ((*pp++ = *argv++))
continue;
}
}

View File

@ -0,0 +1,26 @@
/* prepend_args.h - utilility programs for manpiulating argv[]
Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
/* $FreeBSD$ */
/* This code, taken from GNU Grep, originally used the "PARAM" macro, as the
current GNU coding standards requires. Older GNU code used the "PROTO"
macro, before the GNU coding standards replaced it. We use the older
form here to keep from having to include another file in cvs/src/main.c. */
void prepend_default_options PROTO ((char const *, int *, char ***));