- string local_sha1;
- string tmp = Tags.FindS("SHA1-Current");
- std::stringstream ss(tmp);
- ss >> ServerSha1;
-
- FileFd fd(CurrentPackagesFile, FileFd::ReadOnly);
- SHA1Summation SHA1;
- SHA1.AddFD(fd.Fd(), fd.Size());
- local_sha1 = string(SHA1.Result());
-
- if(local_sha1 == ServerSha1) {
- if(Debug)
- std::clog << "Package file is up-to-date" << std::endl;
- Finish(true);
- return true;
- }
- if(Debug)
- std::clog << "SHA1-Current: " << ServerSha1 << std::endl;
-
- // check the historie and see what patches we need
- string history = Tags.FindS("SHA1-History");
- std::stringstream hist(history);
- string sha1, size, file;
- bool found = false;
- while(hist >> sha1 >> size >> file) {
- if(sha1 == local_sha1)
- found=true;
- if(found) {
- if(Debug)
- std::clog << "Need to get diff: " << file << std::endl;
- needed_files.push_back(file);
- }
- }
- // no information how to get the patches, bail out
- if(!found) {
- if(Debug)
- std::clog << "Can't find a patch in the index file" << std::endl;
- // Failed will queue a big package file
- Failed("", NULL);
- } else {
- // queue the diffs
- new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc,
- ExpectedMD5, needed_files);
- Finish();
- return true;
- }