Hello,

I didn't see a bug submission form on http://www.cvshome.org so
hopefully it's OK to report a bug here.

Apologies if this is inappropriate or already known/old news.

The problem is described in the email dialogue below. In short,
CVS expects that an imported file will have identical dates
set on revisions 1.1 and 1.1.1.1, but apparently in actuality
it doesn't guarantee this at import time.

Thanks,
-Archie

P.S. Please CC: me as I'm not on this email list

----- Forwarded message from John Polstra -----

>From [EMAIL PROTECTED] Wed Aug  9 08:56:52 2000
Delivered-To: [EMAIL PROTECTED]
From: John Polstra <[EMAIL PROTECTED]>
Date: Wed, 9 Aug 2000 08:54:58 -0700 (PDT)
Message-Id: <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Subject: Re: CVS question
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
Organization: Polstra & Co., Seattle, WA
Sender: [EMAIL PROTECTED]
X-Loop: FreeBSD.ORG
Precedence: bulk
Content-Length:  2611

In article <[EMAIL PROTECTED]>,
Archie Cobbs  <[EMAIL PROTECTED]> 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                                               [EMAIL PROTECTED]
  John D. Polstra & Co., Inc.                        Seattle, Washington USA
  "Disappointment is a good sign of basic intelligence."  -- Chögyam Trungpa



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

----- End of forwarded message from John Polstra -----
___________________________________________________________________________
Archie Cobbs   *   Whistle Communications, Inc.  *   http://www.whistle.com

Reply via email to