Fixed bug 3459 (emit signals when doing file-conflict, feature-consistency

* components/services/install/lib/eazel-install-public.h:
	* components/services/install/command-line/eazel-alt-install-corba.
	c: (eazel_file_conflict_check_signal),
	(eazel_file_uniqueness_check_signal),
	(eazel_feature_consistency_check_signal), (main):
	* components/services/install/idl/trilobite-eazel-install.idl:
	* components/services/install/lib/eazel-install-corba-callback.c:
	(impl_file_conflict_check), (impl_file_uniqueness_check),
	(impl_feature_consistency_check), (eazel_install_callback_get_epv),
	(eazel_install_callback_class_initialize):
	* components/services/install/lib/eazel-install-corba-callback.h:
	* components/services/install/lib/eazel-install-logic2.c:
	(check_no_two_packages_has_same_file),
	(check_conflicts_against_already_installed_packages),
	(check_feature_consistency):
	* components/services/install/lib/eazel-install-object.c:
	(eazel_install_class_initialize),
	(eazel_install_emit_file_conflict_check),
	(eazel_install_emit_file_conflict_check_default),
	(eazel_install_emit_file_uniqueness_check),
	(eazel_install_emit_file_uniqueness_check_default),
	(eazel_install_emit_feature_consistency_check),
	(eazel_install_emit_feature_consistency_check_default):
	Fixed bug 3459 (emit signals when doing file-conflict,
	feature-consistency and file-uniqueness checks).

	* components/services/install/lib/eazel-package-system-types.c:
	(packagedata_get_readable_name):
	Nyll poynter checking.
This commit is contained in:
Eskil Heyn Olsen 2001-02-06 07:04:21 +00:00
parent 6dc4263c5f
commit 671bec82dd
9 changed files with 323 additions and 15 deletions

View file

@ -1,3 +1,35 @@
2001-02-05 Eskil Heyn Olsen <eskil@eazel.com>
* components/services/install/lib/eazel-install-public.h:
* components/services/install/command-line/eazel-alt-install-corba.
c: (eazel_file_conflict_check_signal),
(eazel_file_uniqueness_check_signal),
(eazel_feature_consistency_check_signal), (main):
* components/services/install/idl/trilobite-eazel-install.idl:
* components/services/install/lib/eazel-install-corba-callback.c:
(impl_file_conflict_check), (impl_file_uniqueness_check),
(impl_feature_consistency_check), (eazel_install_callback_get_epv),
(eazel_install_callback_class_initialize):
* components/services/install/lib/eazel-install-corba-callback.h:
* components/services/install/lib/eazel-install-logic2.c:
(check_no_two_packages_has_same_file),
(check_conflicts_against_already_installed_packages),
(check_feature_consistency):
* components/services/install/lib/eazel-install-object.c:
(eazel_install_class_initialize),
(eazel_install_emit_file_conflict_check),
(eazel_install_emit_file_conflict_check_default),
(eazel_install_emit_file_uniqueness_check),
(eazel_install_emit_file_uniqueness_check_default),
(eazel_install_emit_feature_consistency_check),
(eazel_install_emit_feature_consistency_check_default):
Fixed bug 3459 (emit signals when doing file-conflict,
feature-consistency and file-uniqueness checks).
* components/services/install/lib/eazel-package-system-types.c:
(packagedata_get_readable_name):
Nyll poynter checking.
2001-02-05 John Sullivan <sullivan@eazel.com>
Fixed bug 6359 (Choosing current view from "View as" menu crashes)

View file

@ -260,6 +260,30 @@ set_parameters_from_command_line (GNOME_Trilobite_Eazel_Install service)
}
}
static void
eazel_file_conflict_check_signal (EazelInstallCallback *service,
const PackageData *pack,
gpointer unused)
{
printf ("File conflict checking %s...\n", pack->name);
}
static void
eazel_file_uniqueness_check_signal (EazelInstallCallback *service,
const PackageData *pack,
gpointer unused)
{
printf ("File uniqueness checking %s...\n", pack->name);
}
static void
eazel_feature_consistency_check_signal (EazelInstallCallback *service,
const PackageData *pack,
gpointer unused)
{
printf ("Feature consistency checking %s...\n", pack->name);
}
static void
eazel_download_progress_signal (EazelInstallCallback *service,
const PackageData *pack,
@ -760,6 +784,16 @@ int main(int argc, char *argv[]) {
set_root_client (eazel_install_callback_bonobo (cb));
/* Set up signal connections */
gtk_signal_connect (GTK_OBJECT (cb), "file_conflict_check",
GTK_SIGNAL_FUNC (eazel_file_conflict_check_signal),
NULL);
gtk_signal_connect (GTK_OBJECT (cb), "file_uniqueness_check",
GTK_SIGNAL_FUNC (eazel_file_uniqueness_check_signal),
NULL);
gtk_signal_connect (GTK_OBJECT (cb), "feature_consistency_check",
GTK_SIGNAL_FUNC (eazel_feature_consistency_check_signal),
NULL);
gtk_signal_connect (GTK_OBJECT (cb), "download_progress",
GTK_SIGNAL_FUNC (eazel_download_progress_signal),
"Download progress");

View file

@ -29,6 +29,11 @@ module Trilobite {
ALREADY_INSTALLED, /* medium: you don't get to install it, but then again... */
CIRCULAR_DEPENDENCY /* bad: two packages are fighting it out */
};
enum Operation {
OPERATION_INSTALL,
OPERATION_UNINSTALL
};
enum ProtocolEnum {
PROTOCOL_HTTP,
@ -137,6 +142,23 @@ module Trilobite {
};
typedef sequence <CategoryStruct> CategoryStructList;
/*
When adding a signal :
- add signal to EazelInstallCallback in eazel-install-corba-callback.c
- add signal to EazelInstall in eazel-install-public.h and eazel-install-object.c
- add emitters to EazelInstall in eazel-install-public.h and eazel-install-object.c
- call them...
When modifying a signal :
- change interface in EazelInstallCallback in eazel-install-corba-callback.c
- change interface in EazelInstall in eazel-install-public.h and eazel-install-object.c
- change interface in EazelInstall in eazel-install-public.h and eazel-install-object.c
- find and change all calls
Getting the klass functions and the gtk_signal_new into both eazel-install-object.c
and eazel-install-corba-callback.c can be optimized by using Cut'n'Paste<tm> Technology
*/
interface InstallCallback : Bonobo::Unknown {
/* Called during download of a file */
/* make it 2-way so that it will process incoming corba calls */
@ -145,9 +167,11 @@ module Trilobite {
/* Called when dependency check is being handled */
oneway void dependency_check (in PackageDataStruct package, in PackageDataStruct needs);
/* Called when a package is being file conflict checked */
/* Called when a package is being file/feature/unique checked */
/* FIXME: bugzilla.eazel.com 3459 */
oneway void file_conflict_check (in PackageDataStruct package);
oneway void file_uniqueness_check (in PackageDataStruct package);
oneway void feature_consistency_check (in PackageDataStruct package);
/* Called after download is complete, and before the (un)install begins.
Typically while heating up RPM */
@ -223,6 +247,19 @@ module Trilobite {
in string root,
in InstallCallback cb);
/* These are for installing/uninstalling specific packages */
/*
oneway void prepare_operation (in PackageDataStructList packages,
in string root,
in Operation op,
in InstallCallback cb);
oneway void perform_operation (in PackageDataStructList packages,
in string root,
in Operation op,
in InstallCallback cb);
*/
boolean query_server (in PackageDataStruct q,
out PackageDataStruct result);

View file

@ -37,6 +37,10 @@
#define OAF_ID "OAFIID:trilobite_eazel_install_service:8ff6e815-1992-437c-9771-d932db3b4a17"
enum {
FILE_CONFLICT_CHECK,
FILE_UNIQUENESS_CHECK,
FEATURE_CONSISTENCY_CHECK,
DOWNLOAD_PROGRESS,
PREFLIGHT_CHECK,
INSTALL_PROGRESS,
@ -68,6 +72,39 @@ typedef struct {
EazelInstallCallback *object;
} impl_POA_GNOME_Trilobite_Eazel_InstallCallback;
static void
impl_file_conflict_check (impl_POA_GNOME_Trilobite_Eazel_InstallCallback *servant,
const GNOME_Trilobite_Eazel_PackageDataStruct *corbapack,
CORBA_Environment * ev)
{
PackageData *pack;
pack = packagedata_from_corba_packagedatastruct (corbapack);
gtk_signal_emit (GTK_OBJECT (servant->object), signals[FILE_CONFLICT_CHECK], pack);
gtk_object_unref (GTK_OBJECT (pack));
}
static void
impl_file_uniqueness_check (impl_POA_GNOME_Trilobite_Eazel_InstallCallback *servant,
const GNOME_Trilobite_Eazel_PackageDataStruct *corbapack,
CORBA_Environment * ev)
{
PackageData *pack;
pack = packagedata_from_corba_packagedatastruct (corbapack);
gtk_signal_emit (GTK_OBJECT (servant->object), signals[FILE_UNIQUENESS_CHECK], pack);
gtk_object_unref (GTK_OBJECT (pack));
}
static void
impl_feature_consistency_check (impl_POA_GNOME_Trilobite_Eazel_InstallCallback *servant,
const GNOME_Trilobite_Eazel_PackageDataStruct *corbapack,
CORBA_Environment * ev)
{
PackageData *pack;
pack = packagedata_from_corba_packagedatastruct (corbapack);
gtk_signal_emit (GTK_OBJECT (servant->object), signals[FEATURE_CONSISTENCY_CHECK], pack);
gtk_object_unref (GTK_OBJECT (pack));
}
static void
impl_download_progress (impl_POA_GNOME_Trilobite_Eazel_InstallCallback *servant,
const GNOME_Trilobite_Eazel_PackageDataStruct *corbapack,
@ -235,17 +272,22 @@ eazel_install_callback_get_epv ()
POA_GNOME_Trilobite_Eazel_InstallCallback__epv *epv;
epv = g_new0 (POA_GNOME_Trilobite_Eazel_InstallCallback__epv, 1);
epv->download_progress = (gpointer)&impl_download_progress;
epv->preflight_check = (gpointer)&impl_preflight_check;
epv->dependency_check = (gpointer)&impl_dep_check;
epv->install_progress = (gpointer)&impl_install_progress;
epv->uninstall_progress = (gpointer)&impl_uninstall_progress;
epv->md5_check_failed = (gpointer)&impl_md5_check_failed;
epv->install_failed = (gpointer)&impl_install_failed;
epv->download_failed = (gpointer)&impl_download_failed;
epv->uninstall_failed = (gpointer)&impl_uninstall_failed;
epv->delete_files = (gpointer)&impl_delete_files;
epv->done = (gpointer)&impl_done;
epv->file_conflict_check = (gpointer)&impl_file_conflict_check;
epv->file_uniqueness_check = (gpointer)&impl_file_uniqueness_check;
epv->feature_consistency_check = (gpointer)&impl_feature_consistency_check;
epv->download_progress = (gpointer)&impl_download_progress;
epv->preflight_check = (gpointer)&impl_preflight_check;
epv->dependency_check = (gpointer)&impl_dep_check;
epv->install_progress = (gpointer)&impl_install_progress;
epv->uninstall_progress = (gpointer)&impl_uninstall_progress;
epv->md5_check_failed = (gpointer)&impl_md5_check_failed;
epv->install_failed = (gpointer)&impl_install_failed;
epv->download_failed = (gpointer)&impl_download_failed;
epv->uninstall_failed = (gpointer)&impl_uninstall_failed;
epv->delete_files = (gpointer)&impl_delete_files;
epv->done = (gpointer)&impl_done;
return epv;
};
@ -337,6 +379,28 @@ eazel_install_callback_class_initialize (EazelInstallCallbackClass *klass)
((POA_GNOME_Trilobite_Eazel_InstallCallback__vepv*)klass->servant_vepv)->GNOME_Trilobite_Eazel_InstallCallback_epv =
eazel_install_callback_get_epv ();
signals[FILE_CONFLICT_CHECK] =
gtk_signal_new ("file_conflict_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallCallbackClass, file_conflict_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[FILE_UNIQUENESS_CHECK] =
gtk_signal_new ("file_uniqueness_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallCallbackClass, file_uniqueness_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[FEATURE_CONSISTENCY_CHECK] =
gtk_signal_new ("feature_consistency_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallCallbackClass, feature_consistency_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[DOWNLOAD_PROGRESS] =
gtk_signal_new ("download_progress",
GTK_RUN_LAST,
@ -357,7 +421,9 @@ eazel_install_callback_class_initialize (EazelInstallCallbackClass *klass)
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallCallbackClass, install_progress),
eazel_install_gtk_marshal_NONE__POINTER_INT_INT_INT_INT_INT_INT,
GTK_TYPE_NONE, 7, GTK_TYPE_POINTER, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT);
GTK_TYPE_NONE, 7,
GTK_TYPE_POINTER, GTK_TYPE_INT, GTK_TYPE_INT,
GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_INT);
signals[UNINSTALL_PROGRESS] =
gtk_signal_new ("uninstall_progress",
GTK_RUN_LAST,

View file

@ -65,6 +65,11 @@ struct _EazelInstallCallbackClass
/* Called during uninstall of a package */
void (*uninstall_progress) (EazelInstallCallback *service, const PackageData *pack, int amount, int total);
/* Called when a package is undergoing the different checks */
void (*file_conflict_check)(EazelInstallCallback *service, const PackageData *package);
void (*file_uniqueness_check)(EazelInstallCallback *service, const PackageData *package);
void (*feature_consistency_check)(EazelInstallCallback *service, const PackageData *package);
/* Called when a dependency check is being resolved */
void (*dependency_check) (EazelInstallCallback *service, const PackageData *package, const PackageData *needed );

View file

@ -1126,6 +1126,7 @@ check_no_two_packages_has_same_file (EazelInstall *service,
pack = PACKAGEDATA (iter->data);
g_message ("file uniqueness checking %s", pack->name);
eazel_install_emit_file_uniqueness_check (service, pack);
for (iter_file = g_list_first (pack->provides); iter_file != NULL; iter_file = g_list_next (iter_file)) {
filename = (char *)(iter_file->data);
@ -1253,6 +1254,7 @@ check_conflicts_against_already_installed_packages (EazelInstall *service,
}
g_message ("file conflict checking %s", pack->name);
eazel_install_emit_file_conflict_check (service, pack);
pack->conflicts_checked = TRUE;
for (iter_file = g_list_first (pack->provides); iter_file != NULL; iter_file = g_list_next (iter_file)) {
@ -1375,6 +1377,7 @@ check_feature_consistency (EazelInstall *service,
#else
g_message ("checking feature consistency of %s", pack->name);
#endif
eazel_install_emit_feature_consistency_check (service, pack);
for (modify_it = pack->modifies; modify_it; modify_it = g_list_next (modify_it)) {
PackageData *pack_modified = PACKAGEDATA (modify_it->data);

View file

@ -57,6 +57,10 @@
#include <dirent.h>
enum {
FILE_CONFLICT_CHECK,
FILE_UNIQUENESS_CHECK,
FEATURE_CONSISTENCY_CHECK,
DOWNLOAD_PROGRESS,
PREFLIGHT_CHECK,
INSTALL_PROGRESS,
@ -110,7 +114,12 @@ static BonoboObjectClass *eazel_install_parent_class;
/* prototypes */
void eazel_install_emit_file_conflict_check_default (EazelInstall *service,
const PackageData *package);
void eazel_install_emit_file_uniqueness_check_default (EazelInstall *service,
const PackageData *package);
void eazel_install_emit_feature_consistency_check_default (EazelInstall *service,
const PackageData *package);
void eazel_install_emit_install_progress_default (EazelInstall *service,
const PackageData *pack,
int, int, int, int, int, int);
@ -408,6 +417,28 @@ eazel_install_class_initialize (EazelInstallClass *klass)
((POA_GNOME_Trilobite_Eazel_Install__vepv*)klass->servant_vepv)->GNOME_Trilobite_Eazel_Install_epv = eazel_install_get_epv ();
#endif /* EAZEL_INSTALL_NO_CORBA */
signals[FILE_CONFLICT_CHECK] =
gtk_signal_new ("file_conflict_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallClass, file_conflict_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[FILE_UNIQUENESS_CHECK] =
gtk_signal_new ("file_uniqueness_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallClass, file_uniqueness_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[FEATURE_CONSISTENCY_CHECK] =
gtk_signal_new ("feature_consistency_check",
GTK_RUN_LAST,
object_class->type,
GTK_SIGNAL_OFFSET (EazelInstallClass, feature_consistency_check),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1, GTK_TYPE_POINTER);
signals[DOWNLOAD_PROGRESS] =
gtk_signal_new ("download_progress",
GTK_RUN_LAST,
@ -476,6 +507,9 @@ eazel_install_class_initialize (EazelInstallClass *klass)
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
#ifdef EAZEL_INSTALL_NO_CORBA
klass->file_conflict_check = NULL;
klass->file_uniqueness_check = NULL;
klass->feature_consistency_check = NULL;
klass->install_progress = NULL;
klass->download_progress = NULL;
klass->download_failed = NULL;
@ -485,6 +519,9 @@ eazel_install_class_initialize (EazelInstallClass *klass)
klass->dependency_check = NULL;
klass->preflight_check = NULL;
#else
klass->file_conflict_check = eazel_install_emit_file_conflict_check_default;
klass->file_uniqueness_check = eazel_install_emit_file_uniqueness_check_default;
klass->feature_consistency_check = eazel_install_emit_feature_consistency_check_default;
klass->install_progress = eazel_install_emit_install_progress_default;
klass->download_progress = eazel_install_emit_download_progress_default;
klass->download_failed = eazel_install_emit_download_failed_default;
@ -1264,6 +1301,90 @@ eazel_install_add_repository (EazelInstall *service, const char *dir)
a corba callback, and if true, do the callback
**************************************************/
void
eazel_install_emit_file_conflict_check (EazelInstall *service,
const PackageData *pack)
{
EAZEL_INSTALL_SANITY(service);
gtk_signal_emit (GTK_OBJECT (service), signals[FILE_CONFLICT_CHECK], pack);
}
void
eazel_install_emit_file_conflict_check_default (EazelInstall *service,
const PackageData *pack)
{
#ifndef EAZEL_INSTALL_NO_CORBA
CORBA_Environment ev;
CORBA_exception_init (&ev);
EAZEL_INSTALL_SANITY(service);
if (service->callback != CORBA_OBJECT_NIL) {
GNOME_Trilobite_Eazel_PackageDataStruct *package;
package = corba_packagedatastruct_from_packagedata (pack);
GNOME_Trilobite_Eazel_InstallCallback_file_conflict_check (service->callback,
package,
&ev);
CORBA_free (package);
}
CORBA_exception_free (&ev);
#endif /* EAZEL_INSTALL_NO_CORBA */
}
void
eazel_install_emit_file_uniqueness_check (EazelInstall *service,
const PackageData *pack)
{
EAZEL_INSTALL_SANITY(service);
gtk_signal_emit (GTK_OBJECT (service), signals[FILE_UNIQUENESS_CHECK], pack);
}
void
eazel_install_emit_file_uniqueness_check_default (EazelInstall *service,
const PackageData *pack)
{
#ifndef EAZEL_INSTALL_NO_CORBA
CORBA_Environment ev;
CORBA_exception_init (&ev);
EAZEL_INSTALL_SANITY(service);
if (service->callback != CORBA_OBJECT_NIL) {
GNOME_Trilobite_Eazel_PackageDataStruct *package;
package = corba_packagedatastruct_from_packagedata (pack);
GNOME_Trilobite_Eazel_InstallCallback_file_uniqueness_check (service->callback,
package,
&ev);
CORBA_free (package);
}
CORBA_exception_free (&ev);
#endif /* EAZEL_INSTALL_NO_CORBA */
}
void
eazel_install_emit_feature_consistency_check (EazelInstall *service,
const PackageData *pack)
{
EAZEL_INSTALL_SANITY(service);
gtk_signal_emit (GTK_OBJECT (service), signals[FEATURE_CONSISTENCY_CHECK], pack);
}
void
eazel_install_emit_feature_consistency_check_default (EazelInstall *service,
const PackageData *pack)
{
#ifndef EAZEL_INSTALL_NO_CORBA
CORBA_Environment ev;
CORBA_exception_init (&ev);
EAZEL_INSTALL_SANITY(service);
if (service->callback != CORBA_OBJECT_NIL) {
GNOME_Trilobite_Eazel_PackageDataStruct *package;
package = corba_packagedatastruct_from_packagedata (pack);
GNOME_Trilobite_Eazel_InstallCallback_feature_consistency_check (service->callback,
package,
&ev);
CORBA_free (package);
}
CORBA_exception_free (&ev);
#endif /* EAZEL_INSTALL_NO_CORBA */
}
void
eazel_install_emit_install_progress (EazelInstall *service,

View file

@ -74,6 +74,9 @@ struct _EazelInstallClass
#endif /* EAZEL_INSTALL_NO_CORBA */
/* signal prototypes */
void (*download_progress) (EazelInstall *service, const PackageData *package, int amount, int total);
void (*file_conflict_check) (EazelInstall *service, const PackageData *package);
void (*file_uniqueness_check) (EazelInstall *service, const PackageData *package);
void (*feature_consistency_check) (EazelInstall *service, const PackageData *package);
gboolean (*preflight_check) (EazelInstall *service,
GList *packages,
@ -145,6 +148,12 @@ gboolean eazel_install_lock_tmp_dir (EazelInstall *service);
/* This sets mode 700 on tmpdir and downloaded files */
gboolean eazel_install_unlock_tmp_dir (EazelInstall *service);
void eazel_install_emit_file_conflict_check (EazelInstall *service,
const PackageData *pack);
void eazel_install_emit_file_uniqueness_check (EazelInstall *service,
const PackageData *pack);
void eazel_install_emit_feature_consistency_check (EazelInstall *service,
const PackageData *pack);
void eazel_install_emit_install_progress (EazelInstall *service,
const PackageData *pack,
int package_num, int num_packages,

View file

@ -675,7 +675,8 @@ packagedata_get_readable_name (const PackageData *pack)
} else if ((pack->name != NULL) && (pack->version != NULL)) {
/* This is a hack to shorten EazelSourceSnapshot names
into the build date/time */
if (strstr (pack->version, "Eazel")!=NULL && strstr (pack->minor, "200") != NULL) {
if (pack->version && pack->minor &&
strstr (pack->version, "Eazel")!=NULL && strstr (pack->minor, "200") != NULL) {
char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"};
char *temp, *temp2;