public inbox for overseers@sourceware.org
 help / color / mirror / Atom feed
* cvs, ecn
@ 2004-05-21  0:12 Frank Ch. Eigler
  2004-05-21  1:17 ` Ian Lance Taylor
  2004-05-21  2:05 ` Angela Marie Thomas
  0 siblings, 2 replies; 7+ messages in thread
From: Frank Ch. Eigler @ 2004-05-21  0:12 UTC (permalink / raw)
  To: Sourceware Overseers

Hi -
                                                                                
Given the anon-CVS vulnerability announced yesterday, I've started
trying to merge the fix into our active version (coolo-cvs).  This
is a pain because of the degree of divergence between the sourceware
version and anything released by cvshome.org.  I know this question
arises regularly, but how much longer should we hang on to our little
old fork, as opposed to simply adopting a recent upstream release?
                                                                                
Also, are there any objections to turning on TCP ECN on the machine,
on an experimental basis?  Theory suggests far-remote users may
experience less net congestion.  One can thereafter monitor with
tcpdump to see if ECN ever actually kicks in, and maybe also to see
if anyone's connections are being blocked with due to ECN's presence.
                                                                                
- FChE

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  0:12 cvs, ecn Frank Ch. Eigler
@ 2004-05-21  1:17 ` Ian Lance Taylor
  2004-05-21  3:51   ` Frank Ch. Eigler
  2004-05-21  2:05 ` Angela Marie Thomas
  1 sibling, 1 reply; 7+ messages in thread
From: Ian Lance Taylor @ 2004-05-21  1:17 UTC (permalink / raw)
  To: Frank Ch. Eigler; +Cc: Sourceware Overseers

"Frank Ch. Eigler" <fche@redhat.com> writes:

> Given the anon-CVS vulnerability announced yesterday, I've started
> trying to merge the fix into our active version (coolo-cvs).  This
> is a pain because of the degree of divergence between the sourceware
> version and anything released by cvshome.org.  I know this question
> arises regularly, but how much longer should we hang on to our little
> old fork, as opposed to simply adopting a recent upstream release?

I suppose I think the best approach is to work to get our patches into
the main repository, controlled by the config file.  It is very
obvious when I am working on a branch as opposed to the mainline--the
optimization only applies to mainline.

Also, rather than try to integrate the patch, it's usually easier to
just import a new version.  Our changes are not all that extensive.

Unfortunately I don't know when I will have to work on any of this.

Ian

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  0:12 cvs, ecn Frank Ch. Eigler
  2004-05-21  1:17 ` Ian Lance Taylor
@ 2004-05-21  2:05 ` Angela Marie Thomas
  2004-05-21  3:22   ` Christopher Faylor
  1 sibling, 1 reply; 7+ messages in thread
From: Angela Marie Thomas @ 2004-05-21  2:05 UTC (permalink / raw)
  To: Frank Ch. Eigler; +Cc: Sourceware Overseers


> arises regularly, but how much longer should we hang on to our little
> old fork, as opposed to simply adopting a recent upstream release?

