summaryrefslogtreecommitdiff
path: root/nautilus-installer
diff options
context:
space:
mode:
authorRobey Pointer <robey@src.gnome.org>2001-02-16 06:41:01 +0000
committerRobey Pointer <robey@src.gnome.org>2001-02-16 06:41:01 +0000
commit65c10bd789e3fec844a6f5a5f1460b7479d6413e (patch)
tree4c3a22cdf93d598b4ba5941134da4bb5d652555f /nautilus-installer
parentfcd21241fcfbceab2b6a45688b0bc50486d0aec8 (diff)
downloadnautilus-65c10bd789e3fec844a6f5a5f1460b7479d6413e.tar.gz
Re-add 'provides' to the IDL so the install view can poke around for
* components/services/install/idl/trilobite-eazel-install.idl: * components/services/install/lib/eazel-install-corba-types.c: (corba_packagedatastruct_fill_from_packagedata), (corba_packagedatastruct_fill_deps), (packagedata_tree_from_corba_packagedatastructlist): Re-add 'provides' to the IDL so the install view can poke around for .desktop files. * nautilus-installer/src/installer.c: (get_detailed_errors_foreach), (get_detailed_errors): Speed up error checking by avoiding pieces of the graph we've already visited.
Diffstat (limited to 'nautilus-installer')
-rw-r--r--nautilus-installer/src/installer.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/nautilus-installer/src/installer.c b/nautilus-installer/src/installer.c
index 4f80202a7..65851bcda 100644
--- a/nautilus-installer/src/installer.c
+++ b/nautilus-installer/src/installer.c
@@ -60,6 +60,7 @@
typedef struct {
EazelInstaller *installer;
GList *path;
+ GList *touched;
} GetErrorsForEachData;
/* this means the services have to keep an insecure version running, that has enough stuff for ppl
@@ -960,6 +961,13 @@ get_detailed_errors_foreach (PackageData *pack, GetErrorsForEachData *data)
}
}
+ if (data->touched != NULL) {
+ if (g_list_find (data->touched, pack) != NULL) {
+ /* revisiting a part of the tree we've already seen */
+ return;
+ }
+ }
+
log_debug ("pack->name = %s, pack->status = %d", pack->name, pack->status);
/* is this the right place for this check anymore? */
@@ -1001,6 +1009,7 @@ get_detailed_errors_foreach (PackageData *pack, GetErrorsForEachData *data)
/* Create the path list */
data->path = g_list_prepend (data->path, pack);
+ data->touched = g_list_prepend (data->touched, pack);
g_list_foreach (pack->depends, (GFunc)get_detailed_errors_foreach_dep, data);
g_list_foreach (pack->modifies, (GFunc)get_detailed_errors_foreach, data);
@@ -1028,6 +1037,7 @@ get_detailed_errors (const PackageData *pack, EazelInstaller *installer)
data.installer = installer;
data.path = NULL;
+ data.touched = NULL;
log_debug ("copying package");
non_const_pack = PACKAGEDATA (pack);
gtk_object_ref (GTK_OBJECT (non_const_pack));
@@ -1036,6 +1046,7 @@ get_detailed_errors (const PackageData *pack, EazelInstaller *installer)
get_detailed_errors_foreach (non_const_pack, &data);
log_debug ("destroying copy");
gtk_object_unref (GTK_OBJECT (non_const_pack));
+ g_list_free (data.touched);
}