add option to set/change gpgcheck flag for repos (bnc#524787)
authorDominik Heidler <dheidler@suse.de>
Thu, 5 May 2011 13:03:09 +0000 (15:03 +0200)
committerDominik Heidler <dheidler@suse.de>
Thu, 5 May 2011 13:03:09 +0000 (15:03 +0200)
src/Zypper.cc
src/repos.cc
src/repos.h

index 6c26bbc..8ccac52 100644 (file)
@@ -1316,6 +1316,8 @@ void Zypper::processCommandOptions()
       {"name", required_argument, 0, 'n'},
       {"keep-packages", no_argument, 0, 'k'},
       {"no-keep-packages", no_argument, 0, 'K'},
+      {"gpgcheck", no_argument, 0, 'g'},
+      {"no-gpgcheck", no_argument, 0, 'G'},
       {"refresh", no_argument, 0, 'f'},
       {0, 0, 0, 0}
     };
@@ -1337,6 +1339,8 @@ void Zypper::processCommandOptions()
       "-n, --name <name>       Specify descriptive name for the repository.\n"
       "-k, --keep-packages     Enable RPM files caching.\n"
       "-K, --no-keep-packages  Disable RPM files caching.\n"
+      "-g, --gpgcheck          Enable GPG check for this repository.\n"
+      "-G, --no-gpgcheck       Disable GPG check for this repository.\n"
       "-f, --refresh           Enable autorefresh of the repository.\n"
     ), "yast2, rpm-md, plaindir");
     break;
@@ -1453,6 +1457,8 @@ void Zypper::processCommandOptions()
       {"priority", required_argument, 0, 'p'},
       {"keep-packages", no_argument, 0, 'k'},
       {"no-keep-packages", no_argument, 0, 'K'},
+      {"gpgcheck", no_argument, 0, 'g'},
+      {"no-gpgcheck", no_argument, 0, 'G'},
       {"all", no_argument, 0, 'a' },
       {"local", no_argument, 0, 'l' },
       {"remote", no_argument, 0, 't' },
@@ -1478,6 +1484,8 @@ void Zypper::processCommandOptions()
       "-p, --priority <integer>  Set priority of the repository.\n"
       "-k, --keep-packages       Enable RPM files caching.\n"
       "-K, --no-keep-packages    Disable RPM files caching.\n"
+      "-g, --gpgcheck            Enable GPG check for this repository.\n"
+      "-G, --no-gpgcheck         Disable GPG check for this repository.\n"
       "\n"
       "-a, --all                 Apply changes to all repositories.\n"
       "-l, --local               Apply changes to all local repositories.\n"
@@ -2863,12 +2871,18 @@ void Zypper::doCommand()
     else if (copts.count("no-keep-packages"))
       keep_pkgs = false;
 
+    TriBool gpgCheck;
+    if (copts.count("gpgcheck"))
+      gpgCheck = true;
+    else if (copts.count("no-gpgcheck"))
+      gpgCheck = false;
+
     try
     {
       // add repository specified in .repo file
       if (copts.count("repo"))
       {
-        add_repo_from_file(*this,copts["repo"].front(), enabled, autorefresh, keep_pkgs);
+        add_repo_from_file(*this,copts["repo"].front(), enabled, autorefresh, keep_pkgs, gpgCheck);
         return;
       }
 
@@ -2916,7 +2930,7 @@ void Zypper::doCommand()
         else
         {
           initRepoManager();
-          add_repo_from_file(*this,_arguments[0], enabled, autorefresh, keep_pkgs);
+          add_repo_from_file(*this,_arguments[0], enabled, autorefresh, keep_pkgs, gpgCheck);
           break;
         }
       case 2:
@@ -2952,7 +2966,7 @@ void Zypper::doCommand()
         init_target(*this);
 
         add_repo_by_url(
-           *this, url, _arguments[1]/*alias*/, type, enabled, autorefresh, keep_pkgs);
+           *this, url, _arguments[1]/*alias*/, type, enabled, autorefresh, keep_pkgs, gpgCheck);
         return;
       }
     }
index 0e9b5b1..b85d54f 100644 (file)
@@ -1628,6 +1628,8 @@ void add_repo(Zypper & zypper, RepoInfo & repo)
     s << _("Enabled") << ": " << (repo.enabled() ? _("Yes") : _("No")) << endl;
     // TranslatorExplanation used as e.g. "Autorefresh: Yes"
     s << _("Autorefresh") << ": " << (repo.autorefresh() ? _("Yes") : _("No")) << endl;
