Removed old source manager completely from all commands.
authorJan Kupec <jkupec@suse.cz>
Tue, 19 Jun 2007 16:53:46 +0000 (16:53 +0000)
committerJan Kupec <jkupec@suse.cz>
Tue, 19 Jun 2007 16:53:46 +0000 (16:53 +0000)
src/zypp-checkpatches.cc
src/zypper-command.h
src/zypper-info.cc
src/zypper-info.h
src/zypper-misc.cc
src/zypper-misc.h
src/zypper-sources.cc
src/zypper-sources.h
src/zypper-updates.cc
src/zypper.cc
src/zypper.h

index 4850545..b9778b0 100644 (file)
@@ -16,6 +16,7 @@
 
 #include <zypp/base/Gettext.h>
 #include <zypp/target/store/PersistentStorage.h>
+#include <zypp/RepoManager.h>
 
 #include "checkpatches-keyring-callbacks.h"
 #include "zypper.h"
@@ -84,11 +85,6 @@ namespace utils
 
 }
 
-#ifdef LIBZYPP_1xx
-typedef zypp::SourceManager::SourceInfo SourceInfo;
-#else
-using zypp::source::SourceInfo;
-#endif
 
 int exit_with_error( const std::string &error_str )
 {
@@ -133,78 +129,52 @@ int main(int argc, char **argv)
     return exit_with_error(excpt_r.msg());
   }
   
-  SourceManager_Ptr manager;
-  manager = SourceManager::sourceManager();
-  
+  RepoManager manager;
+
   KeyRingCallbacks keyring_callbacks;
   DigestCallbacks digest_callbacks;
   
-#ifdef LIBZYPP_1xx
-  // dont add rpms
-  God->initTarget("/", true);
-#else
   God->initializeTarget("/");
-#endif
   
   std::string token;
   stringstream token_stream;
   
-#ifdef LIBZYPP_1xx
-  token_stream << "[" << "target" << "| " << Date::now() << "]"; // too bad
-#else
   token_stream << "[" << "target" << "| " << God->target()->timestamp() << "]";
-#endif
 
-  std::list<SourceInfo> new_sources = manager->knownSourceInfos("/");
-  MIL << "Found " << new_sources.size()  << " sources." << endl;
+  std::list<RepoInfo> new_sources = manager.knownRepositories();
+  MIL << "Found " << new_sources.size()  << " repos." << endl;
 
-  for ( std::list<SourceInfo>::iterator it = new_sources.begin(); it != new_sources.end(); ++it)
+  for (std::list<RepoInfo>::iterator it = new_sources.begin(); it != new_sources.end(); ++it)
   {
-#ifdef LIBZYPP_1xx
-    Url url = it->url;
-#else
-    Url url = it->url();
-#endif
+    Url url = *(it->baseUrlsBegin());
 
     std::string scheme( url.getScheme());
 
     if ( (scheme == "cd" || scheme == "dvd") )
     {
-      MIL << "Skipping CD/DVD source: url:[" << it->url().asString() << "] product_dir:[" << it->path() << "] alias:[" << it->alias() << "] cache_dir:[" << it->cacheDir() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
+      MIL << "Skipping CD/DVD source: url:[" << (it->baseUrlsBegin())->asString() << "] alias:[" << it->alias() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
       continue;
     }
-    
+
     if ( ! it->enabled() )
     {
-      MIL << "Skipping disabled source: url:[" << url.asString() << "] product_dir:[" << it->path() << "] alias:[" << it->alias() << "] cache_dir:[" << it->cacheDir() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
+      MIL << "Skipping disabled source: url:[" << url.asString() << "] alias:[" << it->alias() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
       continue;
     }
 
     // Note: Url(it->url).asString() to hide password in logs
-    MIL << "Creating source: url:[" << url.asString() << "] product_dir:[" << it->path() << "] alias:[" << it->alias() << "] cache_dir:[" << it->cacheDir() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
-    
+    MIL << "Creating source: url:[" << url.asString() << "] alias:[" << it->alias() << "] auto_refresh:[ " << it->autorefresh() << "]" << endl;
+
     try
     {
-      Source_Ref src = SourceFactory().createFrom(it->type(), url, it->path(), it->alias(), it->cacheDir(), false, it->autorefresh());
-      src.refresh();
-      token_stream << "[" << src.alias() << "| " << src.url() << src.timestamp() << "]";
-    
-      MIL << "Source: " << src.alias() << " from " << src.timestamp() << std::endl;
-    
-      // skip sources without patches sources for now
-      bool has_patches = true;
-#ifndef LIBZYPP_1xx
-      has_patches = src.hasResolvablesOfKind( ResTraits<zypp::Patch>::kind );
-#endif
-      if ( has_patches )
-      {
-        MIL << "Including source " << src.url() << std::endl;
-        gData.sources.push_back(src);
-      }
-      else
-      {
-        MIL << "Excluding source " << src.url() << " ( no patches ) "<< std::endl;
-      }  
+      manager.refreshMetadata(*it);
+      manager.buildCache(*it);
+
+      token_stream << "[" << it->alias() << "| " << *(it->baseUrlsBegin()) << "]"; // src.timestamp() << "]";
+
+      MIL << "Source: " << it->alias() << std::endl; //" from " << src.timestamp() << std::endl;
+
+      gData.repos.push_back(*it);
     }
     catch (const Exception &excpt_r )
     {
@@ -213,7 +183,7 @@ int main(int argc, char **argv)
       gData.errors.push_back(str::form(_("Couldn't restore source.\nDetail: %s"), error.c_str()));
     }
   }
