diff options
author | Robey Pointer <robey@src.gnome.org> | 2001-02-16 06:41:01 +0000 |
---|---|---|
committer | Robey Pointer <robey@src.gnome.org> | 2001-02-16 06:41:01 +0000 |
commit | 65c10bd789e3fec844a6f5a5f1460b7479d6413e (patch) | |
tree | 4c3a22cdf93d598b4ba5941134da4bb5d652555f /nautilus-installer/src/installer.c | |
parent | fcd21241fcfbceab2b6a45688b0bc50486d0aec8 (diff) | |
download | nautilus-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/src/installer.c')
-rw-r--r-- | nautilus-installer/src/installer.c | 11 |
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); } |