[packagekit] packagekit: Branch 'master' - 4 commits

Richard Hughes hughsient at kemper.freedesktop.org
Thu Mar 6 09:34:40 PST 2008


 backends/zypp/pk-backend-zypp.cpp |   30 +++++++++++++++++++-----------
 backends/zypp/zypp-events.h       |   30 ++++++++++++++++++++++++++++++
 backends/zypp/zypp-utils.cpp      |   35 ++++++++++++++++++++++++++++++-----
 backends/zypp/zypp-utils.h        |    5 +++++
 libpackagekit/pk-common.c         |    4 ++++
 5 files changed, 88 insertions(+), 16 deletions(-)

New commits:
commit 2caa9dd666f7735c5fa9ee1edc5f0bd52a82417f
Author: Stefan Haas <shaas at suse.de>
Date:   Thu Mar 6 16:41:01 2008 +0100

    bugfix for get requires and added test-callback for RepoSignatureRequired

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 1406dde..62e2bbe 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1453,12 +1453,12 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
                 for(std::list<zypp::ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
                    pk_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
                 }
-		/*pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
+		pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
 		pk_package_id_free (pi);
 		g_free (d->package_id);
 		g_free (d);
 		pk_backend_finished (backend);
-		return FALSE;*/
+		return FALSE;
 	}
 
 	pk_backend_set_percentage (backend, 60);
@@ -1480,6 +1480,10 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
                 }
         }
         
+        // undo the status-change of the package and disable forceResolve
+        package.statusReset ();
+        solver.setForceResolve (false);
+
         pk_package_id_free (pi);
 	g_free (d->package_id);
 	g_free (d);
diff --git a/backends/zypp/zypp-events.h b/backends/zypp/zypp-events.h
index e787e98..1af803c 100644
--- a/backends/zypp/zypp-events.h
+++ b/backends/zypp/zypp-events.h
@@ -257,6 +257,36 @@ struct DownloadProgressReportReceiver : public zypp::callback::ReceiveReport<zyp
 	}
 };
 
+struct KeyRingReceiver : public zypp::callback::ReceiveReport<zypp::KeyRingReport>, ZyppBackendReceiver
+{
+        virtual bool askUserToAcceptUnsignedFile (const std::string &file)
+        {
+                pk_debug("_______askUserToAcceptUnsignedFile_______");
+                return true;
+        }
+
+        virtual bool askUserToAcceptUnknownKey (const std::string &file, const std::string &id)
+        {
+                pk_debug("_______askUserToAcceptUnknownKey_______");
+                return true;
+        }
+
+        virtual bool askUserToTrustKey (const zypp::PublicKey &key)
+        {
+                gboolean ok = zypp_signature_required(_backend, key);
+
+                return ok;
+        }
+
+        virtual bool askUserToImportKey (const zypp::PublicKey &key)
+        {
+                gboolean ok = zypp_signature_required(_backend, key);
+
+                return ok;
+        }
+
+};
+
 }; // namespace ZyppBackend
 
 class EventDirector
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 3c56ceb..5af84b3 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -119,9 +119,13 @@ zypp_build_local_pool ()
                         pool.reposErase(it->name ());
         }
 
-        //Add local resolvables
         zypp::ZYpp::Ptr zypp = get_zypp ();
-        zypp->target ()->load ();
+        if (zypp::sat::Pool::instance().reposFind( zypp::sat::Pool::systemRepoName() ) == zypp::Repository::noRepository)
+        {
+                // Add local resolvables
+                zypp::Target_Ptr target = zypp->target ();
+                target->load ();
+        }
 
         return zypp->pool ();
 
@@ -326,6 +330,21 @@ zypp_build_package_id_from_resolvable (zypp::sat::Solvable resolvable)
 	return package_id;
 }
 
