Re: Request for comments on 'Extending CVS with offline/disconnected operations'

"Stefan Monnier" <monnier+gnu.cvs.bug/news/@flint.cs.yale.edu>
Newsgroups gmane.comp.version-control.cvs.bugs
Organization Yale University
Message-ID <[email protected]>
> I think I would write a wrapper script around CVS calls for any email-based
> transport.  The rest of it I'd like to see implemented, but I don't have
> time right now to do it myself.  If anyone submitted fairly complete
> patches, I'd be happy to review and maybe commit them.

A while ago, I sent patches to make `add' and `remove' local operations.
There were the following problems:

- `cvs add <dir>' still needed remote access.  Getting rid of this case
  requires changes in the `commit' part of the server to automatically
  create a directory in the repository when needed.  I didn't bother with it.

- `cvs add <removedfile>' fails to resurrect the file (because it
  needs to connect to the server, but it didn't).


        Stefan


I haven't updated the patches.  For `cvs rm' it was just:

--- /home/monnier/install/cvs/src/remove.c.~1.48~       Thu May 29 14:11:33 2003
+++ /home/monnier/install/cvs/src/.#remove.c.1.48       Sun Jul  8 20:27:17 2001
@@ -76,7 +76,7 @@
 
     wrap_setup ();
 
-#ifdef CLIENT_SUPPORT
+#if 0
     if (current_parsed_root->isremote) {
        /* Call expand_wild so that the local removal of files will
            work.  It's ok to do it always because we have to send the
@@ -113,7 +113,7 @@
     err = start_recursion (remove_fileproc, (FILESDONEPROC) NULL,
                            remove_dirproc, (DIRLEAVEPROC) NULL, NULL,
                           argc, argv,
-                           local, W_LOCAL, 0, 1, (char *) NULL, 1);
+                           local, W_LOCAL, 0, !client_active, (char *) NULL, 1);
 
     if (removed_files && !really_quiet)
        error (0, 0, "use '%s commit' to remove %s permanently", program_name,

For `cvs add':

--- src/add.c	30 Apr 2003 17:24:07 -0000	1.85
+++ src/add.c	29 May 2003 18:15:10 -0000
@@ -59,6 +59,7 @@
     /* Nonzero if we found a slash, and are thus adding files in a
        subdirectory.  */
     int found_slash = 0;
+    int found_dir = 0;
     size_t cvsroot_len;
 
     if (argc == 1 || argc == -1)
@@ -119,6 +120,7 @@
 	{
 	    char *p;
 	    p = argv[i];
+	    if (isdir (p)) found_dir = 1;
 	    while (*p != '\0')
 	    {
 		if (ISDIRSEP (*p))
@@ -148,7 +150,7 @@
     }
 
 #ifdef CLIENT_SUPPORT
-    if (current_parsed_root->isremote)
+    if (current_parsed_root->isremote && found_dir)
     {
 	int j;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.