bug-cvs
[Top][All Lists]
Advanced

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

Re: cvs 1.11.2 rdiff doesn't reset date on removed files


From: tony
Subject: Re: cvs 1.11.2 rdiff doesn't reset date on removed files
Date: Thu, 21 Nov 2002 16:28:01 -0500
User-agent: Internet Messaging Program (IMP) 3.1

> Could you resubmit this patch with a test case, as per the HACKING
> file 
> in the top level of the source distribution?
> 
> Thanks,
> 
> Derek

***CHANGELOG***

NEWS: Note rdiff reset timestamp fix for removed files.

***NEWS***

* The "cvs rdiff" command now resets the date in the patch headers of removed 
files.  The patch utility expects the date to be reset to 0 (Jan. 1 1970 
00:00:00 GMT) for removed files, otherwise it leaves zero-length files after 
applying the patch.  The previous behaviour was to always use the RCS checkin 
date in the patch header, even for removed files.

***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);
            {


***TEST***

         # test rdiff_reset_ts patch
         # rdiff should reset the patch timestamp to 0 for removed files
         mkdir testimport
         cd testimport
         echo "removeme" > removeme
         echo "completely" >> removeme
         dotest_sort rdiff-9.0-reset_ts-do_import \
          "${testcvs} import -I ! -m reset-ts-import trdiff_reset_ts TRDIFF T9" 
\
'

N trdiff_reset_ts/removeme
No conflicts created by this import'
         dotest rdiff-9.1-reset_ts-do_checkout \
          "${testcvs} co trdiff_reset_ts" \
"${PROG}"' [a-z]*: Updating trdiff_reset_ts
U trdiff_reset_ts/removeme'
         cd trdiff_reset_ts
         dotest rdiff-9.3-reset_ts-do_remove \
          "${testcvs} rm -f removeme" \
"${PROG}"' [a-z]*: scheduling `removeme'\'' for removal
'"${PROG}"' [a-z]*: use .'"${PROG}"' commit. to remove this file permanently'
         dotest rdiff-9.4-reset_ts-do_commit \
          "${testcvs} commit -m reset-ts-commit removeme" \
"Removing removeme;
${CVSROOT_DIRNAME}/trdiff_reset_ts/removeme,v  <--  removeme
new revision: delete; previous revision: 1\.1\.1\.1
done"
         dotest rdiff-9.5-reset_ts-do_rdiff \
          "${testcvs} rdiff -u -r1\.1 trdiff_reset_ts" \
"${PROG}"' [a-z]*: Diffing trdiff_reset_ts
Index: trdiff_reset_ts/removeme
diff -u trdiff_reset_ts/removeme:1\.1 trdiff_reset_ts/removeme:removed
--- trdiff_reset_ts/removeme:1\.1     .*
+++ trdiff_reset_ts/removeme     .* 19\(69\|70\)
@@ -1,2 +0,0 @@
-removeme
-completely'
         cd ../..
         rm -r testimport
         rm -rf ${CVSROOT_DIRNAME}/trdiff_reset_ts





reply via email to

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