+    // TranslatorExplanation used as e.g. "GPG check: Yes"
+    s << _("GPG check") << ": " << (repo.gpgCheck() ? _("Yes") : _("No")) << endl;
 
     if (!repo.baseUrlsEmpty())
     {
@@ -1667,7 +1669,7 @@ void add_repo(Zypper & zypper, RepoInfo & repo)
 void add_repo_by_url( Zypper & zypper,
                      const zypp::Url & url, const string & alias,
                      const string & type,
-                     TriBool enabled, TriBool autorefresh, TriBool keepPackages)
+                     TriBool enabled, TriBool autorefresh, TriBool keepPackages, TriBool gpgCheck)
 {
   MIL << "going to add repository by url (alias=" << alias << ", url=" << url
       << ")" << endl;
@@ -1696,6 +1698,9 @@ void add_repo_by_url( Zypper & zypper,
   if ( !indeterminate(keepPackages) )
     repo.setKeepPackages(keepPackages);
 
+  if ( !indeterminate(gpgCheck) )
+    repo.setGpgCheck(gpgCheck);
+
   add_repo(zypper, repo);
 }
 
@@ -1703,7 +1708,7 @@ void add_repo_by_url( Zypper & zypper,
 
 void add_repo_from_file( Zypper & zypper,
                          const std::string & repo_file_url, TriBool enabled,
-                         TriBool autorefresh, TriBool keepPackages)
+                         TriBool autorefresh, TriBool keepPackages, TriBool gpgCheck)
 {
   Url url = make_url(repo_file_url);
   if (!url.isValid())
@@ -1779,6 +1784,9 @@ void add_repo_from_file( Zypper & zypper,
     if ( !indeterminate(keepPackages) )
       repo.setKeepPackages(keepPackages);
 
+    if ( !indeterminate(gpgCheck) )
+      repo.setGpgCheck(gpgCheck);
+
     MIL << "to-be-added: enabled: " << repo.enabled() << " autorefresh: " << repo.autorefresh() << endl;
 
     add_repo(zypper, repo);
@@ -1942,6 +1950,10 @@ void modify_repo(Zypper & zypper, const string & alias)
       zypper, "keep-packages", "no-keep-packages");
   DBG << "keepPackages = " << keepPackages << endl;
 
+  tribool gpgCheck = get_boolean_option(
+      zypper, "gpgcheck", "no-gpgcheck");
+  DBG << "gpgCheck = " << gpgCheck << endl;
+
   try
   {
     RepoManager & manager = zypper.repoManager();
@@ -1950,6 +1962,7 @@ void modify_repo(Zypper & zypper, const string & alias)
     bool changed_autoref = false;
     bool changed_prio = false;
     bool changed_keeppackages = false;
+    bool changed_gpgcheck = false;
 
     if (!indeterminate(enable))
     {
@@ -1972,6 +1985,13 @@ void modify_repo(Zypper & zypper, const string & alias)
       repo.setKeepPackages(keepPackages);
     }
 
+    if (!indeterminate(gpgCheck))
+    {
+      if (gpgCheck != repo.gpgCheck())
+        changed_gpgcheck = true;
+      repo.setGpgCheck(gpgCheck);
+    }
+
     long long prio = 0;
     parsed_opts::const_iterator tmp1;
     if ((tmp1 = zypper.cOpts().find("priority")) != zypper.cOpts().end())
@@ -2009,7 +2029,7 @@ void modify_repo(Zypper & zypper, const string & alias)
     }
 
     if (chnaged_enabled || changed_autoref || changed_prio
-        || changed_keeppackages || !name.empty())
+        || changed_keeppackages || changed_gpgcheck || !name.empty())
     {
       manager.modifyRepository(alias, repo);
 
@@ -2043,6 +2063,16 @@ void modify_repo(Zypper & zypper, const string & alias)
             _("RPM files caching has been disabled for repository '%s'.")) % alias));
       }
 
+      if (changed_gpgcheck)
+      {
+        if (repo.gpgCheck())
+          zypper.out().info(boost::str(format(
+            _("GPG check has been enabled for repository '%s'.")) % alias));
+        else
+          zypper.out().info(boost::str(format(
+            _("GPG check has been disabled for repository '%s'.")) % alias));
+      }
+
       if (changed_prio)
       {
         zypper.out().info(boost::str(format(
index 037e3ee..be5de6c 100644 (file)
@@ -113,7 +113,8 @@ void add_repo_by_url(Zypper & zypper,
                      const std::string & type = "",
                      zypp::TriBool enabled = boost::indeterminate,
                      zypp::TriBool autorefresh = boost::indeterminate,
-                     zypp::TriBool keepPackages = boost::indeterminate);
+                     zypp::TriBool keepPackages = boost::indeterminate,
+                     zypp::TriBool gpgCheck  = boost::indeterminate);
 
 /**
  * Add repository specified in given repo file on \a repo_file_url. All repos
@@ -128,7 +129,8 @@ void add_repo_from_file(Zypper & zypper,
                         const std::string & repo_file_url,
                         zypp::TriBool enabled = boost::indeterminate,
                         zypp::TriBool autorefresh = boost::indeterminate,
-                        zypp::TriBool keepPackages = boost::indeterminate);
+                        zypp::TriBool keepPackages = boost::indeterminate,
+                        zypp::TriBool gpgCheck  = boost::indeterminate);
 
 
 /**