string srcpkg;
string prefix;
string descr;
- string src_section;
string verstr;
string server;
string path;
pkgCache::PkgIterator Pkg = V.ParentPkg();
pkgRecords::Parser &rec=Recs.Lookup(V.FileList());
- // build uri
+ // we need the the source pkg, the source version and the pool prefix
srcpkg = rec.SourcePkg().empty() ? Pkg.Name() : rec.SourcePkg();
- // FIXME: we actually need the source section here
- src_section= Pkg.Section();
- if(src_section.find('/')!=src_section.npos)
- src_section=string(src_section, 0, src_section.find('/'));
- else
- src_section="main";
-
- prefix+=srcpkg[0];
- if(srcpkg.size()>3 && srcpkg[0]=='l' && srcpkg[1]=='i' && srcpkg[2]=='b')
- prefix=std::string("lib")+srcpkg[3];
-
- verstr = V.VerStr();
- if(verstr.find(':')!=verstr.npos)
- verstr=string(verstr, verstr.find(':')+1);
+ verstr = StripEpoch(V.VerStr());
+ prefix = flNotFile(rec.FileName());
// make the server configurable
server = _config->Find("Apt::Changelogs::Server",
"http://packages.debian.org/");
// ... but not the format string to avoid all possible attacks
- strprintf(path, "/changelogs/pool/%s/%s/%s/%s_%s/changelog", src_section.c_str(), prefix.c_str(), srcpkg.c_str(), srcpkg.c_str(), verstr.c_str());
+ strprintf(path, "/changelogs/%s/%s_%s/changelog", prefix.c_str(), srcpkg.c_str(), verstr.c_str());
// queue it
string changelog_uri = server+path;
strprintf(descr, _("Changelog for %s (%s)"), srcpkg.c_str(), changelog_uri.c_str());