From owner-freebsd-hackers Wed Aug 9 8:55:11 2000 Delivered-To: freebsd-hackers@freebsd.org Received: from wall.polstra.com (rtrwan160.accessone.com [206.213.115.74]) by hub.freebsd.org (Postfix) with ESMTP id 67EF837BA74 for ; Wed, 9 Aug 2000 08:55:07 -0700 (PDT) (envelope-from jdp@polstra.com) Received: from vashon.polstra.com (vashon.polstra.com [206.213.73.13]) by wall.polstra.com (8.9.3/8.9.3) with ESMTP id IAA12824; Wed, 9 Aug 2000 08:54:59 -0700 (PDT) (envelope-from jdp@polstra.com) From: John Polstra Received: (from jdp@localhost) by vashon.polstra.com (8.9.3/8.9.1) id IAA53597; Wed, 9 Aug 2000 08:54:58 -0700 (PDT) (envelope-from jdp@polstra.com) Date: Wed, 9 Aug 2000 08:54:58 -0700 (PDT) Message-Id: <200008091554.IAA53597@vashon.polstra.com> To: hackers@freebsd.org Cc: archie@whistle.com Subject: Re: CVS question In-Reply-To: <200008071906.MAA12811@bubba.whistle.com> References: <200008071906.MAA12811@bubba.whistle.com> Organization: Polstra & Co., Seattle, WA Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG In article <200008071906.MAA12811@bubba.whistle.com>, Archie Cobbs wrote: > Consider this source file: > > http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.sbin/xntpd/lib/Attic/ranny.c > > Question: what version should this command checkout? > > $ cvs co -D 'January 18, 1999 0:00' freebsd/src/usr.sbin/xntpd/lib/ranny.c > > Perhaps version 1.1.1.2 would be correct, but instead you get 1.1. CVS is really screwy in this area. I remember I had to add some special cases to CVSup long ago to try to mimic CVS's behavior in odd cases. > It seems CVS is being inconsistent: > > - If you had done a 'head' checkout on that date you would have > gotten 1.1.1.2 That makes sense, because on that date the file had not yet left the vendor branch, and its default branch attribute still pointed to the vendor branch. > - If you later do a 'head' checkout, and specify that date, you get 1.1 CVS has a heuristic that does the wrong thing for this particular file. The code is around line 3252 of src/contrib/cvs/src/rcs.c in the function RCS_getdate(): if (! STREQ (cur_rev, "1.1")) return (xstrdup (cur_rev)); /* This is 1.1; if the date of 1.1 is not the same as that for the 1.1.1.1 version, then return 1.1. This happens when the first version of a file is created by a regular cvs add and commit, and there is a subsequent cvs import of the same file. */ p = findnode (rcs->versions, "1.1.1.1"); if (p) { vers = (RCSVers *) p->data; if (RCS_datecmp (vers->date, date) != 0) return xstrdup ("1.1"); } It compares the dates on the theory that an import will set identical dates in revisions 1.1 and 1.1.1.1. But in the file you mentioned, they are off by 1 second. So CVS doesn't recognize it as an import. revision 1.1 date: 1993/12/21 18:36:22; author: wollman; state: Exp; revision 1.1.1.1 date: 1993/12/21 18:36:23; author: wollman; state: Exp; lines: +0 -0 Probably the import straddled the seconds boundary. I hope current versions of CVS force the dates to be the same on an import. I haven't checked to see whether that's the case or not. John -- John Polstra jdp@polstra.com John D. Polstra & Co., Inc. Seattle, Washington USA "Disappointment is a good sign of basic intelligence." -- Chögyam Trungpa To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message