|
@@ -76,6 +76,39 @@ PackageSet PackageSet::FromRegEx(pkgCacheFile &Cache, std::string pattern, std::
|
|
|
return pkgset;
|
|
return pkgset;
|
|
|
}
|
|
}
|
|
|
/*}}}*/
|
|
/*}}}*/
|
|
|
|
|
+// GroupedFromCommandLine - Return all versions specified on commandline/*{{{*/
|
|
|
|
|
+std::map<unsigned short, PackageSet> PackageSet::GroupedFromCommandLine(
|
|
|
|
|
+ pkgCacheFile &Cache, const char **cmdline,
|
|
|
|
|
+ std::list<PackageSet::Modifier> const &mods,
|
|
|
|
|
+ unsigned short const &fallback, std::ostream &out) {
|
|
|
|
|
+ std::map<unsigned short, PackageSet> pkgsets;
|
|
|
|
|
+ for (const char **I = cmdline; *I != 0; ++I) {
|
|
|
|
|
+ unsigned short modID = fallback;
|
|
|
|
|
+ std::string str = *I;
|
|
|
|
|
+ for (std::list<PackageSet::Modifier>::const_iterator mod = mods.begin();
|
|
|
|
|
+ mod != mods.end(); ++mod) {
|
|
|
|
|
+ size_t const alength = strlen(mod->Alias);
|
|
|
|
|
+ switch(mod->Pos) {
|
|
|
|
|
+ case PackageSet::Modifier::POSTFIX:
|
|
|
|
|
+ if (str.compare(str.length() - alength, alength,
|
|
|
|
|
+ mod->Alias, 0, alength) != 0)
|
|
|
|
|
+ continue;
|
|
|
|
|
+ str.erase(str.length() - alength);
|
|
|
|
|
+ modID = mod->ID;
|
|
|
|
|
+ break;
|
|
|
|
|
+ case PackageSet::Modifier::PREFIX:
|
|
|
|
|
+ continue;
|
|
|
|
|
+ case PackageSet::Modifier::NONE:
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ PackageSet pset = PackageSet::FromString(Cache, str, out);
|
|
|
|
|
+ pkgsets[modID].insert(pset.begin(), pset.end());
|
|
|
|
|
+ }
|
|
|
|
|
+ return pkgsets;
|
|
|
|
|
+}
|
|
|
|
|
+ /*}}}*/
|
|
|
// FromCommandLine - Return all packages specified on commandline /*{{{*/
|
|
// FromCommandLine - Return all packages specified on commandline /*{{{*/
|
|
|
PackageSet PackageSet::FromCommandLine(pkgCacheFile &Cache, const char **cmdline, std::ostream &out) {
|
|
PackageSet PackageSet::FromCommandLine(pkgCacheFile &Cache, const char **cmdline, std::ostream &out) {
|
|
|
PackageSet pkgset;
|
|
PackageSet pkgset;
|