The most significant local change we have is Ian's fileatter work.
It provides a 2x-4x speedup in HEAD operations so we don't want to
lose it.  If there's some way to get those changes into whatever
version is being supported these days (cvshome.org doesn't answer
for me so I couldn't check it out).

I'd have to look through the archives to find info on the other local
changes.  I don't think they were as crucial as the fileattr one.  Chris
or Jason might remember.

--Angela

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  2:05 ` Angela Marie Thomas
@ 2004-05-21  3:22   ` Christopher Faylor
  0 siblings, 0 replies; 7+ messages in thread
From: Christopher Faylor @ 2004-05-21  3:22 UTC (permalink / raw)
  To: angela; +Cc: Frank Ch. Eigler, Sourceware Overseers

On Thu, May 20, 2004 at 05:53:18PM -0700, Angela Marie Thomas wrote:
>>arises regularly, but how much longer should we hang on to our little
>>old fork, as opposed to simply adopting a recent upstream release?
>
>The most significant local change we have is Ian's fileatter work.  It
>provides a 2x-4x speedup in HEAD operations so we don't want to lose
>it.  If there's some way to get those changes into whatever version is
>being supported these days (cvshome.org doesn't answer for me so I
>couldn't check it out).
>
>I'd have to look through the archives to find info on the other local
>changes.  I don't think they were as crucial as the fileattr one.
>Chris or Jason might remember.

I believe you're right.  Only the fileattr changes were really important.

cgf

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  1:17 ` Ian Lance Taylor
@ 2004-05-21  3:51   ` Frank Ch. Eigler
  2004-05-21  4:12     ` Ian Lance Taylor
  2004-05-21  4:14     ` Ian Lance Taylor
  0 siblings, 2 replies; 7+ messages in thread
From: Frank Ch. Eigler @ 2004-05-21  3:51 UTC (permalink / raw)
  To: overseers

Hi -

ian wrote:

> [...]
> Also, rather than try to integrate the patch, it's usually easier to
> just import a new version.  Our changes are not all that extensive.
> [...]

This sounds good to me.  Is your set of fileattr changes available
someplace as a plain diff?

By the way, qmail still has a couple of thousand messages in the queue
according to qmail-qstat and a du of the queue/remote directory.  We're
not out of the woods for good yet.  Perhaps the connecttimeoutremote
setting could be used and set nice and low.

- FChE

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  3:51   ` Frank Ch. Eigler
@ 2004-05-21  4:12     ` Ian Lance Taylor
  2004-05-21  4:14     ` Ian Lance Taylor
  1 sibling, 0 replies; 7+ messages in thread
From: Ian Lance Taylor @ 2004-05-21  4:12 UTC (permalink / raw)
  To: Frank Ch. Eigler; +Cc: overseers

"Frank Ch. Eigler" <fche@redhat.com> writes:

> By the way, qmail still has a couple of thousand messages in the queue
> according to qmail-qstat and a du of the queue/remote directory.  We're
> not out of the woods for good yet.  Perhaps the connecttimeoutremote
> setting could be used and set nice and low.

Yeah, I just knocked timeoutremote back to 150.

I don't think changing timeoutconnect will make much difference, since
the default is 60.

Ian

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: cvs, ecn
  2004-05-21  3:51   ` Frank Ch. Eigler
  2004-05-21  4:12     ` Ian Lance Taylor
@ 2004-05-21  4:14     ` Ian Lance Taylor
  1 sibling, 0 replies; 7+ messages in thread
From: Ian Lance Taylor @ 2004-05-21  4:14 UTC (permalink / raw)
  To: Frank Ch. Eigler; +Cc: overseers

"Frank Ch. Eigler" <fche@redhat.com> writes:

> > [...]
> > Also, rather than try to integrate the patch, it's usually easier to
> > just import a new version.  Our changes are not all that extensive.
> > [...]
> 
> This sounds good to me.  Is your set of fileattr changes available
> someplace as a plain diff?

Sure, here is the result of

cvs diff -p -u -r cvs-1_11_1p1-ian-fileattr-mods-branchpoint -r cvs-1_11_1p1-ian-fileattr-mods-branch

on the coolo-cvs repository.

Ian

Index: src/ChangeLog
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/ChangeLog,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/ChangeLog	1 Apr 2002 09:18:32 -0000	1.1.1.6
+++ src/ChangeLog	7 Apr 2002 00:40:25 -0000	1.1.1.6.2.1
@@ -1,3 +1,111 @@
+2002-04-02  Jason Molenda  (jason-cl@molenda.com)
+
+        * commit.c (checkaddfile): Set the _expand attribute if someone is
+        re-adding a file and the attributes have changed.  Fixes sanity.sh
+        tests binfiles3-9 and beyond.
+
+        (checkaddfile): Set the _attic attribute if we're adding
+        on a branch, not just with a tag.  Fixes sanity.sh failures
+        in rmadd-* series of tests.
+
+        * rcs.c (RCS_isdead): Don't parse the RCS file if we're looking
+        at the head - the fileattr cache has enough information to know
+        if the head is dead.  Jed.
+
+        * sanity.sh (version-2r): Fix version string for remote testing.
+        (rcslib-symlink-10): Comment out this test.  Check discussion above.
+        (devcom2-20): Update expected attributes.
+
+2002-04-06  Chris Faylor (cgf@redhat.com)
+
+	* admin.c, checkin.c, commit.c, fileattr.c, fileattr.h, import,c
+	main.c, mkmodules.c, rcs.c, rcs.h, recurse.c, sanity.sh: Adapt
+	Ian's changes for cvs-1.11.1p1.
+
+Sat Feb 21 21:28:03 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+	* admin.c (admin_fileproc): Adjust the branch file attribute if we
+	change the default branch.
+
+Tue Feb 10 13:54:51 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+* admin.c (admin_fileproc): Write an empty string if changing the
+	substitution mode to the default of -kkv.
+
+Sat Feb  7 16:54:23 1998  Ian Lance Taylor  <ian@cygnus.com>
+
+	* fileattr.h: Document the _expand attribute.
+	* rcs.c (RCS_parse_with_attrs): Only use the cache if the _expand
+	attribute is set.  When caching attributes, cache expand.
+	(RCS_reparsercsfile): Double check the expand attribute.
+	* import.c (add_rcs_file): Set the _expand attribute.
+	* admin.c (admin_fileproc): Set the _expand attribute if we change
+	the expansion mode.
+	* sanity.sh (devcom2, devcom3): Update for _expand attribute.
+
+	* fileattr.c (fileattr_newfile): Don't do anything if the file
+	already had attributes.
+	* commit.c (checkaddfile): Only call fileattr_newfile before
+	adding a brand new RCS file.
+
+Mon Dec 15 00:00:09 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* admin.c: Include "fileattr.h".
+	(admin_fileproc): Set the _head fileattr after deleting a
+	revision.
+	* commit.c (remove_file): Don't increment the head version number
+	before storing it; it's now updated by RCS_checkin.
+	* rcs.c (RCS_reparsercsfile): Don't crash if the head has no
+	value.
+	* root.c (parse_cvsroot): Change error messages to match
+	testsuite.
+	* sanity.sh (crerepos): Change testsuite to match error messages.
+
+Sat Oct 11 18:30:41 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* sanity.sh (devcom2): Add _head attributes where appropriate.
+
+Fri Jul  4 17:18:55 1997  Ian Lance Taylor  <ian@cygnus.com>
+
+	* mkmodules.c (init): Call fileattr_startdir.
+	* sanity.sh (devcom3): Add _head attributes where appropriate.
+
+Sat Jun 29 20:04:51 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+	* commit.c (commit_filesdoneproc): Call fileattr_write before
+	calling Update_Logfile.
+
+Thu Jun 20 11:22:45 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+	* rcs.c (RCS_reparsercsfile): Fix double check of branch
+	attribute.
+
+Mon Jun 17 15:11:09 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+	* fileattr.h: Document new attributes.
+	* rcs.c: Include fileattr.h.
+	(RCS_parse_with_attrs): New function.
+	(RCS_reparsercsfile): Double check head and branch fields.
+	* rcs.h (RCS_parse_with_attrs): Declare.
+	* recurse.c (do_file_proc): Call RCS_parse_with_attrs rather than
+	RCS_parse.
+	* import.c: Inclue fileattr.h.
+	(import_descend): Call fileattr_startdir, fileattr_write, and
+	fileattr_free.
+	(update_rcs_file): Set _head attribute.
+	(add_rcs_file): Set _head and _branch attributes.
+	* commit.c (remove_file): Clear _branch attribute if resetting
+	to default branch.  Set _head and _attic attributes if head is
+	removed.
+	(fixbranch): Set _branch attribute.
+	(checkaddfile): Clear _attic attribute if file is moved out of
+	attic.  Set _attic attribute if new file is created in attic.
+	(lock_RCS): Clear _branch attribute if resetting to default
+	branch.
+	* checkin.c (Checkin): Set _head attribute with new value.
+	* sanity.sh (devcom): Comment out devcom-b2 test, since attributes
+	now always exist.
+
 2001-04-27  Larry Jones  <larry.jones@sdrc.com>
 
 	* main.c (lookup_command_attribute): Lookup specified command, not
Index: src/admin.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/admin.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/admin.c	1 Apr 2002 09:18:32 -0000	1.1.1.6
+++ src/admin.c	2 Apr 2002 08:16:22 -0000	1.1.1.6.2.1
@@ -10,6 +10,7 @@
  */
 
 #include "cvs.h"
+#include "fileattr.h"
 #ifdef CVS_ADMIN_GROUP
 #include <grp.h>
 #endif
@@ -585,7 +586,11 @@ admin_fileproc (callerdat, finfo)
 	    }
 	}
 	if (status == 0)
