bug-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

cvs 1.11.2 rdiff doesn't reset date on removed files


From: tony
Subject: cvs 1.11.2 rdiff doesn't reset date on removed files
Date: Wed, 30 Oct 2002 16:09:00 -0500
User-agent: Internet Messaging Program (IMP) 3.1

When using "diff -urN" to create a patch, if a file no longer exists, then the 
date in the diff heading is reset to 0, and the contents of the file are 
removed by the diff.  When the "patch" command sees that the date has been 
reset, it knows to remove the file rather than just leaving an empty file.  
Here's an example:
  diff -urN test-1.0/mytext.txt test-1.3/mytext.txt
  --- test-1.0/mytext.txt Mon May  8 14:22:28 2000
  +++ test-1.3/mytext.txt Wed Dec 31 19:00:00 1969

cvs rdiff doesn't do this.  It always sets the timestamp from the RCS file.  
So, you can't remove files using patches made by cvs rdiff.  This is a pain.

Here's my patch:

diff -urN cvs-1.11.1p1-orig/src/patch.c cvs-1.11.1p1-apc/src/patch.c
--- cvs-1.11.1p1-orig/src/patch.c       Tue Apr 24 14:14:53 2001
+++ cvs-1.11.1p1-apc/src/patch.c        Tue Oct 22 12:37:06 2002
@@ -389,6 +389,8 @@
     char *cp1, *cp2;
     FILE *fp;
     int line_length;
+    time_t nulltime = 0L;
+    char *nulldate;
 
     line1 = NULL;
     line1_chars_allocated = 0;
@@ -645,6 +647,17 @@
                    goto out;
                }
            }
+
+           /* If file was removed, reset the timestamp */
+           if (!vers_head) 
+           {
+               nulldate = ctime(&nulltime);
+               /* Fix non-standard format, like in vers_ts.c */
+               nulldate[24] = 0;
+               if (nulldate[8] == '0') nulldate[8] = ' ';
+               (void) sprintf(cp2, "\t%s\n", nulldate);
+           }
+
            assert (current_parsed_root != NULL);
            assert (current_parsed_root->directory != NULL);
            {




reply via email to

[Prev in Thread] Current Thread [Next in Thread]