diff -r a29623b68ca2 -r 9f4b672bd85c app-manager/app-manager.c --- a/app-manager/app-manager.c Mon Jun 13 12:18:42 2016 +0100 +++ b/app-manager/app-manager.c Tue Jun 05 17:21:56 2018 +0100 @@ -215,17 +215,20 @@ { GError *err=0; GtkWidget *w; - gchar *s,*contents; - gchar *setup_base=NULL,*update_base=NULL; + gchar *s,*database_uri,*contents; + gchar *database=NULL,*setup_base=NULL,*update_base=NULL; gsize len; - PloverPackageSet *set; + struct comps *comps; + PloverPackageSet *set=NULL; GSList *objects,*lnk; gboolean started; GOptionEntry options[]={ - {"setup",0,0,G_OPTION_ARG_FILENAME,&setup_base, - "Setup from installation media","path"}, - {"update",0,0,G_OPTION_ARG_FILENAME,&update_base, - "Update from upgrade media","path"}, + {"database",0,0,G_OPTION_ARG_STRING,&database, + "Operate on a distribution-local database","vendor/distribution"}, + {"setup",0,0,G_OPTION_ARG_STRING,&setup_base, + "Setup from installation media","uri"}, + {"update",0,0,G_OPTION_ARG_STRING,&update_base, + "Update from upgrade media","uri"}, {NULL} }; #ifdef WIN32 @@ -285,30 +288,52 @@ g_error("%s",err->message); exit(0); } - if (prefix) - { - relocations=razor_relocations_create(); - razor_relocations_add(relocations,"/usr",prefix); - } gtk_builder_connect_signals(ui,NULL); gtk_link_button_set_uri_hook(show_uri,NULL,NULL); - installed=GTK_TREE_MODEL(plover_package_store_new()); - set=plover_package_set_new(); - (void)plover_package_set_open(set,"",TRUE,NULL); - plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); - if (plover_package_set_get_no_details(set)) - { - w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles")); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE); - } - applications=plover_applications_model_new(installed); - set_package_model(applications); if (setup_base) - started=setup(set,setup_base); + started=setup(setup_base); else if (update_base) - started=update(set,update_base); + started=update(update_base); else { + if (database) + { + g_free(prefix); + prefix=NULL; + s=strchr(database,'/'); + if (*s) + *s++='\0'; + comps=plover_comps_new(); + plover_comps_set_vendor(comps,database); + if (s) + { + plover_comps_set_distribution(comps,s); + *--s='/'; + } + prefix=plover_comps_get_default_prefix(comps); + plover_comps_free(comps); + s=g_strconcat(prefix,"/var/lib/razor",NULL); + database_uri=razor_path_to_uri(s); + g_free(s); + razor_set_database_uri(database_uri); + g_free(database_uri); + } + if (prefix) + { + relocations=razor_relocations_create(); + razor_relocations_add(relocations,"/usr",prefix); + } + installed=GTK_TREE_MODEL(plover_package_store_new()); + set=plover_package_set_new(); + (void)plover_package_set_open(set,"",TRUE,NULL); + plover_package_store_add_set(PLOVER_PACKAGE_STORE(installed),set); + if (plover_package_set_get_no_details(set)) + { + w=GTK_WIDGET(gtk_builder_get_object(ui,"ViewFiles")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),TRUE); + } + applications=plover_applications_model_new(installed); + set_package_model(applications); w=GTK_WIDGET(gtk_builder_get_object(ui,"MainWindow")); gtk_widget_show(w); started=TRUE; @@ -332,6 +357,7 @@ g_free(prefix); g_free(setup_base); g_free(update_base); + g_free(database); exit(0); }