+	{
 	    RCS_setbranch (rcs, branch);
+	    fileattr_set (finfo->file, "_branch",
+			  branch != NULL && *branch != '\0' ? branch : NULL);
+	}
 	if (branch != NULL && branch != &admin_data->branch[2])
 	    free (branch);
     }
@@ -663,6 +668,7 @@ admin_fileproc (callerdat, finfo)
 		free (rev1);
 	    if (rev2)
 		free (rev2);
+	    fileattr_set (finfo->file, "_head", rcs->head);
 	}
     }
     if (admin_data->desc != NULL)
@@ -675,7 +681,11 @@ admin_fileproc (callerdat, finfo)
 	char *kflag = admin_data->kflag + 2;
 	char *oldexpand = RCS_getexpand (rcs);
 	if (oldexpand == NULL || strcmp (oldexpand, kflag) != 0)
+	{
 	    RCS_setexpand (rcs, kflag);
+	    fileattr_set (finfo->file, "_expand",
+			  strcmp (kflag, "kv") == 0 ? "" : kflag);
+	}
     }
 
     /* Handle miscellaneous options.  TODO: decide whether any or all
Index: src/checkin.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/checkin.c,v
retrieving revision 1.1.1.3
retrieving revision 1.1.1.3.4.1
diff -p -u -r1.1.1.3 -r1.1.1.3.4.1
--- src/checkin.c	1 Apr 2002 08:52:26 -0000	1.1.1.3
+++ src/checkin.c	2 Apr 2002 08:16:22 -0000	1.1.1.3.4.1
@@ -118,6 +118,7 @@ Checkin (type, finfo, rcs, rev, tag, opt
 		      vers->options, vers->tag, vers->date, (char *) 0);
 	    history_write (type, NULL, vers->vn_rcs,
 			   finfo->file, finfo->repository);
+	    fileattr_set (finfo->file, "_head", vers->srcfile->head);
 
 	    if (tocvsPath)
 		if (unlink_file_dir (tocvsPath) < 0)
Index: src/commit.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/commit.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.2
diff -p -u -r1.1.1.6 -r1.1.1.6.2.2
--- src/commit.c	1 Apr 2002 09:18:33 -0000	1.1.1.6
+++ src/commit.c	2 Apr 2002 08:55:11 -0000	1.1.1.6.2.2
@@ -1281,6 +1281,7 @@ commit_fileproc (callerdat, finfo)
 	    {
 		unlockrcs (finfo->rcs);
 		fixbranch (finfo->rcs, sbranch);
+		fileattr_set (finfo->file, "_branch", sbranch);
 	    }
 
 	    (void) time (&last_register_time);
@@ -1330,6 +1331,7 @@ commit_fileproc (callerdat, finfo)
 	{
 	    unlockrcs (finfo->rcs);
 	    fixbranch (finfo->rcs, sbranch);
+	    fileattr_set (finfo->file, "_branch", sbranch);
 	}
     }
     else if (ci->status == T_REMOVED)
@@ -1419,6 +1421,9 @@ commit_filesdoneproc (callerdat, err, re
 
     got_message = 0;
 
+    /* Update any new _head attributes, in case loginfo wants to run
+       CVS itself.  */
+    fileattr_write ();
 
     Update_Logfile (repository, saved_message, (FILE *) 0, ulist);
 
