From: Michael Vogt Date: Mon, 14 Nov 2005 10:43:13 +0000 (+0000) Subject: * merged with apt--mvo X-Git-Tag: 0.7.21~284^2~40 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/98db4dafeaf684d411e41ed73fac089ffdfd2334?hp=-c * merged with apt--mvo Patches applied: * bubulle@debian.org--2005/apt--main--0--patch-116 Merge with Michael * bubulle@debian.org--2005/apt--main--0--patch-117 Merge with Michael * bubulle@debian.org--2005/apt--main--0--patch-118 Russian translation update by Yuri Kozlov * bubulle@debian.org--2005/apt--main--0--patch-119 Merge with Michael and add update-po as a pre-req for binary * bubulle@debian.org--2005/apt--main--0--patch-120 Re-generate all PO Files * bubulle@debian.org--2005/apt--main--0--patch-121 Complete French translation * bubulle@debian.org--2005/apt--main--0--patch-122 Correct typography in French translation * bubulle@debian.org--2005/apt--main--0--patch-123 Spelling fix for consistency in French translation * bubulle@debian.org--2005/apt--main--0--patch-124 Merge with Michael * bubulle@debian.org--2005/apt--main--0--patch-125 Fixed localization of y/n questions in German translation * bubulle@debian.org--2005/apt--main--0--patch-126 Swedish translation update * bubulle@debian.org--2005/apt--main--0--patch-127 Complete Tagalog translation / Add Changelog * bubulle@debian.org--2005/apt--main--0--patch-128 Danish translation update * bubulle@debian.org--2005/apt--main--0--patch-129 Basque translation update * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-82 * merged with bubulle * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-83 * cmdline/apt-get.cc: fix bug in FindSrc() (debian #335213) * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-84 * added armeb to archtable * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-85 * merged with bubulle, changelog updates * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-86 * merged the NMU from Franz Pop, fixed armeb problem (#333599) * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-87 * removed double armeb entry in buildlib/sizetable * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-88 * finalized changelog * michael.vogt@ubuntu.com--2005/apt--mvo--0--patch-89 * turn off "secure-acquire" when --allow-unauthenticated is given --- 98db4dafeaf684d411e41ed73fac089ffdfd2334 diff --combined apt-pkg/acquire-item.cc index 75a7faa2a,debd1face..9fb7b57c2 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@@ -24,8 -24,6 +24,8 @@@ #include #include #include +#include +#include #include @@@ -33,7 -31,6 +33,7 @@@ #include #include #include +#include #include /*}}}*/ @@@ -134,410 -131,14 +134,410 @@@ void pkgAcquire::Item::Rename(string Fr } /*}}}*/ + +// AcqDiffIndex::AcqDiffIndex - Constructor +// --------------------------------------------------------------------- +/* Get the DiffIndex file first and see if there are patches availabe + * If so, create a pkgAcqIndexDiffs fetcher that will get and apply the + * patches. If anything goes wrong in that process, it will fall back to + * the original packages file + */ +pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire *Owner, + string URI,string URIDesc,string ShortDesc, + string ExpectedMD5) + : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), Description(URIDesc) +{ + + Debug = _config->FindB("Debug::pkgAcquire::Diffs",false); + + Desc.Description = URIDesc + "/DiffIndex"; + Desc.Owner = this; + Desc.ShortDesc = ShortDesc; + Desc.URI = URI + ".diff/Index"; + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(URI) + string(".DiffIndex"); + + if(Debug) + std::clog << "pkgAcqDiffIndex: " << Desc.URI << std::endl; + + // look for the current package file + CurrentPackagesFile = _config->FindDir("Dir::State::lists"); + CurrentPackagesFile += URItoFileName(RealURI); + + if(!FileExists(CurrentPackagesFile) || + !_config->FindB("Acquire::Diffs",true)) { + // we don't have a pkg file or we don't want to queue + if(Debug) + std::clog << "No index file or canceld by user" << std::endl; + Failed("", NULL); + return; + } + + if(Debug) { + std::clog << "pkgAcqIndexDiffs::pkgAcqIndexDiffs(): " + << CurrentPackagesFile << std::endl; + } + + QueueURI(Desc); + +} + +// AcqIndex::Custom600Headers - Insert custom request headers /*{{{*/ +// --------------------------------------------------------------------- +/* The only header we use is the last-modified header. */ +string pkgAcqDiffIndex::Custom600Headers() +{ + string Final = _config->FindDir("Dir::State::lists"); + Final += URItoFileName(RealURI) + string(".IndexDiff"); + + if(Debug) + std::clog << "Custom600Header-IMS: " << Final << std::endl; + + struct stat Buf; + if (stat(Final.c_str(),&Buf) != 0) + return "\nIndex-File: true"; + + return "\nIndex-File: true\nLast-Modified: " + TimeRFC1123(Buf.st_mtime); +} + + +bool pkgAcqDiffIndex::ParseDiffIndex(string IndexDiffFile) +{ + if(Debug) + std::clog << "pkgAcqIndexDiffs::ParseIndexDiff() " << IndexDiffFile + << std::endl; + + pkgTagSection Tags; + string ServerSha1; + vector available_patches; + + FileFd Fd(IndexDiffFile,FileFd::ReadOnly); + pkgTagFile TF(&Fd); + if (_error->PendingError() == true) + return false; + + if(TF.Step(Tags) == true) + { + string local_sha1; + bool found = false; + DiffInfo d; + string size; + + 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; + // set found to true, this will queue a pkgAcqIndexDiffs with + // a empty availabe_patches + found = true; + } else { + 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); + while(hist >> d.sha1 >> size >> d.file) { + d.size = atoi(size.c_str()); + // read until the first match is found + if(d.sha1 == local_sha1) + found=true; + // from that point on, we probably need all diffs + if(found) { + if(Debug) + std::clog << "Need to get diff: " << d.file << std::endl; + available_patches.push_back(d); + } + } + } + + // 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, available_patches); + Complete = false; + Status = StatDone; + Dequeue(); + return true; + } + } + + return false; +} + +void pkgAcqDiffIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqDiffIndex failed: " << Desc.URI << std::endl + << "Falling back to normal index file aquire" << std::endl; + + new pkgAcqIndex(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5); + + Complete = false; + Status = StatDone; + Dequeue(); +} + +void pkgAcqDiffIndex::Done(string Message,unsigned long Size,string Md5Hash, + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqDiffIndex::Done(): " << Desc.URI << std::endl; + + Item::Done(Message,Size,Md5Hash,Cnf); + + string FinalFile; + FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); + + // sucess in downloading the index + // rename the index + FinalFile += string(".IndexDiff"); + if(Debug) + std::clog << "Renaming: " << DestFile << " -> " << FinalFile + << std::endl; + Rename(DestFile,FinalFile); + chmod(FinalFile.c_str(),0644); + DestFile = FinalFile; + + if(!ParseDiffIndex(DestFile)) + return Failed("", NULL); + + Complete = true; + Status = StatDone; + Dequeue(); + return; +} + + + +// AcqIndexDiffs::AcqIndexDiffs - Constructor +// --------------------------------------------------------------------- +/* The package diff is added to the queue. one object is constructed + * for each diff and the index + */ +pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *Owner, + string URI,string URIDesc,string ShortDesc, + string ExpectedMD5, vector diffs) + : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5), + available_patches(diffs) +{ + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(URI); + + Debug = _config->FindB("Debug::pkgAcquire::Diffs",false); + + Desc.Description = URIDesc; + Desc.Owner = this; + Desc.ShortDesc = ShortDesc; + + if(available_patches.size() == 0) { + // we are done (yeah!) + Finish(true); + } else { + // get the next diff + State = StateFetchDiff; + QueueNextDiff(); + } +} + + +void pkgAcqIndexDiffs::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqIndexDiffs failed: " << Desc.URI << std::endl + << "Falling back to normal index file aquire" << std::endl; + new pkgAcqIndex(Owner, RealURI, Description,Desc.ShortDesc, + ExpectedMD5); + Finish(); +} + + +// helper that cleans the item out of the fetcher queue +void pkgAcqIndexDiffs::Finish(bool allDone) +{ + // we restore the original name, this is required, otherwise + // the file will be cleaned + if(allDone) { + DestFile = _config->FindDir("Dir::State::lists"); + DestFile += URItoFileName(RealURI); + + // do the final md5sum checking + MD5Summation sum; + FileFd Fd(DestFile, FileFd::ReadOnly); + sum.AddFD(Fd.Fd(), Fd.Size()); + Fd.Close(); + string MD5 = (string)sum.Result(); + + if (!ExpectedMD5.empty() && MD5 != ExpectedMD5) + { + Status = StatAuthError; + ErrorText = _("MD5Sum mismatch"); + Rename(DestFile,DestFile + ".FAILED"); + Dequeue(); + return; + } + + // this is for the "real" finish + Complete = true; + Status = StatDone; + Dequeue(); + if(Debug) + std::clog << "\n\nallDone: " << DestFile << "\n" << std::endl; + return; + } + + if(Debug) + std::clog << "Finishing: " << Desc.URI << std::endl; + Complete = false; + Status = StatDone; + Dequeue(); + return; +} + + + +bool pkgAcqIndexDiffs::QueueNextDiff() +{ + + // calc sha1 of the just patched file + string FinalFile = _config->FindDir("Dir::State::lists"); + FinalFile += URItoFileName(RealURI); + + FileFd fd(FinalFile, FileFd::ReadOnly); + SHA1Summation SHA1; + SHA1.AddFD(fd.Fd(), fd.Size()); + string local_sha1 = string(SHA1.Result()); + if(Debug) + std::clog << "QueueNextDiff: " + << FinalFile << " (" << local_sha1 << ")"<::iterator I=available_patches.begin(); + available_patches.size() > 0 && I != available_patches.end() + && (*I).sha1 != local_sha1; + I++) { + available_patches.erase(I); + } + + // error checking and falling back if no patch was found + if(available_patches.size() == 0) { + Failed("", NULL); + return false; + } + + // queue the right diff + Desc.URI = string(RealURI) + ".diff/" + available_patches[0].file + ".gz"; + Desc.Description = available_patches[0].file + string(".pdiff"); + + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; + DestFile += URItoFileName(RealURI + ".diff/" + available_patches[0].file); + + if(Debug) + std::clog << "pkgAcqIndexDiffs::QueueNextDiff(): " << Desc.URI << std::endl; + + QueueURI(Desc); + + return true; +} + + + +void pkgAcqIndexDiffs::Done(string Message,unsigned long Size,string Md5Hash, + pkgAcquire::MethodConfig *Cnf) +{ + if(Debug) + std::clog << "pkgAcqIndexDiffs::Done(): " << Desc.URI << std::endl; + + Item::Done(Message,Size,Md5Hash,Cnf); + + string FinalFile; + FinalFile = _config->FindDir("Dir::State::lists")+URItoFileName(RealURI); + + // sucess in downloading a diff, enter ApplyDiff state + if(State == StateFetchDiff) + { + + if(Debug) + std::clog << "Sending to gzip method: " << FinalFile << std::endl; + + string FileName = LookupTag(Message,"Filename"); + State = StateUnzipDiff; + Desc.URI = "gzip:" + FileName; + DestFile += ".decomp"; + QueueURI(Desc); + Mode = "gzip"; + return; + } + + // sucess in downloading a diff, enter ApplyDiff state + if(State == StateUnzipDiff) + { + + // rred excepts the patch as $FinalFile.ed + Rename(DestFile,FinalFile+".ed"); + + if(Debug) + std::clog << "Sending to rred method: " << FinalFile << std::endl; + + State = StateApplyDiff; + Desc.URI = "rred:" + FinalFile; + QueueURI(Desc); + Mode = "rred"; + return; + } + + + // success in download/apply a diff, queue next (if needed) + if(State == StateApplyDiff) + { + // remove the just applied patch + available_patches.erase(available_patches.begin()); + + // move into place + if(Debug) + { + std::clog << "Moving patched file in place: " << std::endl + << DestFile << " -> " << FinalFile << std::endl; + } + Rename(DestFile,FinalFile); + + // see if there is more to download + if(available_patches.size() > 0) { + new pkgAcqIndexDiffs(Owner, RealURI, Description, Desc.ShortDesc, + ExpectedMD5, available_patches); + return Finish(); + } else + return Finish(true); + } +} + + // AcqIndex::AcqIndex - Constructor /*{{{*/ // --------------------------------------------------------------------- /* The package file is added to the queue and a second class is instantiated to fetch the revision file */ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, string URI,string URIDesc,string ShortDesc, - string ExpectedMD5, string comprExt) : - Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5) + string ExpectedMD5, string comprExt) + : Item(Owner), RealURI(URI), ExpectedMD5(ExpectedMD5) { Decompression = false; Erase = false; @@@ -707,35 -308,6 +707,35 @@@ void pkgAcqIndex::Done(string Message,u Mode = decompProg; } +// AcqIndexTrans::pkgAcqIndexTrans - Constructor /*{{{*/ +// --------------------------------------------------------------------- +/* The Translation file is added to the queue */ +pkgAcqIndexTrans::pkgAcqIndexTrans(pkgAcquire *Owner, + string URI,string URIDesc,string ShortDesc) : + pkgAcqIndex(Owner, URI, URIDesc, ShortDesc, "", "") +{ +} + + /*}}}*/ +// AcqIndexTrans::Failed - Silence failure messages for missing files /*{{{*/ +// --------------------------------------------------------------------- +/* */ +void pkgAcqIndexTrans::Failed(string Message,pkgAcquire::MethodConfig *Cnf) +{ + if (Cnf->LocalOnly == true || + StringToBool(LookupTag(Message,"Transient-Failure"),false) == false) + { + // Ignore this + Status = StatDone; + Complete = false; + Dequeue(); + return; + } + + Item::Failed(Message,Cnf); +} + /*}}}*/ + pkgAcqMetaSig::pkgAcqMetaSig(pkgAcquire *Owner, string URI,string URIDesc,string ShortDesc, string MetaIndexURI, string MetaIndexURIDesc, @@@ -1035,8 -607,8 +1035,8 @@@ void pkgAcqMetaIndex::QueueIndexes(boo } // Queue Packages file - new pkgAcqIndex(Owner, (*Target)->URI, (*Target)->Description, - (*Target)->ShortDesc, ExpectedIndexMD5); + new pkgAcqDiffIndex(Owner, (*Target)->URI, (*Target)->Description, + (*Target)->ShortDesc, ExpectedIndexMD5); } } @@@ -1198,6 -770,12 +1198,12 @@@ pkgAcqArchive::pkgAcqArchive(pkgAcquir } } + // "allow-unauthenticated" restores apts old fetching behaviour + // that means that e.g. unauthenticated file:// uris are higher + // priority than authenticated http:// uris + if (_config->FindB("APT::Get::AllowUnauthenticated",false) == true) + Trusted = false; + // Select a source if (QueueNext() == false && _error->PendingError() == false) _error->Error(_("I wasn't able to locate file for the %s package. " diff --combined configure.in index 5ac3b0d8a,6130ab544..af423be05 --- a/configure.in +++ b/configure.in @@@ -18,7 -18,7 +18,7 @@@ AC_CONFIG_AUX_DIR(buildlib AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- - AC_DEFINE_UNQUOTED(VERSION,"0.6.42.1exp1") -AC_DEFINE_UNQUOTED(VERSION,"0.6.42.3") ++AC_DEFINE_UNQUOTED(VERSION,"0.6.42.3exp1") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) diff --combined debian/changelog index 67195fc7e,9e9b46ab9..d9ceff5ea --- a/debian/changelog +++ b/debian/changelog @@@ -1,16 -1,32 +1,45 @@@ - apt (0.6.42.1exp1) experimental; urgency=low ++apt (0.6.42.3exp1) experimental; urgency=low + + * added support for package index diffs + * added support for i18n of the package descriptions + * synced with the apt--debian-sid--0 branch + * build from mvo@debian.org--2005/apt--debian-experimental--0 + (from http://people.debian.org/~mvo/arch) + * fix bug in apt-cache when displaying the record (closes: #334887) + * add patch to fix http download corruption problem (thanks to + Petr Vandrovec, closes: #280844, #290694) + - -- Michael Vogt Wed, 19 Oct 2005 22:12:13 +0200 ++ -- Michael Vogt Sun, 13 Nov 2005 13:33:57 +0100 + + apt (0.6.42.3) unstable; urgency=low + + * Merge bubulle@debian.org--2005/apt--main--0 up to patch-129: + - patch-118: Russian translation update by Yuri Kozlov (closes: #335164) + - patch-119: add update-po as a pre-req for binary (closes: #329910) + - patch-121: Complete French translation + - patch-125: Fixed localization of y/n questions in German translation + (closes: #337078) + - patch-126: Swedish translation update (closes: #337163) + - patch-127: Complete Tagalog translation (closes: #337306) + - patch-128: Danish translation update (closes: #337949) + - patch-129: Basque translation update (closes: #338101) + * cmdline/apt-get.cc: + - bufix in FindSrc (closes: #335213, #337910) + * added armeb to archtable (closes: #333599) + * with --allow-unauthenticated use the old fallback behaviour for + sources (closes: #335112) + + -- Michael Vogt Wed, 9 Nov 2005 07:22:31 +0100 + + apt (0.6.42.2) unstable; urgency=high + + * NMU (approved by maintainer) + * Add AMD64 archive signing key to debian-archive.gpg (closes: #336500). + * Add big-endian arm (armeb) support (closes: #333599). + * Priority high to get the AMD key into testing ASAP. + + -- Frans Pop Sun, 30 Oct 2005 21:29:11 +0100 + apt (0.6.42.1) unstable; urgency=low * fix a incorrect example in the apt_prefrences man page @@@ -54,7 -70,7 +83,7 @@@ apt (0.6.42) unstable; urgency=lo * cmdline/apt-cdrom.cc: - fix some missing gettext() calls (closes: #334539) * doc/apt-cache.8.xml: fix typo (closes: #334714) - + -- Michael Vogt Wed, 19 Oct 2005 22:02:09 +0200 apt (0.6.41) unstable; urgency=low @@@ -139,7 -155,6 +168,7 @@@ apt (0.6.38) unstable; urgency=lo -- Matt Zimmerman Sat, 25 Jun 2005 09:51:00 -0700 +>>>>>>> MERGE-SOURCE apt (0.6.37) breezy; urgency=low * Merge bubulle@debian.org--2005/apt--main--0 up to patch-81