-  
+
   string previous_token;
   if ( PathInfo(TOKEN_FILE).isExist() )
     previous_token = read_old_token();
@@ -252,16 +222,17 @@ int main(int argc, char **argv)
     MIL << "System has changed, recalculation of updates needed" << endl;
   }
   
-  for ( std::list<Source_Ref>::const_iterator it = gData.sources.begin(); it != gData.sources.end(); ++it )
+  for ( std::list<RepoInfo>::const_iterator it = gData.repos.begin(); it != gData.repos.end(); ++it )
   {
-    God->addResolvables(it->resolvables());
+    Repository repository = manager.createFromCache(*it);
+    God->addResolvables(repository.resolvables());
   }
-  
-  if ( gData.sources.size() == 0 )
+
+  if ( gData.repos.size() == 0 )
   {
     gData.errors.push_back( str::form( _( "There are no update sources defined. Please add one or more update sources in order to be notified of updates.") ) );
   }
-  
+
   God->addResolvables( God->target()->resolvables(), true);
   
   God->resolver()->establishPool();
index 932cfcc..7c76bf7 100644 (file)
  */
 struct ZypperCommand
 {
-  static const ZypperCommand NONE;
   static const ZypperCommand ADD_REPO;
   static const ZypperCommand REMOVE_REPO;
   static const ZypperCommand LIST_REPOS;
   static const ZypperCommand REFRESH;
-  static const ZypperCommand SEARCH;
+
   static const ZypperCommand INSTALL;
   static const ZypperCommand REMOVE;
   static const ZypperCommand UPDATE;
   
+  static const ZypperCommand SEARCH;
   static const ZypperCommand INFO;
+  static const ZypperCommand LIST_UPDATES;
 
   static const ZypperCommand HELP;
   static const ZypperCommand SHELL;
   static const ZypperCommand SHELL_QUIT;
   static const ZypperCommand MOO;
-  
-  // rug commands
+
+  /** Special void command value meaning <b>not set</b> */
+  static const ZypperCommand NONE;
+
+  /** name rug commands */
+  //!@{
   static const ZypperCommand RUG_PATCH_INFO;
+  //!@}
 
   enum Command
   {
-    NONE_e,
     ADD_REPO_e,
     REMOVE_REPO_e,
     LIST_REPOS_e,
     REFRESH_e,
-    SEARCH_e,
+
     INSTALL_e,
     REMOVE_e,
     UPDATE_e,
     
+    SEARCH_e,
     INFO_e,
+    LIST_UPDATES_e,
     
     HELP_e,
     SHELL_e,
     SHELL_QUIT_e,
     MOO_e,
     
+    NONE_e,
+
     RUG_PATCH_INFO_e
   };
 
index 3d64951..c346b3e 100644 (file)
@@ -18,10 +18,10 @@ extern Settings gSettings;
 /**
  * 
  */
-void printInfo(const string & command, const vector<string> & arguments) {
+void printInfo(const ZypperCommand & command, const vector<string> & arguments) {
   Resolvable::Kind kind;
-  if (command == "info" || command == "if") kind =  ResTraits<Package>::kind;
-  else if (command == "patch-info") kind = ResTraits<Patch>::kind;
+  if (command == ZypperCommand::INFO) kind =  ResTraits<Package>::kind;
+  else if (command == ZypperCommand::RUG_PATCH_INFO) kind = ResTraits<Patch>::kind;
 
   ResPool pool = God->pool();
 
@@ -51,9 +51,9 @@ void printInfo(const string & command, const vector<string> & arguments) {
       // print info
       cout << endl << _("Information for ") << kind.asString() << " " << *nameit << ":\n\n";
 
-      if (command == "info" || command == "if")
+      if (command == ZypperCommand::INFO)
         printPkgInfo(installer.item,installed);
-      else if (command == "patch-info")
+      else if (command == ZypperCommand::RUG_PATCH_INFO)
         printPatchInfo(installer.item,installed);
     }
   }
index 127f0a0..0a70223 100644 (file)
@@ -6,7 +6,9 @@
 
 #include "zypp/PoolItem.h"
 
-void printInfo(const std::string & command, const std::vector<std::string> & arguments);
+#include "zypper-command.h"
+
+void printInfo(const ZypperCommand & command, const std::vector<std::string> & arguments);
 void printPkgInfo(const zypp::PoolItem & pool_item,  const zypp::PoolItem & ins_pool_item);
 void printPatchInfo(const zypp::PoolItem & pool_item, const zypp::PoolItem & ins_pool_item);
 #endif /*ZYPPERINFO_H_*/
index e23d945..bfc9d38 100644 (file)
@@ -359,7 +359,7 @@ int show_summary()
 
   return retv;
 }
-
+/*
 std::string calculate_token()
 {
   SourceManager_Ptr manager;
@@ -382,11 +382,7 @@ std::string calculate_token()
     MIL << "Source: " << src.alias() << " from " << src.timestamp() << std::endl;  
   }
 
-#ifdef LIBZYPP_1xx
-  token_stream << "[" << "target" << "| " << Date::now() << "]"; // too bad
-#else
   token_stream << "[" << "target" << "| " << God->target()->timestamp() << "]";
-#endif
   
   //static std::string digest(const std::string& name, std::istream& is
   token = Digest::digest("sha1", token_stream);
@@ -398,7 +394,8 @@ std::string calculate_token()
   
   return token;
 }
-
+*/
+/*
 void cond_load_resolvables ()
 {      
   // load repository resolvables
@@ -409,7 +406,7 @@ void cond_load_resolvables ()
     load_target();
   }
 }
-
+*/
 void load_target()
 {
   cerr << _("Parsing RPM database...") << endl;
@@ -417,7 +414,7 @@ void load_target()
   cerr_v << "   " <<  tgt_resolvables.size() << _(" resolvables.") << endl;
   God->addResolvables(tgt_resolvables, true /*installed*/);
 }
-
+/*
 void load_sources()
 {
   for ( std::list<Source_Ref>::iterator it = gData.sources.begin(); it !=  gData.sources.end(); ++it )
@@ -431,7 +428,7 @@ void load_sources()
     God->addResolvables(src_resolvables);
   }
 }
-
+*/
 
 /** read repository resolvables */
 void load_repo_resolvables()
index 641071c..4a2f978 100644 (file)
@@ -26,9 +26,9 @@ void mark_for_uninstall( const zypp::ResObject::Kind &kind,
 int show_summary();
 std::string calculate_token();
 //! load all resolvables that the user wants
-void cond_load_resolvables ();
+//void cond_load_resolvables ();
 void load_target();
-void load_sources();
+//void load_sources();
 void load_repo_resolvables();
 void establish ();
 bool resolve();
index 260f8e7..503d981 100644 (file)
@@ -6,7 +6,6 @@
 #include <fstream>
 #include <boost/format.hpp>
 #include <boost/lexical_cast.hpp>
-#include <boost/logic/tribool.hpp>
 
 #include <zypp/target/store/PersistentStorage.h>
 #include <zypp/base/IOStream.h>
@@ -347,13 +346,14 @@ void remove_repo( const std::string &alias )
 
 //! remove a source, identified in any way: alias, url, id
 // may throw:
+/*
 void remove_source( const std::string& anystring )
 {
   cerr_vv << "Constructing SourceManager" << endl;
   SourceManager_Ptr manager = SourceManager::sourceManager();
   cerr_vv << "Restoring SourceManager" << endl;
   try {
-    manager->restore (gSettings.root_dir, true /*use_cache*/);
+    manager->restore (gSettings.root_dir, true /*use_cache*//*);
     }
   catch (const Exception & ex) {
     // so what if sources cannot be restored
@@ -416,16 +416,17 @@ void remove_source( const std::string& anystring )
   }
 
   cerr_vv << "Storing source data" << endl;
-  manager->store( gSettings.root_dir, true /*metadata_cache*/ );
+  manager->store( gSettings.root_dir, true /*metadata_cache*//* );
 }
-
+*/
+/*
 //! rename a source, identified in any way: alias, url, id
 void rename_source( const std::string& anystring, const std::string& newalias )
 {
   cerr_vv << "Constructing SourceManager" << endl;
   SourceManager_Ptr manager = SourceManager::sourceManager();
   cerr_vv << "Restoring SourceManager" << endl;
-  manager->restore (gSettings.root_dir, true /*use_cache*/);
+  manager->restore (gSettings.root_dir, true /*use_cache*//*);
 
   Source_Ref src;
 
@@ -483,9 +484,9 @@ void rename_source( const std::string& anystring, const std::string& newalias )
   }
 
   cerr_vv << "Storing source data" << endl;
-  manager->store( gSettings.root_dir, true /*metadata_cache*/ );
+  manager->store( gSettings.root_dir, true /*metadata_cache*//* );
 }
-
+*/
 // ----------------------------------------------------------------------------
 
 // #217028
@@ -502,7 +503,7 @@ void warn_if_zmd()
 // ----------------------------------------------------------------------------
 
 // OLD code
-
+/*
 void cond_init_system_sources ()
 {
   static bool done = false;
@@ -520,8 +521,9 @@ void cond_init_system_sources ()
   }
   done = true;
 } 
-
+*/
 // OLD
+/*
 void init_system_sources()
 {
   SourceManager_Ptr manager;
@@ -547,8 +549,9 @@ void init_system_sources()
     gData.sources.push_back(src);
   }
 }
-
+*/
 // OLD
+/*
 void include_source_by_url( const Url &url )
 {
   try
@@ -567,7 +570,7 @@ void include_source_by_url( const Url &url )
   }
 
 }
-
+*/
 
 // Local Variables:
 // c-basic-offset: 2
index cc611e5..40d5984 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef ZMART_SOURCES_H
 #define ZMART_SOURCES_H
 
+#include <boost/logic/tribool.hpp>
+
 #include "zypp/Url.h"
 
 /**
@@ -46,7 +48,7 @@ int add_repo_by_url( const zypp::Url & url,
  *         ZYPPER_EXIT_OK otherwise
  */
 int add_repo_from_file(const std::string & repo_file_url,
-                        tribool enabled = true, tribool autorefresh = true);
+                        boost::tribool enabled = true, boost::tribool autorefresh = true);
 
 /**
  * If ZMD process found, notify user that ZMD is running and that changes
@@ -57,7 +59,7 @@ void warn_if_zmd();
 
 
 //! calls init_system_sources if not disabled by user (or non-root)
-void cond_init_system_sources(); // OLD
+//void cond_init_system_sources(); // OLD
 void init_system_sources(); // OLD
 
 void remove_source( const std::string& anystring ); // OLD
index b10a48a..f7c521d 100644 (file)
@@ -12,7 +12,7 @@
 #include <zypp/ZYpp.h>
 #include <zypp/ZYppFactory.h>
 #include <zypp/zypp_detail/ZYppReadOnlyHack.h>
-#include <zypp/SourceManager.h>
+#include <zypp/RepoManager.h>
 #include <zypp/base/Logger.h>
 #include <zypp/Digest.h>
 #include <zypp/target/store/xml_escape_parser.hpp>
@@ -86,9 +86,9 @@ void render_result( const Edition &version, std::ostream &out, const zypp::ResPo
   out << " </errors>" << std::endl;
   
   out << " <update-sources>" << std::endl;
-  for ( std::list<Source_Ref>::const_iterator it = gData.sources.begin(); it != gData.sources.end(); ++it )
+  for ( std::list<RepoInfo>::const_iterator it = gData.repos.begin(); it != gData.repos.end(); ++it )
   {
-    out << "  <source url=\"" << it->url() << "\" alias=\"" << it->alias() << "\"/>" << std::endl;
+    out << "  <source url=\"" << *(it->baseUrlsBegin()) << "\" alias=\"" << it->alias() << "\"/>" << std::endl;
   }
   out << " </update-sources>" << std::endl;
   out << " <update-list>" << std::endl;
index 0fea049..35450c5 100644 (file)
@@ -107,13 +107,19 @@ string help_commands = _(
 parsed_opts gopts;
 bool ghelp = false;
 
-// parses global options, returns the command
-string process_globals(int argc, char **argv)
+/*
+ * parses global options, returns the command
+ * 
+ * \returns ZypperCommand object representing the command or ZypperCommand::NONE
+ *          if an unknown command has been given. 
+ */
+ZypperCommand process_globals(int argc, char **argv)
 {
   // global options
   gopts = parse_options (argc, argv, global_options);
   if (gopts.count("_unknown"))
-    return "_unknown";
+    return ZypperCommand::NONE;
+    //return "_unknown";
 
   if (gopts.count("rug-compatible"))
     gSettings.is_rug_compatible = true;
@@ -175,48 +181,49 @@ string process_globals(int argc, char **argv)
     cerr << endl;
   }
 
-  string command;
+  // get command
 
-  if (optind < argc) {
-    command = argv[optind++];
-  }
-  if (command == "help") {
-    ghelp = true;
-    if (optind < argc) {
-      command = argv[optind++];
-    }
-    else {
-      command = "";
+  ZypperCommand command(ZypperCommand::NONE_e);
+  try
+  {
+    if (optind < argc)
+      command = ZypperCommand(argv[optind++]);
+
+    if (command == ZypperCommand::HELP)
+    {
+      ghelp = true;
+      if (optind < argc)
+        command = ZypperCommand(argv[optind++]);
+      else
+        command = ZypperCommand::NONE;
     }
   }
+  // exception from command parsing
+  catch (Exception & e)
+  {
+    cerr << e.msg() <<  endl;
+    command = ZypperCommand::NONE;
+  }
 
-  if (command.empty()) {
-    if (ghelp) {
-      cerr << help_global_options << help_commands;
-    }
-    else if (gopts.count("version")) {
-      cerr << PACKAGE;
-#ifdef LIBZYPP_1xx
-      cerr << " (libzypp-1.x.x)";
-#endif
-      cerr << endl;
-    }
-    else {
+  if (command == ZypperCommand::NONE)
+  {
+    if (ghelp)
+      cerr << help_global_options << endl << help_commands;
+    else if (gopts.count("version"))
+      cerr << PACKAGE << endl;
+    else
       cerr << _("Try -h for help") << endl;
-    }
   }
 
-  cerr_vv << "COMMAND: " << command << endl;
+  //cerr_vv << "COMMAND: " << command << endl;
   return command;
 }
 
 /// process one command from the OS shell or the zypper shell
-int one_command(const string& command_str, int argc, char **argv)
+int one_command(const ZypperCommand & command, int argc, char **argv)
 {
   // === command-specific options ===
 
-  ZypperCommand command(command_str);
-
   struct option no_options = {0, 0, 0, 0};
   struct option *specific_options = &no_options;
   string specific_help;
@@ -231,7 +238,11 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--disable-system-resolvables, -T\t\tDo not read system installed resolvables\n"
       );
 
-  if (command.toEnum() == ZypperCommand::INSTALL_e) {
+  if (command == ZypperCommand::HELP)
+  {
+    //cout << help_global_options << endl << help_commands;
+  }
+  else if (command == ZypperCommand::INSTALL) {
     static struct option install_options[] = {
       {"catalog",         required_argument, 0, 'c'},
       {"type",      required_argument, 0, 't'},
@@ -247,7 +258,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--no-confirm,-y\tDo not require user confirmation\n"
       );
   }
-  else if (command.toEnum() == ZypperCommand::REMOVE_e) {
+  else if (command == ZypperCommand::REMOVE) {
     static struct option remove_options[] = {
       {"type",       required_argument, 0, 't'},
       {"no-confirm", no_argument,       0, 'y'},
@@ -261,7 +272,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--no-confirm,-y\tDo not require user confirmation\n"
       );
   }
-  else if (command.toEnum() == ZypperCommand::ADD_REPO_e) {
+  else if (command == ZypperCommand::ADD_REPO) {
     static struct option service_add_options[] = {
       {"type", required_argument, 0, 't'},
       {"disabled", no_argument, 0, 'd'},
@@ -284,7 +295,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--no-refresh,-n\t\tDo not automatically refresh the metadata\n"
       );
   }
-  else if (command.toEnum() == ZypperCommand::LIST_REPOS_e) {
+  else if (command == ZypperCommand::LIST_REPOS) {
     static struct option service_list_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -298,7 +309,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "This command has no options.\n"
       );
   }
-  else if (command.toEnum() == ZypperCommand::REMOVE_REPO_e) {
+  else if (command == ZypperCommand::REMOVE_REPO) {
     static struct option service_delete_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -312,7 +323,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "This command has no options.\n"
       );
   }
-  else if (command_str == "service-rename" || command_str == "sr") {
+  else if (command == ZypperCommand::NONE) {//command_str == "service-rename" || command_str == "sr") {
     static struct option service_rename_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -326,7 +337,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "This command has no options.\n"
       );
   }
-  else if (command.toEnum() == ZypperCommand::REFRESH_e) {
+  else if (command == ZypperCommand::REFRESH) {
     static struct option refresh_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -338,7 +349,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "Refresh all installation sources found in the system.\n"
       );
   }
-  else if (command_str == "list-updates" || command_str == "lu") {
+  else if (command == ZypperCommand::NONE) { //command_str == "list-updates" || command_str == "lu") {
     static struct option list_updates_options[] = {
       {"type",         required_argument, 0, 't'},
       {"help", no_argument, 0, 'h'},
@@ -354,7 +365,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--type,-t\t\tType of resolvable (default: patch)\n"
       );
   }
-  else if (command_str == "update" || command_str == "up") {
+  else if (command == ZypperCommand::NONE) { //command_str == "update" || command_str == "up") {
     static struct option update_options[] = {
       {"type",            required_argument, 0, 't'},
       {"no-confirm", no_argument,       0, 'y'},
@@ -370,7 +381,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "\t--skip-interactive\t\tSkip interactive updates\n"
       );
   }
-  else if (command_str == "search" || command_str == "se") {
+  else if (command == ZypperCommand::SEARCH) {
     static struct option search_options[] = {
       {"installed-only", no_argument, 0, 'i'},
       {"uninstalled-only", no_argument, 0, 'u'},
@@ -410,7 +421,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "* and ? wildcards can also be used within search strings.\n"
       );
   }
-  else if (command_str == "patch-check" || command_str == "pchk") {
+  else if (command == ZypperCommand::NONE) {//command_str == "patch-check" || command_str == "pchk") {
     static struct option patch_check_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -424,7 +435,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "This command has no options.\n"
       );
   }
-  else if (command_str == "patches" || command_str == "pch") {
+  else if (command == ZypperCommand::NONE) {//command_str == "patches" || command_str == "pch") {
     static struct option patches_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -438,7 +449,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "This command has no options.\n"
       );
   }
-  else if (command_str == "info" || command_str == "if") {
+  else if (command == ZypperCommand::NONE) {//command_str == "info" || command_str == "if") {
     static struct option info_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -450,7 +461,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "'info' -- Show full information for packages\n"
       );
   }
-  else if (command_str == "patch-info") {
+  else if (command == ZypperCommand::NONE) {//command_str == "patch-info") {
     static struct option patch_info_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -462,7 +473,7 @@ int one_command(const string& command_str, int argc, char **argv)
       "'patch-info' -- Show detailed information for patches\n"
       );
   }
-  else if (command_str == "moo") {
+  else if (command == ZypperCommand::MOO) {
     static struct option moo_options[] = {
       {"help", no_argument, 0, 'h'},
       {0, 0, 0, 0}
@@ -474,12 +485,6 @@ int one_command(const string& command_str, int argc, char **argv)
       "'moo' - Show an animal\n"
       );
   }
-  else if (!command_str.empty()) { // empty command is treated earlier
-    if (command_str != "help") // #235709
-      cerr << _("Unknown command") << " '" << command_str << "'." << endl << endl;
-    cerr << help_commands;
-    return ZYPPER_EXIT_ERR_SYNTAX;
-  }
 
   parsed_opts copts = parse_options (argc, argv, specific_options);
   if (copts.count("_unknown"))
@@ -491,7 +496,7 @@ int one_command(const string& command_str, int argc, char **argv)
 
   vector<string> arguments;
   if (optind < argc) {
-    cerr_v << _("Non-Option Program Arguments: ");
+    cerr_v << _("Non-option program arguments: ");
     while (optind < argc) {
       string argument = argv[optind++];
       cerr_v << argument << ' ';
@@ -536,7 +541,7 @@ int one_command(const string& command_str, int argc, char **argv)
   
   // here come commands that need the lock
   try {
-    if (command_str == "service-list" || command_str == "sl")
+    if (command == ZypperCommand::LIST_REPOS)
       zypp_readonly_hack::IWantIt (); // #247001
 
     God = zypp::getZYpp();
@@ -555,14 +560,15 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( moo )----------------------------------------
 
-  if (command_str == "moo") {
+  if (command == ZypperCommand::MOO)
+  {
     cout << "   \\\\\\\\\\\n  \\\\\\\\\\\\\\__o\n__\\\\\\\\\\\\\\'/_" << endl;
     return ZYPPER_EXIT_OK;
   }
 
   // --------------------------( service list )-------------------------------
   
-  else if (command.toEnum() == ZypperCommand::LIST_REPOS_e)
+  else if (command == ZypperCommand::LIST_REPOS)
   {
     if (ghelp) { cout << specific_help << endl; return !ghelp; }
     // if (ghelp) display_command_help()
@@ -581,7 +587,7 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( service add )--------------------------------
   
-  else if (command.toEnum() == ZypperCommand::ADD_REPO_e)
+  else if (command == ZypperCommand::ADD_REPO)
   {
     tribool enabled(indeterminate);
     tribool refresh(indeterminate);
@@ -633,7 +639,7 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( service delete )-----------------------------
 
-  else if (command.toEnum() == ZypperCommand::REMOVE_REPO_e)
+  else if (command == ZypperCommand::REMOVE_REPO)
   {
     if (ghelp || arguments.size() < 1) {
       cerr << specific_help;
@@ -656,8 +662,8 @@ int one_command(const string& command_str, int argc, char **argv)
   }
 
   // --------------------------( service rename )-----------------------------
-
-  else if (command_str == "service-rename" || command_str == "sr")
+/*
+  else if (command == ZypperCommand::NONE) //command_str == "service-rename" || command_str == "sr")
   {
     if (ghelp || arguments.size() < 2) {
       cerr << specific_help;
@@ -678,10 +684,10 @@ int one_command(const string& command_str, int argc, char **argv)
 
     return ZYPPER_EXIT_OK;
   }
-  
+  */
   // --------------------------( refresh )------------------------------------
 
-  else if (command.toEnum() == ZypperCommand::REFRESH_e)
+  else if (command == ZypperCommand::REFRESH)
   {
     if (ghelp) { cout << specific_help; return !ghelp; }
 
@@ -690,10 +696,10 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( remove/install )-----------------------------
 
-  else if (command.toEnum() == ZypperCommand::INSTALL_e ||
-           command.toEnum() == ZypperCommand::REMOVE_e )
+  else if (command == ZypperCommand::INSTALL ||
+           command == ZypperCommand::REMOVE)
   {
-    if (command.toEnum() == ZypperCommand::INSTALL_e) {
+    if (command == ZypperCommand::INSTALL) {
       if (ghelp || arguments.size() < 1) {
         cerr << "install [options] name...\n" << specific_help;
         return !ghelp;
@@ -702,7 +708,7 @@ int one_command(const string& command_str, int argc, char **argv)
       gData.packages_to_install = arguments;
     }
 
-    if (command.toEnum() == ZypperCommand::REMOVE_e) {
+    if (command == ZypperCommand::REMOVE) {
       if (ghelp || arguments.size() < 1) {
         cerr << "remove [options] name...\n"
         << specific_help
@@ -744,7 +750,7 @@ int one_command(const string& command_str, int argc, char **argv)
     zypp::getZYpp()->addResolvables(zypp::getZYpp()->target()->resolvables(), true);
     
     for ( vector<string>::const_iterator it = arguments.begin(); it != arguments.end(); ++it ) {
-      if (command.toEnum() == ZypperCommand::INSTALL_e) {
+      if (command == ZypperCommand::INSTALL) {
         mark_for_install(kind, *it);
       }
       else {
@@ -760,7 +766,8 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // TODO -c, --catalog option
 
-  else if (command_str == "search" || command_str == "se") {
+  else if (command == ZypperCommand::SEARCH)
+  {
     ZyppSearchOptions options;
 
     if (ghelp) {
@@ -814,20 +821,20 @@ int one_command(const string& command_str, int argc, char **argv)
   // --------------------------( patch check )--------------------------------
 
   // TODO: rug summary
-  else if (command_str == "patch-check" || command_str == "pchk") {
+  else if (command == ZypperCommand::NONE) {//command_str == "patch-check" || command_str == "pchk") {
     if (ghelp) {
       cerr << specific_help;
       return !ghelp;
     }
 
     cond_init_target ();
-    cond_init_system_sources ();
+    init_repos ();
     // TODO additional_sources
     // TODO warn_no_sources
     // TODO calc token?
 
     // now load resolvables:
-    cond_load_resolvables ();
+    load_repo_resolvables ();
 
     establish ();
     patch_check ();
@@ -841,15 +848,15 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( patches )------------------------------------
 
-  else if (command_str == "patches" || command_str == "pch") {
+  else if (command == ZypperCommand::NONE) {//command_str == "patches" || command_str == "pch") {
     if (ghelp) {
       cerr << specific_help;
       return !ghelp;
     }
 
     cond_init_target ();
-    cond_init_system_sources ();
-    cond_load_resolvables ();
+    init_repos ();
+    load_repo_resolvables ();
     establish ();
     show_patches ();
     return ZYPPER_EXIT_OK;
@@ -857,7 +864,7 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // --------------------------( list updates )-------------------------------
 
-  else if (command_str == "list-updates" || command_str == "lu") {
+  else if (command == ZypperCommand::NONE) {//command_str == "list-updates" || command_str == "lu") {
     if (ghelp) {
       // FIXME catalog...
       cerr << specific_help;
@@ -873,8 +880,8 @@ int one_command(const string& command_str, int argc, char **argv)
     }
 
     cond_init_target ();
-    cond_init_system_sources ();
-    cond_load_resolvables ();
+    init_repos ();
+    load_repo_resolvables ();
     establish ();
 
     list_updates (kind);
@@ -884,7 +891,7 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // -----------------------------( update )----------------------------------
 
-  else if (command_str == "update" || command_str == "up") {
+  else if (command == ZypperCommand::NONE) {//command_str == "update" || command_str == "up") {
     if (ghelp) {
       cerr << "update [options]\n"
           << specific_help
@@ -901,8 +908,8 @@ int one_command(const string& command_str, int argc, char **argv)
     }
 
     cond_init_target ();
-    cond_init_system_sources ();
-    cond_load_resolvables ();
+    init_repos ();
+    load_repo_resolvables ();
     establish ();
 
     bool skip_interactive = copts.count("skip-interactive") || gSettings.non_interactive;
@@ -916,18 +923,18 @@ int one_command(const string& command_str, int argc, char **argv)
 
   // -----------------------------( info )------------------------------------
 
-  else if (command_str == "info" || command_str == "if" || command_str == "patch-info") {
+  else if (command == ZypperCommand::NONE) {//command_str == "info" || command_str == "if" || command_str == "patch-info") {
     if (ghelp || arguments.size() == 0) {
       cerr << specific_help;
       return !ghelp;
     }
 
     cond_init_target ();
-    cond_init_system_sources ();
-    cond_load_resolvables ();
+    init_repos ();
+    load_repo_resolvables ();
     establish ();
 
-    printInfo(command_str,arguments);
+    printInfo(command,arguments);
 
     return ZYPPER_EXIT_OK;
   }
@@ -936,6 +943,8 @@ int one_command(const string& command_str, int argc, char **argv)
   return ZYPPER_EXIT_ERR_BUG;
 }
 
+// ----------------------------------------------------------------------------
+
 /// tell to report a bug, and how
 // (multiline, with endls)
 ostream& report_a_bug (ostream& stm) {
@@ -945,9 +954,11 @@ ostream& report_a_bug (ostream& stm) {
             << _("See http://en.opensuse.org/Zypper#Troubleshooting for instructions.") << endl;
 }
 
+// ----------------------------------------------------------------------------
+
 /// process one command from the OS shell or the zypper shell
 // catch unexpected exceptions and tell the user to report a bug (#224216)
-int safe_one_command(const string& command, int argc, char **argv)
+int safe_one_command(const ZypperCommand & command, int argc, char **argv)
 {
   int ret = ZYPPER_EXIT_ERR_BUG;
   try {
@@ -962,6 +973,8 @@ int safe_one_command(const string& command, int argc, char **argv)
   return ret;
 }
 
+// ----------------------------------------------------------------------------
+
 // Read a string. "\004" (^D) on EOF.
 string readline_getline ()
 {
@@ -989,6 +1002,8 @@ string readline_getline ()
     return "\004";
 }
 
+// ----------------------------------------------------------------------------
+
 void command_shell ()
 {
   string histfile;
@@ -1005,6 +1020,9 @@ void command_shell ()
 
   bool loop = true;
   while (loop) {
+    // reset globals
+    ghelp = false;
+    
     // read a line
     string line = readline_getline ();
     cerr_vv << "Got: " << line << endl;
@@ -1015,22 +1033,38 @@ void command_shell ()
     int sh_argc = args.argc ();
     char **sh_argv = args.argv ();
 
-    string command = sh_argv[0]? sh_argv[0]: "";
+    string command_str = sh_argv[0]? sh_argv[0]: "";
 
-    if (command == "\004") {
+    if (command_str == "\004") // ^D
+    {
       loop = false;
-      cout << endl;
+      cout << endl; // print newline after ^D
     }
-    else if (command == "exit" || command == "quit")
-      loop = false;
     else
-      safe_one_command (command, sh_argc, sh_argv);
+    {
+      try
+      {
+        ZypperCommand command(command_str);
+        if (command == ZypperCommand::SHELL_QUIT)
+          loop = false;
+        else if (command == ZypperCommand::SHELL)
+          cout << _("You already are running zypper's shell.") << endl;
+        else
+          safe_one_command (command, sh_argc, sh_argv);
+      }
+      catch (Exception & e)
+      {
+        cerr << e.msg() <<  endl;
+      }
+    }
   }
 
   if (!histfile.empty ())
     write_history (histfile.c_str ());
 }
 
+// ----------------------------------------------------------------------------
+
 int main(int argc, char **argv)
 {
   struct Bye {
@@ -1049,17 +1083,26 @@ int main(int argc, char **argv)
   if (logfile == NULL)
     logfile = ZYPP_CHECKPATCHES_LOG;
   zypp::base::LogControl::instance().logfile( logfile );
-  
+
   // parse global options and the command
-  string command = process_globals (argc, argv);
-  int ret = 0;
-  if (command == "shell" || command == "sh")
-    command_shell ();
-  else
-    ret = safe_one_command (command, argc, argv);
+  ZypperCommand command = process_globals (argc, argv);
+  switch(command.toEnum())
+  {
+  case ZypperCommand::SHELL_e:
+    command_shell();
+    return ZYPPER_EXIT_OK;
 
-  return ret;
+  case ZypperCommand::NONE_e:
+    return ZYPPER_EXIT_ERR_SYNTAX;
+
+  default:
+    return safe_one_command(command, argc, argv);
+  }
+
+  cerr_v << "This line should never be reached." << endl;
+  return ZYPPER_EXIT_ERR_BUG;
 }
+
 // Local Variables:
 // c-basic-offset: 2
 // End:
index eca31d7..5a7bc03 100644 (file)
@@ -1,14 +1,5 @@
-/*-----------------------------------------------------------*- c++ -*-\
-|                          ____ _   __ __ ___                          |
-|                         |__  / \ / / . \ . \                         |
-|                           / / \ V /|  _/  _/                         |
-|                          / /__ | | | | | |                           |
-|                         /_____||_| |_| |_|                           |
-|                                                                      |
-\---------------------------------------------------------------------*/
-
-#ifndef ZMART_H
-#define ZMART_H
+#ifndef ZYPPER_H
+#define ZYPPER_H
 
 #include <zypp/base/LogControl.h>
 #include <zypp/base/Logger.h>
 #include <zypp/Locale.h>
 #include <zypp/ZYpp.h>
 #include <zypp/ZYppFactory.h>
-#include <zypp/SourceManager.h>
-#include <zypp/SourceFactory.h>
 #include <zypp/ResStore.h>
 #include <zypp/base/String.h>
 #include <zypp/Digest.h>
 #include <zypp/CapFactory.h>
-
 #include <zypp/RepoInfo.h>
 
+
 #define ZYPP_CHECKPATCHES_LOG "/var/log/zypper.log"
 #undef  ZYPP_BASE_LOGGER_LOGGROUP
 #define ZYPP_BASE_LOGGER_LOGGROUP "zypper"
@@ -88,8 +77,6 @@ struct RuntimeData
   {}
     
   std::list<Error> errors;
-  // deprecated
-  std::list<zypp::Source_Ref> sources;
   std::list<zypp::RepoInfo> repos;
   int patches_count;
   int security_patches_count;
@@ -115,7 +102,8 @@ extern std::ostream no_stream;
 // define new _ macro
 #define _(MSG) ::gettext(MSG)
 
+#endif /*ZYPPER_H*/
+
 // Local Variables:
 // c-basic-offset: 2
 // End:
-#endif