]> git.saurik.com Git - apt.git/commitdiff
* methods/rred.cc:
authorDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 4 May 2010 14:10:47 +0000 (16:10 +0200)
committerDavid Kalnischkies <kalnischkies@gmail.com>
Tue, 4 May 2010 14:10:47 +0000 (16:10 +0200)
  - use the patchfile modification time instead of the one from the
    "old" file - thanks to Philipp Weis for noticing! (Closes: #571541)

debian/changelog
methods/rred.cc

index 0f01d1867dc5a1ca11f602345eba6caed9f6ca5b..482f0860eb9814bd492f4085d774b6da45dd293c 100644 (file)
@@ -57,6 +57,9 @@ apt (0.7.26~exp4) UNRELEASED; urgency=low
   * apt-pkg/pkgcache.h:
     - enhance the Groups ABI by providing a ID as the other structs does
     - check also the size of the Group struct then checking for the others
+  * methods/rred.cc:
+    - use the patchfile modification time instead of the one from the
+      "old" file - thanks to Philipp Weis for noticing! (Closes: #571541)
 
   [ Jari Aalto ]
   * cmdline/apt-get.cc:
index 262c78cabdfa99a2425767199ae6ff7ff7fbc00f..f42c7a072cd280ff137dc0705c8143b4b85bc0d4 100644 (file)
@@ -477,23 +477,26 @@ bool RredMethod::Fetch(FetchItem *Itm)                                            /*{{{*/
    Patch.Close();
    To.Close();
 
-   // Transfer the modification times
-   struct stat Buf;
-   if (stat(Path.c_str(),&Buf) != 0)
+   /* Transfer the modification times from the patch file
+      to be able to see in which state the file should be
+      and use the access time from the "old" file */
+   struct stat BufBase, BufPatch;
+   if (stat(Path.c_str(),&BufBase) != 0 ||
+       stat(string(Path+".ed").c_str(),&BufPatch) != 0)
       return _error->Errno("stat",_("Failed to stat"));
 
    struct utimbuf TimeBuf;
-   TimeBuf.actime = Buf.st_atime;
-   TimeBuf.modtime = Buf.st_mtime;
+   TimeBuf.actime = BufBase.st_atime;
+   TimeBuf.modtime = BufPatch.st_mtime;
    if (utime(Itm->DestFile.c_str(),&TimeBuf) != 0)
       return _error->Errno("utime",_("Failed to set modification time"));
 
-   if (stat(Itm->DestFile.c_str(),&Buf) != 0)
+   if (stat(Itm->DestFile.c_str(),&BufBase) != 0)
       return _error->Errno("stat",_("Failed to stat"));
 
    // return done
-   Res.LastModified = Buf.st_mtime;
-   Res.Size = Buf.st_size;
+   Res.LastModified = BufBase.st_mtime;
+   Res.Size = BufBase.st_size;
    Res.TakeHashes(Hash);
    URIDone(Res);