summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/rcs/rlog
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1995-10-28 21:50:58 +0000
committerpeter <peter@FreeBSD.org>1995-10-28 21:50:58 +0000
commit822bceb624e3740412b90941feb1158d82f50edc (patch)
tree5072ccf03f140b698e07703cd04f14e6e4d75591 /gnu/usr.bin/rcs/rlog
parent9d7e3d8dc0cccad8e42e4822ffa52ee28b6f7d2f (diff)
downloadFreeBSD-src-822bceb624e3740412b90941feb1158d82f50edc.zip
FreeBSD-src-822bceb624e3740412b90941feb1158d82f50edc.tar.gz
First part of import conflict merge from rcs-5.7 import.
All those $Log$ entries, combined with the whitespace changes are a real pain. I'm committing this now, before it's completely finished to get it compiling and working again ASAP. Some of the FreeBSD specific features are not working in this commit yet (mainly rlog stuff and $FreeBSD$ support)
Diffstat (limited to 'gnu/usr.bin/rcs/rlog')
-rw-r--r--gnu/usr.bin/rcs/rlog/rlog.188
-rw-r--r--gnu/usr.bin/rcs/rlog/rlog.c481
2 files changed, 330 insertions, 239 deletions
diff --git a/gnu/usr.bin/rcs/rlog/rlog.1 b/gnu/usr.bin/rcs/rlog/rlog.1
index e3deb68..cc4b45c9 100644
--- a/gnu/usr.bin/rcs/rlog/rlog.1
+++ b/gnu/usr.bin/rcs/rlog/rlog.1
@@ -2,9 +2,10 @@
.ds Rv \\$3
.ds Dt \\$4
..
-.Id $Id: rlog.1,v 1.2 1994/05/11 22:39:43 phk Exp $
-.ds g \&\s-1UTC\s0
+.Id $Id: rlog.1,v 5.9 1995/06/16 06:19:24 eggert Exp $
+.ds i \&\s-1ISO\s0
.ds r \&\s-1RCS\s0
+.ds u \&\s-1UTC\s0
.if n .ds - \%--
.if t .ds - \(em
.TH RLOG 1 \*(Dt GNU
@@ -34,13 +35,17 @@ reverse chronological order for each branch. For each revision,
prints revision number, author, date/time, state, number of
lines added/deleted (with respect to the previous revision),
locker of the revision (if any), and log message.
-All times are displayed in Coordinated Universal Time (\*g).
+All times are displayed in Coordinated Universal Time (\*u) by default;
+this can be overridden with
+.BR \-z .
Without options,
.B rlog
prints complete information.
The options below restrict this output.
-.nr n \w'\f3\-V\fP\f2n\fP '+1n-1/1n
-.TP \nn
+.nr n \w'\f3\-V\fP\f2n\fP'+2n-1/1n
+.ds n \nn
+.if \n(.g .if r an-tag-sep .ds n \w'\f3\-V\fP\f2n\fP'u+\n[an-tag-sep]u
+.TP \*n
.B \-L
Ignore \*r files that have no locks set.
This is convenient in combination with
@@ -54,10 +59,6 @@ Print only the name of the \*r file.
This is convenient for translating a
working pathname into an \*r pathname.
.TP
-.BI \-v "[string]"
-Print only the working pathname and tip-revision.
-The optional string is prepended to the outputline.
-.TP
.B \-h
Print only the \*r pathname, working pathname, head,
default branch, access list, locks,
@@ -68,6 +69,9 @@ Print the same as
.BR \-h ,
plus the descriptive text.
.TP
+.B \-N
+Do not print the symbolic names.
+.TP
.B \-b
Print information about the revisions on the default branch, normally
the highest branch on the trunk.
@@ -84,23 +88,28 @@ selects the revisions that were deposited between
.I d1
and
.I d2
-inclusive.
+exclusive.
A range of the form
.BI < d
or
.IB d >
selects
-all revisions dated
-.I d
-or earlier.
+all revisions earlier than
+.IR d .
A range of the form
.IB d <
or
.BI > d
selects
-all revisions dated
-.I d
-or later.
+all revisions dated later than
+.IR d .
+If
+.B <
+or
+.B >
+is followed by
+.B =
+then the ranges are inclusive, not exclusive.
A range of the form
.I d
selects the single, latest revision dated
@@ -178,6 +187,13 @@ If
.I logins
is omitted, the user's login is assumed.
.TP
+.B \-T
+This option has no effect;
+it is present for compatibility with other \*r commands.
+.TP
+.BI \-V
+Print \*r's version number.
+.TP
.BI \-V n
Emulate \*r version
.I n
@@ -207,6 +223,40 @@ with the union of the revisions selected by
.B \-b
and
.BR \-r .
+.TP
+.BI \-z zone
+specifies the date output format,
+and specifies the default time zone for
+.I date
+in the
+.BI \-d dates
+option.
+The
+.I zone
+should be empty, a numeric \*u offset, or the special string
+.B LT
+for local time.
+The default is an empty
+.IR zone ,
+which uses the traditional \*r format of \*u without any time zone indication
+and with slashes separating the parts of the date;
+otherwise, times are output in \*i 8601 format with time zone indication.
+For example, if local time is January 11, 1990, 8pm Pacific Standard Time,
+eight hours west of \*u,
+then the time is output as follows:
+.RS
+.LP
+.RS
+.nf
+.ta \w'\f3\-z+05:30\fP 'u +\w'\f31990-01-11 09:30:00+05:30\fP 'u
+.ne 4
+\f2option\fP \f2time output\fP
+\f3\-z\fP \f31990/01/12 04:00:00\fP \f2(default)\fP
+\f3\-zLT\fP \f31990-01-11 20:00:00\-08\fP
+\f3\-z+05:30\fP \f31990-01-12 09:30:00+05:30\fP
+.ta 4n +4n +4n +4n
+.fi
+.RE
.SH EXAMPLES
.LP
.nf
@@ -233,11 +283,11 @@ The exit status is zero if and only if all operations were successful.
.SH IDENTIFICATION
Author: Walter F. Tichy.
.br
-Revision Number: \*(Rv; Release Date: \*(Dt.
+Manual Page Revision: \*(Rv; Release Date: \*(Dt.
.br
-Copyright \(co 1982, 1988, 1989 by Walter F. Tichy.
+Copyright \(co 1982, 1988, 1989 Walter F. Tichy.
.br
-Copyright \(co 1990, 1991 by Paul Eggert.
+Copyright \(co 1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert.
.SH "SEE ALSO"
ci(1), co(1), ident(1), rcs(1), rcsdiff(1), rcsintro(1), rcsmerge(1),
rcsfile(5)
diff --git a/gnu/usr.bin/rcs/rlog/rlog.c b/gnu/usr.bin/rcs/rlog/rlog.c
index 80912bd..f387a1a 100644
--- a/gnu/usr.bin/rcs/rlog/rlog.c
+++ b/gnu/usr.bin/rcs/rlog/rlog.c
@@ -1,13 +1,7 @@
-/*
- * RLOG operation
- */
-/*****************************************************************************
- * print contents of RCS files
- *****************************************************************************
- */
+/* Print log messages and other information about RCS files. */
-/* Copyright (C) 1982, 1988, 1989 Walter Tichy
- Copyright 1990, 1991 by Paul Eggert
+/* Copyright 1982, 1988, 1989 Walter Tichy
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert
Distributed under license by the Free Software Foundation, Inc.
This file is part of RCS.
@@ -23,8 +17,9 @@ 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 RCS; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+along with RCS; see the file COPYING.
+If not, write to the Free Software Foundation,
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Report problems and direct all questions to:
@@ -32,25 +27,41 @@ Report problems and direct all questions to:
*/
-
-
-
-/* $Log: rlog.c,v $
- * Revision 1.5 1994/05/12 00:42:59 phk
- * typo.
+/*
+ * $Log: rlog.c,v $
+ * Revision 5.18 1995/06/16 06:19:24 eggert
+ * Update FSF address.
+ *
+ * Revision 5.17 1995/06/01 16:23:43 eggert
+ * (struct rcslockers): Renamed from `struct lockers'.
+ * (getnumericrev): Return error indication instead of ignoring errors.
+ * (main): Check it. Don't use dateform.
+ * (recentdate, extdate): cmpnum -> cmpdate
+ *
+ * Revision 5.16 1994/04/13 16:30:34 eggert
+ * Fix bug; `rlog -lxxx' inverted the sense of -l.
+ *
+ * Revision 5.15 1994/03/17 14:05:48 eggert
+ * -d'<DATE' now excludes DATE; the new syntax -d'<=DATE' includes it.
+ * Emulate -V4's white space generation more precisely.
+ * Work around SVR4 stdio performance bug. Remove lint.
*
- * Revision 1.4 1994/05/12 00:37:59 phk
- * made -v produce tip-revision, which was what I wanted in the first place...
+ * Revision 5.14 1993/11/09 17:40:15 eggert
+ * -V now prints version on stdout and exits.
*
- * Revision 1.3 1994/05/11 22:39:44 phk
- * Added -v option to rlog. This gives a quick way to get a list of versions.
+ * Revision 5.13 1993/11/03 17:42:27 eggert
+ * Add -N, -z. Ignore -T.
*
- * Revision 1.2 1993/08/06 16:47:16 nate
- * Have rlog output be much easier to parse. (Added one line which is not
- * used by any CVS/RCS commands)
+ * Revision 5.12 1992/07/28 16:12:44 eggert
+ * Don't miss B.0 when handling branch B. Diagnose missing `,' in -r.
+ * Add -V. Avoid `unsigned'. Statement macro names now end in _.
*
- * Revision 1.1.1.1 1993/06/18 04:22:17 jkh
- * Updated GNU utilities
+ * Revision 5.11 1992/01/24 18:44:19 eggert
+ * Don't duplicate unexpected_EOF's function. lint -> RCS_lint
+ *
+ * Revision 5.10 1992/01/06 02:42:34 eggert
+ * Update usage string.
+ * while (E) ; -> while (E) continue;
*
* Revision 5.9 1991/09/17 19:07:40 eggert
* Getscript() didn't uncache partial lines.
@@ -147,9 +158,9 @@ Report problems and direct all questions to:
#include "rcsbase.h"
-struct lockers { /* lockers in locker option; stored */
+struct rcslockers { /* lockers in locker option; stored */
char const * login; /* lockerlist */
- struct lockers * lockerlink;
+ struct rcslockers * lockerlink;
} ;
struct stateattri { /* states in state option; stored in */
@@ -163,28 +174,29 @@ struct authors { /* login names in author option; */
} ;
struct Revpairs{ /* revision or branch range in -r */
- unsigned numfld; /* option; stored in revlist */
+ int numfld; /* option; stored in revlist */
char const * strtrev;
char const * endrev;
struct Revpairs * rnext;
} ;
struct Datepairs{ /* date range in -d option; stored in */
+ struct Datepairs *dnext;
char strtdate[datesize]; /* duelst and datelist */
char enddate[datesize];
- struct Datepairs * dnext;
+ char ne_date; /* datelist only; distinguishes < from <= */
};
static char extractdelta P((struct hshentry const*));
static int checkrevpair P((char const*,char const*));
+static int extdate P((struct hshentry*));
+static int getnumericrev P((void));
static struct hshentry const *readdeltalog P((void));
-static unsigned extdate P((struct hshentry*));
static void cleanup P((void));
static void exttree P((struct hshentry*));
static void getauthor P((char*));
static void getdatepair P((char*));
static void getlocker P((char*));
-static void getnumericrev P((void));
static void getrevpairs P((char*));
static void getscript P((struct hshentry*));
static void getstate P((char*));
@@ -203,34 +215,33 @@ static int lockflag;
static struct Datepairs *datelist, *duelst;
static struct Revpairs *revlist, *Revlst;
static struct authors *authorlist;
-static struct lockers *lockerlist;
+static struct rcslockers *lockerlist;
static struct stateattri *statelist;
-mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
+mainProg(rlogId, "rlog", "$Id: rlog.c,v 5.18 1995/06/16 06:19:24 eggert Exp $")
{
static char const cmdusage[] =
- "\nrlog usage: rlog -{bhLRt} [-v[string]] -ddates -l[lockers] -rrevs -sstates -w[logins] -Vn file ...";
+ "\nrlog usage: rlog -{bhLNRt} -ddates -l[lockers] -r[revs] -sstates -Vn -w[logins] -xsuff -zzone file ...";
register FILE *out;
char *a, **newargv;
struct Datepairs *currdate;
- char const *accessListString, *accessFormat, *commentFormat;
+ char const *accessListString, *accessFormat;
char const *headFormat, *symbolFormat;
struct access const *curaccess;
struct assoc const *curassoc;
struct hshentry const *delta;
- struct lock const *currlock;
+ struct rcslock const *currlock;
int descflag, selectflag;
int onlylockflag; /* print only files with locks */
- int versionlist;
- char *vstring;
- int onlyRCSflag; /* print only RCS file name */
- unsigned revno;
-
- descflag = selectflag = true;
- versionlist = onlylockflag = onlyRCSflag = false;
- vstring=0;
+ int onlyRCSflag; /* print only RCS pathname */
+ int pre5;
+ int shownames;
+ int revno;
+
+ descflag = selectflag = shownames = true;
+ onlylockflag = onlyRCSflag = false;
out = stdout;
suffixes = X_DEFAULT;
@@ -243,6 +254,10 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
onlylockflag = true;
break;
+ case 'N':
+ shownames = false;
+ break;
+
case 'R':
onlyRCSflag =true;
break;
@@ -289,54 +304,63 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
suffixes = a;
break;
- case 'V':
- setRCSversion(*argv);
+ case 'z':
+ zone_set(a);
+ break;
+
+ case 'T':
+ /* Ignore -T, so that RCSINIT can contain -T. */
+ if (*a)
+ goto unknown;
break;
- case 'v':
- versionlist = true;
- vstring = a;
+ case 'V':
+ setRCSversion(*argv);
break;
default:
- faterror("unknown option: %s%s", *argv, cmdusage);
+ unknown:
+ error("unknown option: %s%s", *argv, cmdusage);
};
} /* end of option processing */
- if (argc<1) faterror("no input file%s", cmdusage);
-
if (! (descflag|selectflag)) {
warn("-t overrides -h.");
descflag = true;
}
- if (RCSversion < VERSION(5)) {
+ pre5 = RCSversion < VERSION(5);
+ if (pre5) {
accessListString = "\naccess list: ";
accessFormat = " %s";
- commentFormat = "\ncomment leader: \"";
- headFormat = "\nRCS file: %s; Working file: %s\nhead: %s%s\nbranch: %s%s\nlocks: ";
- insDelFormat = " lines added/del: %lu/%lu";
+ headFormat = "RCS file: %s; Working file: %s\nhead: %s%s\nbranch: %s%s\nlocks: ";
+ insDelFormat = " lines added/del: %ld/%ld";
symbolFormat = " %s: %s;";
} else {
accessListString = "\naccess list:";
accessFormat = "\n\t%s";
- commentFormat = "\ncomment leader: \"";
- headFormat = "\nRCS file: %s\nWorking file: %s\nhead:%s%s\nbranch:%s%s\nlocks:%s";
- insDelFormat = " lines: +%lu -%lu";
+ headFormat = "RCS file: %s\nWorking file: %s\nhead:%s%s\nbranch:%s%s\nlocks:%s";
+ insDelFormat = " lines: +%ld -%ld";
symbolFormat = "\n\t%s: %s";
}
- /* now handle all filenames */
- do {
+ /* Now handle all pathnames. */
+ if (nerror)
+ cleanup();
+ else if (argc < 1)
+ faterror("no input file%s", cmdusage);
+ else
+ for (; 0 < argc; cleanup(), ++argv, --argc) {
ffree();
- if (pairfilenames(argc, argv, rcsreadopen, true, false) <= 0)
+ if (pairnames(argc, argv, rcsreadopen, true, false) <= 0)
continue;
- /* now RCSfilename contains the name of the RCS file, and finptr
- * the file descriptor. Workfilename contains the name of the
- * working file.
+ /*
+ * RCSname contains the name of the RCS file,
+ * and finptr the file descriptor;
+ * workname contains the name of the working file.
*/
/* Keep only those locks given by -l. */
@@ -347,20 +371,26 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
if (onlylockflag && !Locks)
continue;
- if ( versionlist ) {
- gettree();
- aprintf(out, "%s%s %s\n", vstring, workfilename, tiprev());
+ if ( onlyRCSflag ) {
+ aprintf(out, "%s\n", RCSname);
continue;
}
- if ( onlyRCSflag ) {
- aprintf(out, "%s\n", RCSfilename);
+ gettree();
+
+ if (!getnumericrev())
continue;
- }
- /* print RCS filename , working filename and optional
+
+ /*
+ * Output the first character with putc, not printf.
+ * Otherwise, an SVR4 stdio bug buffers output inefficiently.
+ */
+ aputc_('\n', out)
+
+ /* print RCS pathname, working pathname and optional
administrative information */
/* could use getfullRCSname() here, but that is very slow */
- aprintf(out, headFormat, RCSfilename, workfilename,
+ aprintf(out, headFormat, RCSname, workname,
Head ? " " : "", Head ? Head->num : "",
Dbranch ? " " : "", Dbranch ? Dbranch : "",
StrictLocks ? " strict" : ""
@@ -371,8 +401,8 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
currlock->delta->num);
currlock = currlock->nextlock;
}
- if (StrictLocks && RCSversion<VERSION(5))
- aputs(" strict", out);
+ if (StrictLocks && pre5)
+ aputs(" ; strict" + (Locks?3:0), out);
aputs(accessListString, out); /* print access list */
curaccess = AccessList;
@@ -381,40 +411,40 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
curaccess = curaccess->nextaccess;
}
- aputs("\nsymbolic names:", out); /* print symbolic names */
- for (curassoc=Symbols; curassoc; curassoc=curassoc->nextassoc)
- aprintf(out, symbolFormat, curassoc->symbol, curassoc->num);
- aputs(commentFormat, out);
- awrite(Comment.string, Comment.size, out);
- aputs("\"\n", out);
- if (VERSION(5)<=RCSversion || Expand != KEYVAL_EXPAND)
- aprintf(out, "keyword substitution: %s\n",
+ if (shownames) {
+ aputs("\nsymbolic names:", out); /* print symbolic names */
+ for (curassoc=Symbols; curassoc; curassoc=curassoc->nextassoc)
+ aprintf(out, symbolFormat, curassoc->symbol, curassoc->num);
+ }
+ if (pre5) {
+ aputs("\ncomment leader: \"", out);
+ awrite(Comment.string, Comment.size, out);
+ afputc('\"', out);
+ }
+ if (!pre5 || Expand != KEYVAL_EXPAND)
+ aprintf(out, "\nkeyword substitution: %s",
expand_names[Expand]
);
- gettree();
-
- aprintf(out, "total revisions: %u", TotalDeltas);
+ aprintf(out, "\ntotal revisions: %d", TotalDeltas);
revno = 0;
if (Head && selectflag & descflag) {
- getnumericrev(); /* get numeric revision or branch names */
-
exttree(Head);
/* get most recently date of the dates pointed by duelst */
currdate = duelst;
while( currdate) {
- VOID sprintf(currdate->strtdate,DATEFORM,0,0,0,0,0,0);
+ VOID strcpy(currdate->strtdate, "0.0.0.0.0.0");
recentdate(Head, currdate);
currdate = currdate->dnext;
}
revno = extdate(Head);
- aprintf(out, ";\tselected revisions: %u", revno);
+ aprintf(out, ";\tselected revisions: %d", revno);
}
afputc('\n',out);
@@ -424,18 +454,16 @@ mainProg(rlogId, "rlog", "$Id: rlog.c,v 1.5 1994/05/12 00:42:59 phk Exp $")
}
if (revno) {
while (! (delta = readdeltalog())->selector || --revno)
- ;
+ continue;
if (delta->next && countnumflds(delta->num)==2)
/* Read through delta->next to get its insertlns. */
while (readdeltalog() != delta->next)
- ;
+ continue;
putrunk();
putree(Head);
}
- aputs("----------------------------\n", out);
aputs("=============================================================================\n",out);
- } while (cleanup(),
- ++argv, --argc >= 1);
+ }
Ofclose(out);
exitmain(exitstatus);
}
@@ -447,10 +475,10 @@ cleanup()
Izclose(&finptr);
}
-#if lint
+#if RCS_lint
# define exiterr rlogExit
#endif
- exiting void
+ void
exiterr()
{
_exit(EXIT_FAILURE);
@@ -478,7 +506,7 @@ putree(root)
order on each branch */
{
- if ( root == nil ) return;
+ if (!root) return;
putree(root->next);
@@ -493,8 +521,7 @@ putforest(branchroot)
struct branchhead const *branchroot;
/* function: print branches that has the same direct ancestor */
{
-
- if ( branchroot == nil ) return;
+ if (!branchroot) return;
putforest(branchroot->nextbranch);
@@ -511,8 +538,7 @@ putabranch(root)
/* function : print one branch */
{
-
- if ( root == nil) return;
+ if (!root) return;
putabranch(root->next);
@@ -538,17 +564,19 @@ putadelta(node,editscript,trunk)
size_t n;
struct branchhead const *newbranch;
struct buf branchnum;
- char datebuf[datesize];
+ char datebuf[datesize + zonelenmax];
+ int pre5 = RCSversion < VERSION(5);
if (!node->selector)
return;
out = stdout;
aprintf(out,
- "----------------------------\nrevision %s", node->num
+ "----------------------------\nrevision %s%s",
+ node->num, pre5 ? " " : ""
);
if ( node->lockedby )
- aprintf(out, "\tlocked by: %s;", node->lockedby);
+ aprintf(out, pre5+"\tlocked by: %s;", node->lockedby);
aprintf(out, "\ndate: %s; author: %s; state: %s;",
date2str(node->date, datebuf),
@@ -587,9 +615,6 @@ putadelta(node,editscript,trunk)
}
-
-
-
static struct hshentry const *
readdeltalog()
/* Function : get the log message and skip the text of a deltatext node.
@@ -614,9 +639,7 @@ readdeltalog()
cb = savestring(&logbuf);
Delta->log = bufremember(&logbuf, cb.size);
- nextlex();
- while (nexttok==ID && strcmp(NextString,Ktext)!=0)
- ignorephrase();
+ ignorephrases(Ktext);
getkeystring(Ktext);
Delta->insertlns = Delta->deletelns = 0;
if ( Delta != Head)
@@ -638,7 +661,7 @@ struct hshentry * Delta;
declarecache;
register RILE *fin;
register int c;
- register unsigned long i;
+ register long i;
struct diffcmd dc;
fin = finptr;
@@ -654,16 +677,16 @@ struct hshentry * Delta;
cache(fin);
do {
for (;;) {
- cacheget(c);
+ cacheget_(c)
switch (c) {
default:
continue;
case SDELIM:
- cacheget(c);
+ cacheget_(c)
if (c == SDELIM)
continue;
if (--i)
- fatserror("unexpected end to edit script");
+ unexpected_EOF();
nextc = c;
uncache(fin);
return;
@@ -692,10 +715,10 @@ struct hshentry *root;
{
struct branchhead const *newbranch;
- if (root == nil) return;
+ if (!root) return;
root->selector = extractdelta(root);
- root->log.string = nil;
+ root->log.string = 0;
exttree(root->next);
newbranch = root->branches;
@@ -716,26 +739,26 @@ char * argv;
{
register char c;
- struct lockers * newlocker;
+ struct rcslockers *newlocker;
argv--;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
if ( c == '\0') {
- lockerlist=nil;
+ lockerlist = 0;
return;
}
while( c != '\0' ) {
- newlocker = talloc(struct lockers);
+ newlocker = talloc(struct rcslockers);
newlocker->lockerlink = lockerlist;
newlocker->login = argv;
lockerlist = newlocker;
- while ( ( c = (*++argv)) != ',' && c != '\0' && c != ' '
- && c != '\t' && c != '\n' && c != ';') ;
+ while ((c = *++argv) && c!=',' && c!=' ' && c!='\t' && c!='\n' && c!=';')
+ continue;
*argv = '\0';
if ( c == '\0' ) return;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
}
}
@@ -752,12 +775,12 @@ char *argv;
struct authors * newauthor;
argv--;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
if ( c == '\0' ) {
authorlist = talloc(struct authors);
authorlist->login = getusername(false);
- authorlist->nextauthor = nil;
+ authorlist->nextauthor = 0;
return;
}
@@ -766,12 +789,12 @@ char *argv;
newauthor->nextauthor = authorlist;
newauthor->login = argv;
authorlist = newauthor;
- while( ( c = *++argv) != ',' && c != '\0' && c != ' '
- && c != '\t' && c != '\n' && c != ';') ;
+ while ((c = *++argv) && c!=',' && c!=' ' && c!='\t' && c!='\n' && c!=';')
+ continue;
* argv = '\0';
if ( c == '\0') return;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
}
}
@@ -789,10 +812,10 @@ char * argv;
struct stateattri *newstate;
argv--;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
if ( c == '\0'){
- warn("missing state attributes after -s options");
+ error("missing state attributes after -s options");
return;
}
@@ -801,12 +824,12 @@ char * argv;
newstate->nextstate = statelist;
newstate->status = argv;
statelist = newstate;
- while( (c = (*++argv)) != ',' && c != '\0' && c != ' '
- && c != '\t' && c != '\n' && c != ';') ;
+ while ((c = *++argv) && c!=',' && c!=' ' && c!='\t' && c!='\n' && c!=';')
+ continue;
*argv = '\0';
if ( c == '\0' ) return;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
}
}
@@ -818,25 +841,21 @@ trunclocks()
/* id's on lockerlist. Do not truncate if lockerlist empty. */
{
- struct lockers const *plocker;
- struct lock * plocked, * nextlocked;
+ struct rcslockers const *plocker;
+ struct rcslock *p, **pp;
- if ( (lockerlist == nil) || (Locks == nil)) return;
+ if (!lockerlist) return;
/* shorten Locks to those contained in lockerlist */
- plocked = Locks;
- Locks = nil;
- while( plocked != nil) {
- plocker = lockerlist;
- while((plocker != nil) && ( strcmp(plocker->login, plocked->login)!=0))
- plocker = plocker->lockerlink;
- nextlocked = plocked->nextlock;
- if ( plocker != nil) {
- plocked->nextlock = Locks;
- Locks = plocked;
- }
- plocked = nextlocked;
- }
+ for (pp = &Locks; (p = *pp); )
+ for (plocker = lockerlist; ; )
+ if (strcmp(plocker->login, p->login) == 0) {
+ pp = &p->nextlock;
+ break;
+ } else if (!(plocker = plocker->lockerlink)) {
+ *pp = p->nextlock;
+ break;
+ }
}
@@ -852,10 +871,10 @@ recentdate(root, pd)
{
struct branchhead const *newbranch;
- if ( root == nil) return;
+ if (!root) return;
if (root->selector) {
- if ( cmpnum(root->date, pd->strtdate) >= 0 &&
- cmpnum(root->date, pd->enddate) <= 0)
+ if ( cmpdate(root->date, pd->strtdate) >= 0 &&
+ cmpdate(root->date, pd->enddate) <= 0)
VOID strcpy(pd->strtdate, root->date);
}
@@ -872,7 +891,7 @@ recentdate(root, pd)
- static unsigned
+ static int
extdate(root)
struct hshentry * root;
/* function: select revisions which are in the date range specified */
@@ -881,7 +900,7 @@ struct hshentry * root;
{
struct branchhead const *newbranch;
struct Datepairs const *pdate;
- unsigned revno;
+ int revno, ne;
if (!root)
return 0;
@@ -889,20 +908,25 @@ struct hshentry * root;
if ( datelist || duelst) {
pdate = datelist;
while( pdate ) {
- if ( (pdate->strtdate)[0] == '\0' || cmpnum(root->date,pdate->strtdate) >= 0){
- if ((pdate->enddate)[0] == '\0' || cmpnum(pdate->enddate,root->date) >= 0)
+ ne = pdate->ne_date;
+ if (
+ (!pdate->strtdate[0]
+ || ne <= cmpdate(root->date, pdate->strtdate))
+ &&
+ (!pdate->enddate[0]
+ || ne <= cmpdate(pdate->enddate, root->date))
+ )
break;
- }
pdate = pdate->dnext;
}
- if ( pdate == nil) {
+ if (!pdate) {
pdate = duelst;
for (;;) {
if (!pdate) {
root->selector = false;
break;
}
- if ( cmpnum(root->date, pdate->strtdate) == 0)
+ if (cmpdate(root->date, pdate->strtdate) == 0)
break;
pdate = pdate->dnext;
}
@@ -927,11 +951,11 @@ extractdelta(pdelta)
/* statelist, revlist and yield true if pdelta is selected. */
{
- struct lock const *plock;
+ struct rcslock const *plock;
struct stateattri const *pstate;
struct authors const *pauthor;
struct Revpairs const *prevision;
- unsigned length;
+ int length;
if ((pauthor = authorlist)) /* only certain authors wanted */
while (strcmp(pauthor->login, pdelta->author) != 0)
@@ -977,10 +1001,10 @@ getdatepair(argv)
int switchflag;
argv--;
- while( ( c = (*++argv)) == ',' || c == ' ' || c == '\t' ||
- c == '\n' || c == ';') ;
+ while ((c = *++argv)==',' || c==' ' || c=='\t' || c=='\n' || c==';')
+ continue;
if ( c == '\0' ) {
- warn("missing date/time after -d");
+ error("missing date/time after -d");
return;
}
@@ -989,9 +1013,13 @@ getdatepair(argv)
nextdate = talloc(struct Datepairs);
if ( c == '<' ) { /* case: -d <date */
c = *++argv;
+ if (!(nextdate->ne_date = c!='='))
+ c = *++argv;
(nextdate->strtdate)[0] = '\0';
} else if (c == '>') { /* case: -d'>date' */
c = *++argv;
+ if (!(nextdate->ne_date = c!='='))
+ c = *++argv;
(nextdate->enddate)[0] = '\0';
switchflag = true;
} else {
@@ -1009,7 +1037,11 @@ getdatepair(argv)
goto end;
} else {
/* case: -d date< or -d date>; see switchflag */
- while ( (c= *++argv) == ' ' || c=='\t' || c=='\n');
+ int eq = argv[1]=='=';
+ nextdate->ne_date = !eq;
+ argv += eq;
+ while ((c = *++argv) == ' ' || c=='\t' || c=='\n')
+ continue;
if ( c == ';' || c == '\0') {
/* second date missing */
if (switchflag)
@@ -1031,14 +1063,17 @@ getdatepair(argv)
nextdate->dnext = datelist;
datelist = nextdate;
end:
+ if (RCSversion < VERSION(5))
+ nextdate->ne_date = 0;
if ( c == '\0') return;
- while( (c = *++argv) == ';' || c == ' ' || c == '\t' || c =='\n');
+ while ((c = *++argv) == ';' || c == ' ' || c == '\t' || c =='\n')
+ continue;
}
}
- static void
+ static int
getnumericrev()
/* function: get the numeric name of revisions which stored in revlist */
/* and then stored the numeric names in Revlst */
@@ -1046,12 +1081,12 @@ getnumericrev()
{
struct Revpairs * ptr, *pt;
- unsigned n;
+ int n;
struct buf s, e;
char const *lrev;
struct buf const *rstart, *rend;
- Revlst = nil;
+ Revlst = 0;
ptr = revlist;
bufautobegin(&s);
bufautobegin(&e);
@@ -1062,48 +1097,48 @@ getnumericrev()
switch (ptr->numfld) {
- case 1: /* -r rev */
- if (expandsym(ptr->strtrev, &s)) {
- rend = &s;
- n = countnumflds(s.string);
- if (!n && (lrev = tiprev())) {
- bufscpy(&s, lrev);
- n = countnumflds(lrev);
- }
- }
+ case 1: /* -rREV */
+ if (!expandsym(ptr->strtrev, &s))
+ goto freebufs;
+ rend = &s;
+ n = countnumflds(s.string);
+ if (!n && (lrev = tiprev())) {
+ bufscpy(&s, lrev);
+ n = countnumflds(lrev);
+ }
break;
- case 2: /* -r rev- */
- if (expandsym(ptr->strtrev, &s)) {
- bufscpy(&e, s.string);
- n = countnumflds(s.string);
- (n<2 ? e.string : strrchr(e.string,'.'))[0] = 0;
- }
+ case 2: /* -rREV: */
+ if (!expandsym(ptr->strtrev, &s))
+ goto freebufs;
+ bufscpy(&e, s.string);
+ n = countnumflds(s.string);
+ (n<2 ? e.string : strrchr(e.string,'.'))[0] = 0;
break;
- case 3: /* -r -rev */
- if (expandsym(ptr->endrev, &e)) {
- if ((n = countnumflds(e.string)) < 2)
- bufscpy(&s, ".1");
- else {
- bufscpy(&s, e.string);
- VOID strcpy(strrchr(s.string,'.'), ".1");
- }
- }
+ case 3: /* -r:REV */
+ if (!expandsym(ptr->endrev, &e))
+ goto freebufs;
+ if ((n = countnumflds(e.string)) < 2)
+ bufscpy(&s, ".0");
+ else {
+ bufscpy(&s, e.string);
+ VOID strcpy(strrchr(s.string,'.'), ".0");
+ }
break;
- default: /* -r rev1-rev2 */
- if (
+ default: /* -rREV1:REV2 */
+ if (!(
expandsym(ptr->strtrev, &s)
&& expandsym(ptr->endrev, &e)
&& checkrevpair(s.string, e.string)
- ) {
- n = countnumflds(s.string);
- /* Swap if out of order. */
- if (compartial(s.string,e.string,n) > 0) {
- rstart = &e;
- rend = &s;
- }
+ ))
+ goto freebufs;
+ n = countnumflds(s.string);
+ /* Swap if out of order. */
+ if (compartial(s.string,e.string,n) > 0) {
+ rstart = &e;
+ rend = &s;
}
break;
}
@@ -1126,8 +1161,11 @@ getnumericrev()
pt->rnext=Revlst; Revlst=pt;
pt->numfld = countnumflds(pt->strtrev);
}
+
+ freebufs:
bufautoend(&s);
bufautoend(&e);
+ return !ptr;
}
@@ -1140,13 +1178,13 @@ checkrevpair(num1,num2)
fields( if length <= 2, may be different if first field) */
{
- unsigned length = countnumflds(num1);
+ int length = countnumflds(num1);
if (
countnumflds(num2) != length
- || 2 < length && compartial(num1, num2, length-1) != 0
+ || (2 < length && compartial(num1, num2, length-1) != 0)
) {
- error("invalid branch or revision pair %s : %s", num1, num2);
+ rcserror("invalid branch or revision pair %s : %s", num1, num2);
return false;
}
@@ -1203,7 +1241,8 @@ register char * argv;
while (c==' ' || c=='\t' || c=='\n')
c = *++argv;
if (c == separator) {
- while( (c =(*++argv)) == ' ' || c == '\t' || c =='\n') ;
+ while ((c = *++argv) == ' ' || c == '\t' || c =='\n')
+ continue;
nextrevpair->endrev = argv;
for (;; c = *++argv) {
switch (c) {
@@ -1214,8 +1253,8 @@ register char * argv;
break;
case ':': case '-':
if (c == separator)
- continue;
- break;
+ break;
+ continue;
}
break;
}
@@ -1223,13 +1262,15 @@ register char * argv;
while (c==' ' || c=='\t' || c =='\n')
c = *++argv;
nextrevpair->numfld =
- !nextrevpair->endrev[0] ? 2 /* -rrev- */ :
- !nextrevpair->strtrev[0] ? 3 /* -r-rev */ :
- 4 /* -rrev1-rev2 */;
+ !nextrevpair->endrev[0] ? 2 /* -rREV: */ :
+ !nextrevpair->strtrev[0] ? 3 /* -r:REV */ :
+ 4 /* -rREV1:REV2 */;
}
if (!c)
break;
- if (c!=',' && c!=';')
+ else if (c==',' || c==';')
+ c = *++argv;
+ else
error("missing `,' near `%c%s'", c, argv+1);
}
}
OpenPOWER on IntegriCloud