+gboolean
+zypp_signature_required (PkBackend *backend, const zypp::PublicKey &key)
+{
+        gboolean ok = pk_backend_repo_signature_required (backend,
+                        "TODO: Repo-Name",
+                        key.path ().c_str (),
+                        key.id ().c_str (),
+                        key.id ().c_str (),
+                        key.fingerprint ().c_str (),
+                        key.created ().asString ().c_str (),
+                        PK_SIGTYPE_ENUM_GPG);
+
+        return ok;
+}
+
 void
 zypp_emit_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v)
 {
diff --git a/backends/zypp/zypp-utils.h b/backends/zypp/zypp-utils.h
index da412ff..02fa813 100644
--- a/backends/zypp/zypp-utils.h
+++ b/backends/zypp/zypp-utils.h
@@ -80,6 +80,11 @@ zypp::sat::Solvable zypp_get_package_by_id (const gchar *package_id);
  */
 gchar * zypp_build_package_id_from_resolvable (zypp::sat::Solvable resolvable);
 
+/**
+  * Ask the User if it is OK to import an GPG-Key for a repo
+  */
+gboolean zypp_signature_required (PkBackend *backend, const zypp::PublicKey &key);
+
 void zypp_emit_packages_in_list (PkBackend *backend, std::vector<zypp::sat::Solvable> *v);
 #endif // _ZYPP_UTILS_H_
 
commit 0c7448543f30d3a0afc412dd2164280952593f39
Merge: 20de882... 76d3d37...
Author: Stefan Haas <shaas at suse.de>
Date:   Thu Mar 6 15:13:06 2008 +0100

    Merge branch 'master' of git+ssh://shaas@git.packagekit.org/srv/git/PackageKit

commit 20de88203c734c038dd48c5ed32511826ca17902
Author: Stefan Haas <shaas at suse.de>
Date:   Thu Mar 6 15:12:36 2008 +0100

    get requires is working now properly

diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index fb02030..1406dde 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -48,6 +48,7 @@
 #include <zypp/target/rpm/RpmDb.h>
 #include <zypp/target/rpm/RpmHeader.h>
 #include <zypp/target/rpm/RpmException.h>
+#include <zypp/base/LogControl.h>
 
 #include <zypp/sat/Solvable.h>
 
@@ -119,6 +120,7 @@ static PkBackendThread *thread;
 static void
 backend_initialize (PkBackend *backend)
 {
+        //zypp::base::LogControl::instance ().logfile("/tmp/zypplog");
 	g_return_if_fail (backend != NULL);
 	pk_debug ("zypp_backend_initialize");
 	EventDirector *eventDirector = new EventDirector (backend);
@@ -382,7 +384,6 @@ backend_get_description_thread (PkBackendThread *thread, gpointer data)
 	for (std::vector<zypp::sat::Solvable>::iterator it = v->begin ();
 			it != v->end (); it++) {
 		const char *version = it->edition ().asString ().c_str ();
-                //fprintf (stderr, "\n\n *** comparing versions '%s' == '%s'", pi->version, version);
 		if (strcmp (pi->version, version) == 0) {
 			package = *it;
 			break;
@@ -444,7 +445,6 @@ backend_get_description_thread (PkBackendThread *thread, gpointer data)
                 return FALSE;
         }
 
-                        fprintf(stderr,"\n____________450________________________________\n");
 	pk_package_id_free (pi);
 	g_free (d->package_id);
 	g_free (d);
@@ -729,6 +729,7 @@ backend_refresh_cache_thread (PkBackendThread *thread, gpointer data)
 	int i = 1;
 	int num_of_repos = repos.size ();
 	int percentage_increment = 100 / num_of_repos;
+
 	for (std::list <zypp::RepoInfo>::iterator it = repos.begin(); it != repos.end(); it++, i++) {
 		zypp::RepoInfo repo (*it);
 
@@ -1422,8 +1423,10 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
         gboolean found = FALSE;
         for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (zypp::ResKind::package, pi->name);
                         it != pool.byIdentEnd (zypp::ResKind::package, pi->name); it++) {
-                package = (*it);
-                found = TRUE;
+                if (it ->status ().isInstalled ()){
+                        package = (*it);
+                        found = TRUE;
+                }
         }
 
 	if (found == FALSE) {
@@ -1435,7 +1438,7 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
 		return FALSE;
 	}
 
-        // set Package as to be installed
+        // set Package as to be uninstalled
         package.status ().setToBeUninstalled (zypp::ResStatus::USER);
 
 	pk_backend_set_percentage (backend, 40);
@@ -1443,26 +1446,27 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
         // solver run
         zypp::Resolver solver(pool);
         
-        // DEBUG https://bugzilla.novell.com/show_bug.cgi?id=363545
-        if (solver.forceResolve () == FALSE) {
+        solver.setForceResolve (true);
+
+        if (solver.resolvePool () == FALSE) {
                 std::list<zypp::ResolverProblem_Ptr> problems = solver.problems ();
                 for(std::list<zypp::ResolverProblem_Ptr>::iterator it = problems.begin (); it != problems.end (); it++){
-                   pk_warning("Solver problem: '%s'", (*it)->description ().c_str ());
+                   pk_warning("Solver problem (This should never happen): '%s'", (*it)->description ().c_str ());
                 }
-		pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
+		/*pk_backend_error_code (backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Resolution failed");
 		pk_package_id_free (pi);
 		g_free (d->package_id);
 		g_free (d);
 		pk_backend_finished (backend);
-		return FALSE;
+		return FALSE;*/
 	}
 
 	pk_backend_set_percentage (backend, 60);
 
         // look for packages which would be uninstalled
-        for (zypp::ResPool::byIdent_iterator it = pool.byIdentBegin (zypp::ResKind::package, pi->name);
-                        it != pool.byIdentEnd (zypp::ResKind::package, pi->name); it++) {
-                if (it->status () == zypp::ResStatus::toBeUninstalled || it->status () == zypp::ResStatus::toBeUninstalledSoft) {
+        for (zypp::ResPool::byKind_iterator it = pool.byKindBegin (zypp::ResKind::package);
+                        it != pool.byKindEnd (zypp::ResKind::package); it++) {
+                if (it->status ().isToBeUninstalled ()) {
                         gchar *package_id;
                         package_id = pk_package_id_build ( it->resolvable ()->name ().c_str(),
                                                            it->resolvable ()->edition ().asString ().c_str(),
@@ -1475,7 +1479,7 @@ backend_get_requires_thread (PkBackendThread *thread, gpointer data) {
                         g_free (package_id);
                 }
         }
-
+        
         pk_package_id_free (pi);
 	g_free (d->package_id);
 	g_free (d);
diff --git a/backends/zypp/zypp-utils.cpp b/backends/zypp/zypp-utils.cpp
index 13f485e..3c56ceb 100644
--- a/backends/zypp/zypp-utils.cpp
+++ b/backends/zypp/zypp-utils.cpp
@@ -89,15 +89,21 @@ zypp_build_pool (gboolean include_local)
 			// skip disabled repos
 			if (repo.enabled () == false)
 				continue;
-                        
+                        // skip not cached repos
+                        if (manager.isCached (repo) == false) {
+                                pk_warning ("%s is not cached! Do a refresh", repo.alias ().c_str ());
+                                continue;
+                        }
                         //FIXME see above, skip already cached repos
                         if (zypp::sat::Pool::instance().reposFind( repo.alias ()) == zypp::Repository::noRepository)
                                 manager.loadFromCache (repo);
 		}
 	} catch (const zypp::repo::RepoNoAliasException &ex) {
-                pk_warning ("Can't figure an alias to look in cache");
+                pk_error ("Can't figure an alias to look in cache");
+        } catch (const zypp::repo::RepoNotCachedException &ex) {
+                pk_error ("The repo has to be cached at first: %s", ex.asUserString ().c_str ());
 	} catch (const zypp::Exception &ex) {
-                pk_warning ("TODO: Handle exceptions: %s", ex.asUserString ().c_str ());
+                pk_error ("TODO: Handle exceptions: %s", ex.asUserString ().c_str ());
 	}
 
 	return zypp->pool ();
commit 76d3d37fd0771a50e23047bc6f87e83b9e32f076
Author: Thomas Wood <thomas at openedhand.com>
Date:   Thu Mar 6 13:00:37 2008 +0000

    protect pk_strsafe against NULL text

diff --git a/libpackagekit/pk-common.c b/libpackagekit/pk-common.c
index 8236449..d0b33ce 100644
--- a/libpackagekit/pk-common.c
+++ b/libpackagekit/pk-common.c
@@ -188,6 +188,10 @@ pk_strsafe (const gchar *text)
 	gchar *text_safe;
 	const gchar *delimiters;
 
+	if (text == NULL) {
+		return NULL;
+	}
+
 	/* rip out any insane characters */
 	delimiters = "\\\f\n\r\t\"'";
 	text_safe = g_strdup (text);


More information about the PackageKit mailing list