@@ -1706,6 +1711,7 @@ remove_file (finfo, tag, message)
 	    return (1);
 	}
 	RCS_rewrite (finfo->rcs, NULL, NULL);
+	fileattr_set (finfo->file, "_branch", NULL);
     }
 
     /* check something out.  Generally this is the head.  If we have a
@@ -1749,7 +1755,11 @@ remove_file (finfo, tag, message)
 
     old_path = xstrdup (finfo->rcs->path);
     if (!branch)
+    {
 	RCS_setattic (finfo->rcs, 1);
+	fileattr_set (finfo->file, "_head", finfo->rcs->head);
+	fileattr_set (finfo->file, "_attic", "");
+    }
 
     /* Print message that file was removed. */
     cvs_output (old_path, 0);
@@ -1938,6 +1948,7 @@ checkaddfile (file, repository, tag, opt
 	       used to.  */
 	    error (0, 0, "changing keyword expansion mode to %s", options);
 	    RCS_setexpand (rcsfile, options + 2);
+            fileattr_set (file, "_expand", options + 2);
 	}
 
 	if (!adding_on_branch)
@@ -1962,6 +1973,7 @@ checkaddfile (file, repository, tag, opt
 		retval = 1;
 		goto out;
 	    }
+	    fileattr_set (file, "_attic", NULL);
 	}
 
 	rev = RCS_getversion (rcsfile, tag, NULL, 1, (int *) NULL);
@@ -1989,6 +2001,8 @@ checkaddfile (file, repository, tag, opt
 
 	char *opt;
 
+	fileattr_newfile (file);
+
 	desc = NULL;
 	descalloc = 0;
 	desclen = 0;
@@ -2084,6 +2098,9 @@ checkaddfile (file, repository, tag, opt
 		goto out;
 	    }
 
+	   /* We don't need to set any file attributes here, because we
+	      will wind up calling Checkin, which will handle them.  */
+
 	    /* put the new file back where it was */
 	    rename_file (fname, file);
 	    free (fname);
@@ -2169,7 +2186,8 @@ checkaddfile (file, repository, tag, opt
 	}
     }
 
