From 07aca07ae73016aa7823e708dda746eec8346989 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 26 Jan 2016 21:09:47 +0100 Subject: get sources for packages in multiple releases again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In 321213f0dcdcdaab04e01663e7a047b261400c9c Andreas Cadhalpun corrected the incorrect overriding of earlier better-fitting results with later (semi-)matches – but that broke the case in which packages are in multiple releases in the same version (and the user has both releases configured). Closes: 812497 --- apt-private/private-source.cc | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'apt-private/private-source.cc') diff --git a/apt-private/private-source.cc b/apt-private/private-source.cc index a6b446587..c45af6651 100644 --- a/apt-private/private-source.cc +++ b/apt-private/private-source.cc @@ -122,7 +122,7 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, return 0; } - if (MatchSrcOnly == false && Pkg.end() == false) + if (MatchSrcOnly == false && Pkg.end() == false) { if(VerTag != "" || RelTag != "" || ArchTag != "") { @@ -176,7 +176,7 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, // or we match against a release if(VerTag.empty() == false || (VF.File().Archive() != 0 && VF.File().Archive() == RelTag) || - (VF.File().Codename() != 0 && VF.File().Codename() == RelTag)) + (VF.File().Codename() != 0 && VF.File().Codename() == RelTag)) { // the Version we have is possibly fuzzy or includes binUploads, // so we use the Version of the SourcePkg (empty if same as package) @@ -190,12 +190,12 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, } } - if (Src == "" && ArchTag != "") + if (Src.empty() == true && ArchTag.empty() == false) { - if (VerTag != "") + if (VerTag.empty() == false) _error->Error(_("Can not find a package '%s' with version '%s'"), Pkg.FullName().c_str(), VerTag.c_str()); - if (RelTag != "") + if (RelTag.empty() == false) _error->Error(_("Can not find a package '%s' with release '%s'"), Pkg.FullName().c_str(), RelTag.c_str()); Src = Name; @@ -254,26 +254,24 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, /* Iterate over all of the hits, which includes the resulting binary packages in the search */ pkgSrcRecords::Parser *Parse; - while (true) + while (true) { SrcRecs.Restart(); - while ((Parse = SrcRecs.Find(Src.c_str(), MatchSrcOnly)) != 0) + while ((Parse = SrcRecs.Find(Src.c_str(), MatchSrcOnly)) != 0) { const std::string Ver = Parse->Version(); - bool CorrectRelTag = false; // See if we need to look for a specific release tag - if (RelTag != "" && UserRequestedVerTag == "") + if (RelTag.empty() == false && UserRequestedVerTag.empty() == true) { pkgCache::RlsFileIterator const Rls = GetReleaseFileForSourceRecord(Cache, SrcList, Parse); if (Rls.end() == false) { - if ((Rls->Archive != 0 && RelTag == Rls.Archive()) || - (Rls->Codename != 0 && RelTag == Rls.Codename())) - CorrectRelTag = true; + if ((Rls->Archive != 0 && RelTag != Rls.Archive()) && + (Rls->Codename != 0 && RelTag != Rls.Codename())) + continue; } - } else - CorrectRelTag = true; + } // Ignore all versions which doesn't fit if (VerTag.empty() == false && @@ -281,7 +279,7 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, continue; // Newer version or an exact match? Save the hit - if (CorrectRelTag && (Last == 0 || Cache->VS().CmpVersion(Version,Ver) < 0)) { + if (Last == 0 || Cache->VS().CmpVersion(Version,Ver) < 0) { Last = Parse; Offset = Parse->Offset(); Version = Ver; @@ -293,7 +291,7 @@ static pkgSrcRecords::Parser *FindSrc(const char *Name, break; } if (UserRequestedVerTag == "" && Version != "" && RelTag != "") - ioprintf(c1out, "Selected version '%s' (%s) for %s\n", + ioprintf(c1out, "Selected version '%s' (%s) for %s\n", Version.c_str(), RelTag.c_str(), Src.c_str()); if (Last != 0 || VerTag.empty() == true) -- cgit v1.2.3