|
|
@@ -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);
|
|
|
|