Index: choose.cc =================================================================== RCS file: /cvs/cygwin-apps/setup/choose.cc,v retrieving revision 2.144 diff -u -r2.144 choose.cc --- choose.cc 8 Apr 2008 23:50:54 -0000 2.144 +++ choose.cc 2 Aug 2008 07:21:56 -0000 @@ -58,11 +58,15 @@ #include "Generic.h" #include "ControlAdjuster.h" #include "prereq.h" +#include "getopt++/StringOption.h" using namespace std; extern ThreeBarProgressPage Progress; +StringOption PackageOption("", 'P', "package", "Packages to install", false); + + /* Sizing information. */ @@ -84,6 +88,22 @@ sizeProcessor.AddControlInfo (ChooserControlsInfo); } +vector +tokenize(const string& str) +{ + vector result; + + size_t s=0, e=string::npos; + do { + e=str.find_first_of(", ",s); + if(s!=e) + result.push_back(str.substr(s,e-s)); + s=str.find_first_not_of(", ",e); + } while(s != string::npos); + + return result; +} + void ChooserPage::createListview () { @@ -97,6 +117,22 @@ chooser->Show(SW_SHOW); chooser->defaultTrust (TRUST_CURR); + + // select ones that the user explicitly specified + vector pkgs = tokenize(PackageOption); + for (vector ::iterator i = db.packages.begin (); + i != db.packages.end (); ++i) + { + packagemeta* pkg = *i; + if (find(pkgs.begin(),pkgs.end(),pkg->name)!=pkgs.end()) + { + pkg->desired = pkg->trustp (TRUST_CURR); + if (pkg->desired) + pkg->desired.pick (pkg->desired.accessible() && + pkg->desired != pkg->installed); + } + } + chooser->setViewMode (PickView::views::Category); if (!SetDlgItemText (GetHWND (), IDC_CHOOSE_VIEWCAPTION, chooser->mode_caption ())) log (LOG_BABBLE) << "Failed to set View button caption %ld" <<