-    fileattr_newfile (file);
+    if (adding_on_branch && newfile)
+        fileattr_set (file, "_attic", "");
 
     /* At this point, we used to set the file mode of the RCS file
        based on the mode of the file in the working directory.  If we
@@ -2236,6 +2254,8 @@ lock_RCS (user, rcs, rev, repository)
 		    free (branch);
 		return (1);
 	    }
+
+	    fileattr_set (user, "_branch", NULL);
 	}
 	err = RCS_lock(rcs, NULL, 1);
     }
@@ -2273,7 +2293,10 @@ lock_RCS (user, rcs, rev, repository)
 
     /* try to restore the branch if we can on error */
     if (branch != NULL)
+    {
 	fixbranch (rcs, branch);
+	fileattr_set (user, "_branch", branch);
+    }
 
     if (branch)
 	free (branch);
Index: src/fileattr.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/fileattr.c,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.4.2.1
diff -p -u -r1.1.1.4 -r1.1.1.4.2.1
--- src/fileattr.c	1 Apr 2002 09:14:24 -0000	1.1.1.4
+++ src/fileattr.c	2 Apr 2002 08:16:22 -0000	1.1.1.4.2.1
@@ -483,6 +483,15 @@ fileattr_newfile (filename)
         /* No attributes existed previously.  */
 	attrlist = getlist ();
     }
+    else
+    {
+	node = findnode (attrlist, filename);
+	if (node != NULL)
+	{
+	    /* The file already had attributes.  Don't change them.  */
+	    return;
+	}
+    }
 
     node = getnode ();
     node->type = FILEATTR;
Index: src/fileattr.h
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/fileattr.h,v
retrieving revision 1.1.1.4
retrieving revision 1.1.1.4.2.1
diff -p -u -r1.1.1.4 -r1.1.1.4.2.1
--- src/fileattr.h	1 Apr 2002 09:03:06 -0000	1.1.1.4
+++ src/fileattr.h	2 Apr 2002 08:16:22 -0000	1.1.1.4.2.1
@@ -49,7 +49,20 @@
    EDITOR > VAL { , EDITOR > VAL }
    where EDITOR is a username, and VAL is TIME+HOSTNAME+PATHNAME, where
    TIME is when the "cvs edit" command happened,
-   and HOSTNAME and PATHNAME are for the working directory.  */
+   and HOSTNAME and PATHNAME are for the working directory.
+
+   _head: Head revision of file.  This is a copy of the value of the head
+   keyword in the RCS file.
+
+   _branch: Default branch of file.  This is a copy of the value of the
+   branch keyword in the RCS file.
+
+   _expand: RCS substition options for file.  This is a copy of the
+   value of the expand keyword in the RCS file.  If there is no expand
+   keyword, then this attribute is still present, with an empty value.
+
+   _attic: If the attribute is present, the RCS file is in the Attic.
+   The value is unimportant.  */
 
 #define CVSREP_FILEATTR "CVS/fileattr"
 \f
Index: src/import.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/import.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/import.c	1 Apr 2002 09:18:34 -0000	1.1.1.6
+++ src/import.c	2 Apr 2002 08:16:22 -0000	1.1.1.6.2.1
@@ -17,6 +17,7 @@
  */
 
 #include "cvs.h"
+#include "fileattr.h"
 #include "savecwd.h"
 #include <assert.h>
 
