Some support for --force. Needs more work.
authorJán Kupec <jkupec@suse.cz>
Sun, 18 Apr 2010 20:39:49 +0000 (22:39 +0200)
committerJán Kupec <jkupec@suse.cz>
Sun, 18 Apr 2010 20:39:49 +0000 (22:39 +0200)
src/RequestFeedback.cc
src/SolverRequester.cc
src/SolverRequester.h

index 326ffcd..ea1f693 100644 (file)
@@ -186,20 +186,20 @@ string SolverRequester::Feedback::asUserString(
   }
 
   case SET_TO_INSTALL:
-    if (opts.force)
-      return str::form(
-          _("Forcing installation of '%s' from repository '%s'."),
-          resolvable_user_string(*_objsel.resolvable()).c_str(),
-          Zypper::instance()->config().show_alias ?
-              _objsel->repoInfo().alias().c_str() :
-              _objsel->repoInfo().name().c_str());
-    else
-      return str::form(
-          _("Selecting '%s' from repository '%s' for installation."),
-          resolvable_user_string(*_objsel.resolvable()).c_str(),
-          Zypper::instance()->config().show_alias ?
-              _objsel->repoInfo().alias().c_str() :
-              _objsel->repoInfo().name().c_str());
+    return str::form(
+        _("Selecting '%s' from repository '%s' for installation."),
+        resolvable_user_string(*_objsel.resolvable()).c_str(),
+        Zypper::instance()->config().show_alias ?
+            _objsel->repoInfo().alias().c_str() :
+            _objsel->repoInfo().name().c_str());
+
+  case FORCED_INSTALL:
+    return str::form(
+        _("Forcing installation of '%s' from repository '%s'."),
+        resolvable_user_string(*_objsel.resolvable()).c_str(),
+        Zypper::instance()->config().show_alias ?
+            _objsel->repoInfo().alias().c_str() :
+            _objsel->repoInfo().name().c_str());
 
   case SET_TO_REMOVE:
     return str::form(_("Selecting '%s' for removal."),
@@ -239,6 +239,7 @@ void SolverRequester::Feedback::print(
   case UPD_CANDIDATE_IS_LOCKED:
   case SELECTED_IS_OLDER:
   case PATCH_NOT_NEEDED:
+  case FORCED_INSTALL:
     out.info(asUserString(opts));
     break;
   case SET_TO_INSTALL:
index 281b592..67ea6c0 100644 (file)
@@ -438,7 +438,7 @@ void SolverRequester::updateTo(
 
   // ******* request ********
 
-  if (!identical(installed, selected))
+  if (!identical(installed, selected) || _opts.force)
   {
     if (_opts.best_effort)
     {
@@ -457,7 +457,7 @@ void SolverRequester::updateTo(
     {
       // set 'candidate' for installation
       setToInstall(selected);
-      MIL << *s << " update: setting " << selected << " to install" << endl;
+      MIL << *s << " update: forced setting " << selected << " to install" << endl;
     }
   }
 
@@ -467,6 +467,9 @@ void SolverRequester::updateTo(
   // the candidate is already installed
   if (identical(installed, selected))
   {
+    if (_opts.force)
+      return;
+
     // only say 'already installed' in case of install, if update was requested
     // only report if we fail to install the newest version (the code below)
     if (_command == ZypperCommand::INSTALL)
@@ -544,9 +547,16 @@ void SolverRequester::updateTo(
 
 void SolverRequester::setToInstall(const PoolItem & pi)
 {
-  // pi.status().setToBeInstalled(ResStatus::USER); ?
-  asSelectable()(pi)->setOnSystem(pi, ResStatus::USER);
-  addFeedback(Feedback::SET_TO_INSTALL, Capability(), "", pi);
+  if (_opts.force)
+  {
+    pi.status().setToBeInstalled(ResStatus::USER);
+    addFeedback(Feedback::FORCED_INSTALL, Capability(), "", pi);
+  }
+  else
+  {
+    asSelectable()(pi)->setOnSystem(pi, ResStatus::USER);
+    addFeedback(Feedback::SET_TO_INSTALL, Capability(), "", pi);
+  }
   _toinst.insert(pi);
 }
 
index fc7dc9e..7723449 100644 (file)
@@ -143,6 +143,7 @@ public:
       // ********** zypp requests *********************************************
 
       SET_TO_INSTALL,
+      FORCED_INSTALL,
       SET_TO_REMOVE,
       ADDED_REQUIREMENT,
       ADDED_CONFLICT