summaryrefslogtreecommitdiff
path: root/apt-pkg/packageset.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/packageset.cc')
-rw-r--r--apt-pkg/packageset.cc42
1 files changed, 38 insertions, 4 deletions
diff --git a/apt-pkg/packageset.cc b/apt-pkg/packageset.cc
index f452bc052..baa1c211b 100644
--- a/apt-pkg/packageset.cc
+++ b/apt-pkg/packageset.cc
@@ -9,12 +9,15 @@
##################################################################### */
/*}}}*/
// Include Files /*{{{*/
+#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/error.h>
#include <apt-pkg/packageset.h>
#include <apt-pkg/strutl.h>
#include <apti18n.h>
+#include <vector>
+
#include <regex.h>
/*}}}*/
namespace APT {
@@ -44,12 +47,18 @@ PackageSet PackageSet::FromRegEx(pkgCache &Cache, const char * const pattern, st
if (regexec(&Pattern, Grp.Name(), 0, 0, 0) != 0)
continue;
pkgCache::PkgIterator Pkg = Grp.FindPkg("native");
- if (unlikely(Pkg.end() == true))
- // FIXME: Fallback to different architectures here?
- continue;
+ if (Pkg.end() == true) {
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ for (std::vector<std::string>::const_iterator a = archs.begin();
+ a != archs.end() || Pkg.end() != true; ++a) {
+ Pkg = Grp.FindPkg(*a);
+ }
+ if (Pkg.end() == true)
+ continue;
+ }
ioprintf(out, _("Note, selecting %s for regex '%s'\n"),
- Pkg.Name(), pattern);
+ Pkg.FullName(true).c_str(), pattern);
pkgset.insert(Pkg);
}
@@ -59,4 +68,29 @@ PackageSet PackageSet::FromRegEx(pkgCache &Cache, const char * const pattern, st
return pkgset;
}
/*}}}*/
+// FromCommandLine - Return all packages specified on commandline /*{{{*/
+PackageSet PackageSet::FromCommandLine(pkgCache &Cache, const char **cmdline, std::ostream &out) {
+ PackageSet pkgset;
+ for (const char **I = cmdline + 1; *I != 0; I++) {
+ pkgCache::PkgIterator Pkg = Cache.FindPkg(*I);
+ if (Pkg.end() == true) {
+ std::vector<std::string> archs = APT::Configuration::getArchitectures();
+ for (std::vector<std::string>::const_iterator a = archs.begin();
+ a != archs.end() || Pkg.end() != true; ++a) {
+ Pkg = Cache.FindPkg(*I, *a);
+ }
+ if (Pkg.end() == true) {
+ PackageSet regex = FromRegEx(Cache, *I, out);
+ if (regex.empty() == true)
+ _error->Warning(_("Unable to locate package %s"),*I);
+ else
+ pkgset.insert(regex.begin(), regex.end());
+ continue;
+ }
+ }
+ pkgset.insert(Pkg);
+ }
+ return pkgset;
+}
+ /*}}}*/
}