+}
+static bool WriteScenarioVersion(pkgDepCache &Cache, FileFd &output, pkgCache::PkgIterator const &Pkg,
+ pkgCache::VerIterator const &Ver)
+{
+ bool Okay = output.Write("Package: ") && output.Write(Pkg.Name());
+ Okay &= output.Write("\nSource: ") && output.Write(Ver.SourcePkgName());
+ Okay &= output.Write("\nArchitecture: ") && output.Write(Ver.Arch());
+ Okay &= output.Write("\nVersion: ") && output.Write(Ver.VerStr());
+ Okay &= output.Write("\nSource-Version: ") && output.Write(Ver.SourceVerStr());
+ if (Pkg.CurrentVer() == Ver)
+ Okay &= output.Write("\nInstalled: yes");
+ if (Pkg->SelectedState == pkgCache::State::Hold ||
+ (Cache[Pkg].Keep() == true && Cache[Pkg].Protect() == true))
+ Okay &= output.Write("\nHold: yes");
+ std::string aptid;
+ strprintf(aptid, "\nAPT-ID: %d", Ver->ID);
+ Okay &= output.Write(aptid);
+ if (PrioMap[Ver->Priority] != nullptr)
+ Okay &= output.Write("\nPriority: ") && output.Write(PrioMap[Ver->Priority]);
+ if ((Pkg->Flags & pkgCache::Flag::Essential) == pkgCache::Flag::Essential)
+ Okay &= output.Write("\nEssential: yes");
+ if (Ver->Section != 0)
+ Okay &= output.Write("\nSection: ") && output.Write(Ver.Section());
+ if ((Ver->MultiArch & pkgCache::Version::Allowed) == pkgCache::Version::Allowed)
+ Okay &= output.Write("\nMulti-Arch: allowed");
+ else if ((Ver->MultiArch & pkgCache::Version::Foreign) == pkgCache::Version::Foreign)
+ Okay &= output.Write("\nMulti-Arch: foreign");
+ else if ((Ver->MultiArch & pkgCache::Version::Same) == pkgCache::Version::Same)
+ Okay &= output.Write("\nMulti-Arch: same");
+ std::set<string> Releases;
+ for (pkgCache::VerFileIterator I = Ver.FileList(); I.end() == false; ++I) {
+ pkgCache::PkgFileIterator File = I.File();
+ if (File.Flagged(pkgCache::Flag::NotSource) == false) {
+ string Release = File.RelStr();
+ if (!Release.empty())
+ Releases.insert(Release);
+ }
+ }
+ if (!Releases.empty()) {
+ Okay &= output.Write("\nAPT-Release:");
+ for (std::set<string>::iterator R = Releases.begin(); R != Releases.end(); ++R)
+ Okay &= output.Write("\n ") && output.Write(*R);
+ }
+ std::string aptpin;
+ strprintf(aptpin, "\nAPT-Pin: %d", Cache.GetPolicy().GetPriority(Ver));
+ Okay &= output.Write(aptpin);
+ if (Cache.GetCandidateVersion(Pkg) == Ver)
+ Okay &= output.Write("\nAPT-Candidate: yes");
+ if ((Cache[Pkg].Flags & pkgCache::Flag::Auto) == pkgCache::Flag::Auto)
+ Okay &= output.Write("\nAPT-Automatic: yes");
+ return Okay;