mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-28 13:22:48 +00:00
After looking around at what the other *BSD's do for their $xxxBSD$ tags,
take the easy way out and implement the beginnings of something similar. Don't worry, the code here is *dormant* so far, some "help" from cvs is required. This is going in now so that jdp can see what I'm working on. This is an extension of the previous existing skeleton $FreeBSD$ code.
This commit is contained in:
parent
ae02ebaab4
commit
e6da6cbc7d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=25699
@ -178,7 +178,7 @@ static void cleanup P((void));
|
||||
|
||||
static char const quietarg[] = "-q";
|
||||
|
||||
static char const *expandarg, *suffixarg, *versionarg, *zonearg, *incexcarg;
|
||||
static char const *expandarg, *suffixarg, *versionarg, *zonearg;
|
||||
static char const **joinlist; /* revisions to be joined */
|
||||
static int joinlength;
|
||||
static FILE *neworkptr;
|
||||
@ -191,7 +191,7 @@ static struct hshentries *gendeltas; /* deltas to be generated */
|
||||
static struct hshentry *targetdelta; /* final delta to be generated */
|
||||
static struct stat workstat;
|
||||
|
||||
mainProg(coId, "co", "$Id$")
|
||||
mainProg(coId, "co", "$Id: co.c,v 1.8 1997/02/22 15:47:21 peter Exp $")
|
||||
{
|
||||
static char const cmdusage[] =
|
||||
"\nco usage: co -{fIlMpqru}[rev] -ddate -jjoins -ksubst -sstate -T -w[who] -Vn -xsuff -zzone file ...";
|
||||
@ -314,11 +314,6 @@ mainProg(coId, "co", "$Id$")
|
||||
zone_set(a);
|
||||
break;
|
||||
|
||||
case 'K': /* set keyword inclusions/exclusions */
|
||||
incexcarg = *argv;
|
||||
setIncExc(incexcarg);
|
||||
break;
|
||||
|
||||
case 'k': /* set keyword expand mode */
|
||||
expandarg = *argv;
|
||||
if (0 <= expmode) redefined('k');
|
||||
|
@ -7,8 +7,8 @@ SRCS = maketime.c partime.c rcsedit.c rcsfcmp.c rcsfnms.c rcsgen.c \
|
||||
rcskeep.c rcskeys.c rcslex.c rcsmap.c rcsrev.c rcssyn.c rcstime.c \
|
||||
rcsutil.c merger.c version.c
|
||||
|
||||
NOPROFILE=noprofile
|
||||
|
||||
install:
|
||||
NOPROFILE= noprofile
|
||||
INTERNALLIB= true
|
||||
INTERNALSTATICLIB= true
|
||||
|
||||
.include <bsd.lib.mk>
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* RCS common definitions and data structures */
|
||||
|
||||
#define RCSBASE "$Id$"
|
||||
#define RCSBASE "$Id: rcsbase.h,v 1.8 1997/02/22 15:47:33 peter Exp $"
|
||||
|
||||
/* Copyright 1982, 1988, 1989 Walter Tichy
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert
|
||||
@ -426,11 +426,12 @@ struct assoc {
|
||||
#define REVISION "Revision"
|
||||
#define SOURCE "Source"
|
||||
#define STATE "State"
|
||||
#define FREEBSD "FreeBSD"
|
||||
#define keylength 8 /* max length of any of the above keywords */
|
||||
#define CVSHEADER "CVSHeader"
|
||||
#define keylength 9 /* max length of any of the above keywords */
|
||||
|
||||
enum markers { Nomatch, Author, Date, Header, Id,
|
||||
Locker, Log, Name, RCSfile, Revision, Source, State, FreeBSD };
|
||||
Locker, Log, Name, RCSfile, Revision, Source, State, CVSHeader,
|
||||
LocalId };
|
||||
/* This must be in the same order as rcskeys.c's Keyword[] array. */
|
||||
|
||||
#define DELNUMFORM "\n\n%s\n%s\n"
|
||||
@ -501,6 +502,7 @@ RILE *rcsreadopen P((struct buf*,struct stat*,int));
|
||||
char *bufenlarge P((struct buf*,char const**));
|
||||
char const *basefilename P((char const*));
|
||||
char const *getfullRCSname P((void));
|
||||
char const *getfullCVSname P((void));
|
||||
char const *maketemp P((int));
|
||||
char const *rcssuffix P((char const*));
|
||||
int pairnames P((int,char**,RILE*(*)P((struct buf*,struct stat*,int)),int,int));
|
||||
@ -531,8 +533,11 @@ extern struct buf prevauthor, prevdate, prevname, prevrev, prevstate;
|
||||
int getoldkeys P((RILE*));
|
||||
|
||||
/* rcskeys */
|
||||
extern char const *const Keyword[];
|
||||
extern char const *Keyword[];
|
||||
extern enum markers LocalIdMode;
|
||||
enum markers trymatch P((char const*));
|
||||
void setRCSLocalId(char const *);
|
||||
void setIncExc(char const *);
|
||||
|
||||
/* rcslex */
|
||||
extern FILE *foutptr;
|
||||
|
@ -201,7 +201,7 @@ Report problems and direct all questions to:
|
||||
|
||||
#include "rcsbase.h"
|
||||
|
||||
libId(editId, "$Id$")
|
||||
libId(editId, "$Id: rcsedit.c,v 1.8 1997/02/22 15:47:35 peter Exp $")
|
||||
|
||||
static void editEndsPrematurely P((void)) exiting;
|
||||
static void editLineNumberOverflow P((void)) exiting;
|
||||
@ -1048,14 +1048,17 @@ keyreplace(marker, delta, delimstuffed, infile, out, dolog)
|
||||
case Date:
|
||||
aputs(date2str(date,datebuf), out);
|
||||
break;
|
||||
case FreeBSD:
|
||||
case Id:
|
||||
case LocalId:
|
||||
case Header:
|
||||
escape_string(out,
|
||||
marker==Id || marker==FreeBSD || RCSv<VERSION(4)
|
||||
? basefilename(RCSname)
|
||||
: getfullRCSname()
|
||||
);
|
||||
if (marker == Id || RCSv < VERSION(4) ||
|
||||
(marker == LocalId && LocalIdMode == Id))
|
||||
escape_string(out, basefilename(RCSname));
|
||||
else if (marker == CVSHeader ||
|
||||
(marker == LocalId && LocalIdMode == CVSHeader))
|
||||
escape_string(out, getfullCVSname());
|
||||
else
|
||||
escape_string(out, getfullRCSname());
|
||||
aprintf(out, " %s %s %s %s",
|
||||
delta->num,
|
||||
date2str(date, datebuf),
|
||||
|
@ -177,7 +177,7 @@ Report problems and direct all questions to:
|
||||
|
||||
#include "rcsbase.h"
|
||||
|
||||
libId(fnmsId, "$Id$")
|
||||
libId(fnmsId, "$Id: rcsfnms.c,v 1.6 1997/02/22 15:47:36 peter Exp $")
|
||||
|
||||
static char const *bindex P((char const*,int));
|
||||
static int fin2open P((char const*, size_t, char const*, size_t, char const*, size_t, RILE*(*)P((struct buf*,struct stat*,int)), int));
|
||||
@ -867,6 +867,39 @@ getfullRCSname()
|
||||
}
|
||||
}
|
||||
|
||||
char const *
|
||||
getfullCVSname()
|
||||
/*
|
||||
* Return a pointer to the fill pathname of the RCS file, but trim $CVSROOT.
|
||||
*/
|
||||
{
|
||||
char const *CVSname;
|
||||
char const *cvsroot;
|
||||
int rootlen;
|
||||
|
||||
CVSname = getfullRCSname();
|
||||
cvsroot = getenv("CVSROOT");
|
||||
|
||||
if (cvsroot) {
|
||||
rootlen = strlen(cvsroot);
|
||||
/* ignore trailing '/' chars from $CVSROOT */
|
||||
while (rootlen > 0) {
|
||||
if (cvsroot[rootlen - 1] == '/')
|
||||
rootlen--;
|
||||
else
|
||||
break;
|
||||
}
|
||||
if (strncmp(CVSname, cvsroot, rootlen) == 0) {
|
||||
CVSname += rootlen;
|
||||
/* skip any leading '/' chars */
|
||||
while (*CVSname == '/')
|
||||
CVSname++;
|
||||
return CVSname;
|
||||
}
|
||||
}
|
||||
return CVSname;
|
||||
}
|
||||
|
||||
static size_t
|
||||
dir_useful_len(d)
|
||||
char const *d;
|
||||
|
@ -98,7 +98,7 @@ Report problems and direct all questions to:
|
||||
|
||||
#include "rcsbase.h"
|
||||
|
||||
libId(keepId, "$Id$")
|
||||
libId(keepId, "$Id: rcskeep.c,v 1.6 1997/02/22 15:47:38 peter Exp $")
|
||||
|
||||
static int badly_terminated P((void));
|
||||
static int checknum P((char const*));
|
||||
@ -191,6 +191,7 @@ getoldkeys(fp)
|
||||
break;
|
||||
case Header:
|
||||
case Id:
|
||||
case LocalId:
|
||||
if (!(
|
||||
getval(fp, (struct buf*)0, false) &&
|
||||
keeprev(fp) &&
|
||||
|
@ -63,25 +63,25 @@ Report problems and direct all questions to:
|
||||
|
||||
#include "rcsbase.h"
|
||||
|
||||
libId(keysId, "$Id$")
|
||||
libId(keysId, "$Id: rcskeys.c,v 1.10 1997/02/22 15:47:38 peter Exp $")
|
||||
|
||||
|
||||
char const *const Keyword[] = {
|
||||
char const *Keyword[] = {
|
||||
/* This must be in the same order as rcsbase.h's enum markers type. */
|
||||
0,
|
||||
AUTHOR, DATE, HEADER, IDH,
|
||||
LOCKER, LOG, NAME, RCSFILE, REVISION, SOURCE, STATE,
|
||||
FREEBSD
|
||||
LOCKER, LOG, NAME, RCSFILE, REVISION, SOURCE, STATE, CVSHEADER,
|
||||
NULL
|
||||
};
|
||||
|
||||
/* Expand all keywords by default */
|
||||
|
||||
static int ExpandKeyword[] = {
|
||||
false,
|
||||
true, true, true, true,
|
||||
true, true, true, true, true, true, true,
|
||||
false
|
||||
true, true, true, true, true, true, true, true,
|
||||
true
|
||||
};
|
||||
enum markers LocalIdMode = Id;
|
||||
|
||||
enum markers
|
||||
trymatch(string)
|
||||
@ -98,6 +98,8 @@ trymatch(string)
|
||||
continue;
|
||||
/* try next keyword */
|
||||
p = Keyword[j];
|
||||
if (p == NULL)
|
||||
continue;
|
||||
s = string;
|
||||
while (*p++ == *s++) {
|
||||
if (!*p)
|
||||
@ -113,15 +115,18 @@ trymatch(string)
|
||||
return(Nomatch);
|
||||
}
|
||||
|
||||
void
|
||||
setIncExc(arg)
|
||||
char *arg;
|
||||
char const *arg;
|
||||
/* Sets up the ExpandKeyword table according to command-line flags */
|
||||
{
|
||||
char *key;
|
||||
char *copy, *next;
|
||||
int include = 0, j;
|
||||
|
||||
arg += 2;
|
||||
switch (*arg++) {
|
||||
copy = strdup(arg);
|
||||
next = copy;
|
||||
switch (*next++) {
|
||||
case 'e':
|
||||
include = false;
|
||||
break;
|
||||
@ -129,17 +134,53 @@ setIncExc(arg)
|
||||
include = true;
|
||||
break;
|
||||
default:
|
||||
return(false);
|
||||
free(copy);
|
||||
return;
|
||||
}
|
||||
if (include)
|
||||
for (j = sizeof(Keyword)/sizeof(*Keyword); (--j); )
|
||||
ExpandKeyword[j] = false;
|
||||
key = strtok(arg, ",");
|
||||
key = strtok(next, ",");
|
||||
while (key) {
|
||||
for (j = sizeof(Keyword)/sizeof(*Keyword); (--j); )
|
||||
for (j = sizeof(Keyword)/sizeof(*Keyword); (--j); ) {
|
||||
if (Keyword[j] == NULL)
|
||||
continue;
|
||||
if (!strcmp(key, Keyword[j]))
|
||||
ExpandKeyword[j] = include;
|
||||
}
|
||||
key = strtok(NULL, ",");
|
||||
}
|
||||
return(true);
|
||||
free(copy);
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
setRCSLocalId(string)
|
||||
char const *string;
|
||||
/* function: sets local RCS id and RCSLOCALID envariable */
|
||||
{
|
||||
static char local_id[keylength+1];
|
||||
char *copy, *next, *key;
|
||||
int j;
|
||||
|
||||
copy = strdup(string);
|
||||
next = copy;
|
||||
key = strtok(next, "=");
|
||||
if (strlen(key) > keylength)
|
||||
error("LocalId is too long");
|
||||
VOID strcpy(local_id, key);
|
||||
Keyword[LocalId] = local_id;
|
||||
|
||||
/* options? */
|
||||
while (key = strtok(NULL, ",")) {
|
||||
if (!strcmp(key, Keyword[Id]))
|
||||
LocalIdMode=Id;
|
||||
else if (!strcmp(key, Keyword[Header]))
|
||||
LocalIdMode=Header;
|
||||
else if (!strcmp(key, Keyword[CVSHeader]))
|
||||
LocalIdMode=CVSHeader;
|
||||
else
|
||||
error("Unknown LocalId mode");
|
||||
}
|
||||
free(copy);
|
||||
}
|
||||
|
@ -186,7 +186,7 @@ Report problems and direct all questions to:
|
||||
|
||||
#include "rcsbase.h"
|
||||
|
||||
libId(utilId, "$Id$")
|
||||
libId(utilId, "$Id: rcsutil.c,v 1.6 1997/02/22 15:47:43 peter Exp $")
|
||||
|
||||
#if !has_memcmp
|
||||
int
|
||||
@ -1230,8 +1230,15 @@ getRCSINIT(argc, argv, newargv)
|
||||
char **argv, ***newargv;
|
||||
{
|
||||
register char *p, *q, **pp;
|
||||
char const *ev;
|
||||
size_t n;
|
||||
|
||||
if ((ev = cgetenv("RCSLOCALID")))
|
||||
setRCSLocalId(ev);
|
||||
|
||||
if ((ev = cgetenv("RCSINCEXC")))
|
||||
setIncExc(ev);
|
||||
|
||||
if (!(q = cgetenv("RCSINIT")))
|
||||
*newargv = argv;
|
||||
else {
|
||||
|
Loading…
Reference in New Issue
Block a user