@@ -413,6 +414,8 @@ import_descend (message, vtag, targc, ta
     int err = 0;
     List *dirlist = NULL;
 
+    fileattr_startdir (repository);
+
     /* first, load up any per-directory ignore lists */
     ign_add_file (CVSDOTIGNORE, 1);
     wrap_add_file (CVSDOTWRAPPER, 1);
@@ -499,6 +502,9 @@ import_descend (message, vtag, targc, ta
 	(void) CVS_CLOSEDIR (dirp);
     }
 
+    fileattr_write ();
+    fileattr_free ();
+
     if (dirlist != NULL)
     {
 	Node *head, *p;
@@ -688,6 +694,8 @@ update_rcs_file (message, vfile, vtag, t
 	letter = 'U';
     add_log (letter, vfile);
 
+    fileattr_set (vfile, "_head", vers->srcfile->head);
+
     freevers_ts (&vers);
     return (0);
 }
@@ -1417,6 +1425,11 @@ userfile);
     if (tocvsPath)
 	if (unlink_file_dir (tocvsPath) < 0)
 		error (0, errno, "cannot remove %s", tocvsPath);
+
+    fileattr_set (user, "_head", vhead);
+    fileattr_set (user, "_branch", vbranch);
+    fileattr_set (user, "_expand", local_opt == NULL ? "" : local_opt);
+
     if (free_opt != NULL)
 	free (free_opt);
     return (err);
Index: src/main.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/main.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/main.c	1 Apr 2002 09:18:35 -0000	1.1.1.6
+++ src/main.c	2 Apr 2002 08:16:22 -0000	1.1.1.6.2.1
@@ -541,6 +541,7 @@ main (argc, argv)
 	    case 'v':
 		(void) fputs ("\n", stdout);
 		version (0, (char **) NULL);    
+		(void) fputs ("(with local hacks)", stdout);
 		(void) fputs ("\n", stdout);
 		(void) fputs ("\
 Copyright (c) 1989-2001 Brian Berliner, david d `zoo' zuhn, \n\
Index: src/mkmodules.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/mkmodules.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/mkmodules.c	1 Apr 2002 09:18:35 -0000	1.1.1.6
+++ src/mkmodules.c	2 Apr 2002 08:16:22 -0000	1.1.1.6.2.1
@@ -878,6 +878,8 @@ init (argc, argv)
     /* Make Emptydir so it's there if we need it */
     mkdir_if_needed (CVSNULLREPOS);
 
+    fileattr_startdir (".");
+
     /* 80 is long enough for all the administrative file names, plus
        "/" and so on.  */
     info = xmalloc (strlen (adm) + 80);
Index: src/rcs.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/rcs.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.2
diff -p -u -r1.1.1.6 -r1.1.1.6.2.2
--- src/rcs.c	1 Apr 2002 09:18:35 -0000	1.1.1.6
+++ src/rcs.c	2 Apr 2002 08:55:12 -0000	1.1.1.6.2.2
@@ -11,6 +11,7 @@
 #include <assert.h>
 #include "cvs.h"
 #include "edit.h"
+#include "fileattr.h"
 #include "hardlink.h"
 
 int preserve_perms = 0;
@@ -291,6 +292,73 @@ RCS_parse (file, repos)
 }
 
 /*
+ * Parse an RCS file if we know that we can fetch file attributes.  This
+ * skips reading the file if the attributes are available.
+ */
+
+RCSNode *
+RCS_parse_with_attrs (file, repos)
+     const char *file;
+     const char *repos;
+{
+    char *expand;
+    RCSNode *rcs;
+
+    expand = fileattr_get0 (file, "_expand");
+    if (expand != NULL)
+    {
+	char *rcsfile;
+
+        /* We have head and branch attributes for this file, so we
+           don't need to actually open it.  */
+	rcs = (RCSNode *) xmalloc (sizeof (RCSNode));
+	memset ((char *) rcs, 0, sizeof (RCSNode));
+	rcs->refcount = 1;
+
+	rcsfile = xmalloc (strlen (repos) + strlen (file)
+			   + sizeof (RCSEXT) + sizeof (CVSATTIC) + 10);
+	if (fileattr_get (file, "_attic") == NULL)
+	    (void) sprintf (rcsfile, "%s/%s%s", repos, file, RCSEXT);
+	else
+	{
+	    (void) sprintf (rcsfile, "%s/%s/%s%s", repos, CVSATTIC, file,
+			    RCSEXT);
+	    rcs->flags |= INATTIC;
+	}
+	rcs->path = rcsfile;
+
+	rcs->head = fileattr_get0 (file, "_head");
+	rcs->branch = fileattr_get0 (file, "_branch");
+	if (*expand != '\0')
+	    rcs->expand = expand;
+	else
+	    free (expand);
+
+	rcs->flags |= PARTIAL | VALID;
+
+	return rcs;
+    }
+
+    /* For backward compatibility for repositories which don't have
+       head and branch attributes stored yet, just call RCS_parse, and
+       then store the attributes.  */
+    rcs = RCS_parse (file, repos);
+
+    if (rcs != NULL)
+    {
+        fileattr_set (file, "_head", rcs->head);
+	if (rcs->branch != NULL)
+	    fileattr_set (file, "_branch", rcs->branch);
+	if (rcs->flags & INATTIC)
+	    fileattr_set (file, "_attic", "");
+	fileattr_set (file, "_expand",
+		      rcs->expand != NULL ? rcs->expand : "");
+    }
+
+    return rcs;
+}
+
+/*
  * Parse a specific rcsfile.
  */
 RCSNode *
@@ -462,6 +530,37 @@ RCS_reparsercsfile (rdata, pfp, rcsbufp)
 
 	gotkey = 0;
 
+	if (STREQ (RCSHEAD, key)
+	    && (value == NULL
+		? rdata->head != NULL
+		: (rdata->head == NULL
+		   || ! STREQ (value, rdata->head))))
+	{
+	   error (1, 0, "head attribute does not match file for `%s'",
+		  rcsfile);
+	}
+
+	if (STREQ (RCSBRANCH, key)
+	    && (value == NULL
+		? rdata->branch != NULL
+		: (rdata->branch == NULL
+		   || strncmp (value, rdata->branch,
+			       strlen (rdata->branch)) != 0)))
+	{
+	   error (1, 0, "branch attribute does not match file for `%s'",
+		  rcsfile);
+	}
+
+	if (STREQ (RCSEXPAND, key)
+	    && (value == NULL
+		? rdata->expand != NULL
+		: (rdata->expand == NULL
+		   || ! STREQ (value, rdata->expand))))
+	{
+	    error (1, 0, "expand attribute does not match file for `%s'",
+		   rcsfile);
+	}
+
 	/* Skip head, branch and expand tags; we already have them. */
 	if (STREQ (key, RCSHEAD)
 	    || STREQ (key, RCSBRANCH)
@@ -3295,6 +3394,9 @@ RCS_isdead (rcs, tag)
     Node *p;
     RCSVers *version;
 
+    if (STREQ (tag, rcs->head)) 
+       return (rcs->flags & INATTIC);
+  
     if (rcs->flags & PARTIAL)
 	RCS_reparsercsfile (rcs, (FILE **) NULL, (struct rcsbuffer *) NULL);
 
Index: src/rcs.h
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/rcs.h,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/rcs.h	1 Apr 2002 09:18:38 -0000	1.1.1.6
+++ src/rcs.h	2 Apr 2002 08:16:25 -0000	1.1.1.6.2.1
@@ -186,6 +186,7 @@ enum rcs_delta_op {RCS_ANNOTATE, RCS_FET
  * exported interfaces
  */
 RCSNode *RCS_parse PROTO((const char *file, const char *repos));
+RCSNode *RCS_parse_with_attrs PROTO((const char *file, const char *repos));
 RCSNode *RCS_parsercsfile PROTO((char *rcsfile));
 void RCS_fully_parse PROTO((RCSNode *));
 void RCS_reparsercsfile PROTO((RCSNode *, FILE **, struct rcsbuffer *));
Index: src/recurse.c
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/recurse.c,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.1
diff -p -u -r1.1.1.6 -r1.1.1.6.2.1
--- src/recurse.c	1 Apr 2002 09:18:36 -0000	1.1.1.6
+++ src/recurse.c	2 Apr 2002 08:16:25 -0000	1.1.1.6.2.1
@@ -801,7 +801,7 @@ do_file_proc (p, closure)
 
     if (frfile->frame->dosrcs && repository)
     {
-	finfo->rcs = RCS_parse (finfo->file, repository);
+	finfo->rcs = RCS_parse_with_attrs (finfo->file, repository);
 
 	/* OK, without W_LOCAL the error handling becomes relatively
 	   simple.  The file names came from readdir() on the
Index: src/sanity.sh
===================================================================
RCS file: /cvs/sourceware/coolo-cvs/src/sanity.sh,v
retrieving revision 1.1.1.6
retrieving revision 1.1.1.6.2.2
diff -p -u -r1.1.1.6 -r1.1.1.6.2.2
--- src/sanity.sh	1 Apr 2002 09:18:42 -0000	1.1.1.6
+++ src/sanity.sh	2 Apr 2002 08:55:15 -0000	1.1.1.6.2.2
@@ -1588,7 +1588,7 @@ for what in $tests; do
 	  dotest version-1 "${testcvs} --version" \
 '
 Concurrent Versions System (CVS) [0-9.]*.*
-
+(with local hacks)
 Copyright (c) [-0-9]* Brian Berliner, david d .zoo. zuhn, 
                         Jeff Polk, and other authors
 
@@ -1599,8 +1599,8 @@ Specify the --help option for further in
 
 	  if $remote; then
 		dotest version-2r "${testcvs} version" \
-'Client: Concurrent Versions System (CVS) [0-9.]* (client/server)
-Server: Concurrent Versions System (CVS) [0-9.]* (client/server)'
+'Client: Concurrent Versions System (CVS) [0-9.]*.* (client/server)
+Server: Concurrent Versions System (CVS) [0-9.]*.* (client/server)'
 	  else
 		dotest version-2 "${testcvs} version" \
 'Concurrent Versions System (CVS) [0-9.]*.*'
@@ -6046,11 +6046,12 @@ done"
 	  # OK, why this message happens twice is relatively clear
 	  # (the check_* and rtag_* calls to start_recursion).
 	  # Why it happens a third time I didn't try to find out.
-	  dotest rcslib-symlink-10 \
-"${testcvs} -q rtag -b -r the_tag brtag first-dir" \
-"${PROG} [a-z]*: could not read RCS file for file2
-${PROG} [a-z]*: could not read RCS file for first-dir/file2
-${PROG} [a-z]*: could not read RCS file for first-dir/file2"
+### FIXME Jason Molenda
+#	  dotest rcslib-symlink-10 \
+#"${testcvs} -q rtag -b -r the_tag brtag first-dir" \
+#"${PROG} [a-z]*: could not read RCS file for file2
+#${PROG} [a-z]*: could not read RCS file for first-dir/file2
+#${PROG} [a-z]*: could not read RCS file for first-dir/file2"
 	  cd ..
 
 	  cd ..
@@ -12325,7 +12326,9 @@ U first-dir/abc'
 	  dotest devcom-b0 "${testcvs} watch off" ''
 	  dotest devcom-b1 "${testcvs} watch remove" ''
 	  # Test that CVS 1.6 and earlier can handle the repository.
-	  dotest_fail devcom-b2 "test -d ${CVSROOT_DIRNAME}/first-dir/CVS"
+	  # This test no longer works, because of the new _head, .etc,
+	  # attributes.
+	  # dotest_fail devcom-b2 "test -d ${CVSROOT_DIRNAME}/first-dir/CVS"
 
 	  # Now test watching just some, not all, files.
 	  dotest devcom-some0 "${testcvs} watch on abc" ''
@@ -12407,10 +12410,10 @@ U first-dir/w3'
 	  dotest devcom2-16 "${testcvs} editors w4" ''
 	  # Make sure there are no droppings lying around
 	  dotest devcom2-17 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \
-"Fw1	_watched=
-Fw2	_watched=
-Fw3	_watched=
-Fnw1	_watched=
+"Fw1	_watched=;_expand=;_head=1.1
+Fw2	_watched=;_expand=;_head=1.1
+Fnw1	_expand=;_head=1.1;_watched=
+Fw3	_expand=;_head=1.1;_watched=
 D	_watched="
 	  cd ..
 
@@ -12426,10 +12429,10 @@ U first${PLUS}dir/w3"
 
 	  # Make sure there are no droppings lying around
 	  dotest devcom2-20 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \
-"Fw1	_watched=
-Fw2	_watched=
-Fw3	_watched=
-Fnw1	_watched=
+"Fw1	_watched=;_expand=;_head=1.1
+Fw2	_watched=;_expand=;_head=1.1
+Fnw1	_expand=;_head=1.1;_watched=
+Fw3	_expand=;_head=1.1;_watched=
 D	_watched="
 
 	  cd ../..
@@ -12456,8 +12459,8 @@ D	_watched="
 	  # OK, since we are about to delve into CVS's internals, make
 	  # sure that we seem to be correct about how they work.
 	  dotest devcom3-5 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \
-"Fw1	_watched=
-Fw2	_watched="
+"Fw1	_watched=;_expand=;_head=1.1
+Fw2	_watched=;_expand=;_head=1.1"
 	  # Now write a few more lines, just as if we were a newer version
 	  # of CVS implementing some new feature.
 	  cat <<'EOF' >>${CVSROOT_DIRNAME}/first-dir/CVS/fileattr
@@ -12470,7 +12473,8 @@ EOF
 	  # Note that writing these lines in another order would be OK
 	  # too.
 	  dotest devcom3-7 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \
-"Fw2	_watched=
+"Fw1	_expand=;_head=1.1
+Fw2	_watched=;_expand=;_head=1.1
 G@#..!@#=&
 Enew	line	here"
 
@@ -12484,8 +12488,8 @@ Enew	line	here"
 	  echo 'Fw2	duplicate=' >>${CVSROOT_DIRNAME}/first-dir/CVS/fileattr
 	  dotest devcom3-8 "${testcvs} watch on w1" ''
 	  dotest devcom3-9 "cat ${CVSROOT_DIRNAME}/first-dir/CVS/fileattr" \
-"Fw2	_watched=
-Fw1	_watched=
+"Fw1	_expand=;_head=1.1;_watched=
+Fw2	_watched=;_expand=;_head=1.1
 Enew	line	here
 G@#..!@#=&"
 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2004-05-21  3:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-05-21  0:12 cvs, ecn Frank Ch. Eigler
2004-05-21  1:17 ` Ian Lance Taylor
2004-05-21  3:51   ` Frank Ch. Eigler
2004-05-21  4:12     ` Ian Lance Taylor
2004-05-21  4:14     ` Ian Lance Taylor
2004-05-21  2:05 ` Angela Marie Thomas
2004-05-21  3:22   ` Christopher Faylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).