Add a --paths option to app-manager and use it in setup.js and update.js
authorJ. Ali Harlow <ali@juiblex.co.uk>
Tue Jun 29 10:08:33 2021 +0100 (2021-06-29)
changeset 106cc42fad3fe31
parent 105 bbddb595e366
child 107 6ae203c8b28d
Add a --paths option to app-manager and use it in setup.js and update.js
app-manager/app-manager.c
plover-gtk/stockicons.c
plover-gtk/transactionhelper.c
setup/setup.js.in
update/update.js.in
     1.1 --- a/app-manager/app-manager.c	Mon Aug 31 07:12:39 2020 +0100
     1.2 +++ b/app-manager/app-manager.c	Tue Jun 29 10:08:33 2021 +0100
     1.3 @@ -211,10 +211,42 @@
     1.4      gtk_window_set_default_icon_name(LOGO_NAME);
     1.5  }
     1.6  
     1.7 +static gboolean uri_validate(const char *uri)
     1.8 +{
     1.9 +    char *s;
    1.10 +    s=razor_path_relative_to_uri(uri,".",NULL);
    1.11 +    free(s);
    1.12 +    return !!s;
    1.13 +}
    1.14 +
    1.15 +char *uri_from_base(const char *base,gboolean use_paths)
    1.16 +{
    1.17 +    char *retval;
    1.18 +    if (use_paths)
    1.19 +    {
    1.20 +	retval=razor_path_to_uri(base);
    1.21 +	if (!retval)
    1.22 +	{
    1.23 +	    g_printerr("%s: Not a valid path\n",base);
    1.24 +	    exit(1);
    1.25 +	}
    1.26 +    }
    1.27 +    else if (!uri_validate(base))
    1.28 +    {
    1.29 +	g_printerr("%s: Not a valid URI\n",base);
    1.30 +	exit(1);
    1.31 +    }
    1.32 +    else
    1.33 +	retval=strdup(base);
    1.34 +    return retval;
    1.35 +}
    1.36 +
    1.37  int main(int argc,char **argv)
    1.38  {
    1.39 +    gboolean use_paths=FALSE;
    1.40      GError *err=0;
    1.41      GtkWidget *w;
    1.42 +    char *uri;
    1.43      gchar *s,*database_uri,*contents;
    1.44      gchar *database=NULL,*setup_base=NULL,*update_base=NULL;
    1.45      gchar *default_action_base=NULL;
    1.46 @@ -226,12 +258,14 @@
    1.47      GOptionEntry options[]={
    1.48  	{"database",0,0,G_OPTION_ARG_STRING,&database,
    1.49  	  "Operate on a distribution-local database","vendor/distribution"},
    1.50 +	{"paths",0,0,G_OPTION_ARG_NONE,&use_paths,
    1.51 +	  "Interpret locations as paths rather than URIs",NULL},
    1.52  	{"setup",0,0,G_OPTION_ARG_STRING,&setup_base,
    1.53 -	  "Setup from installation media","uri"},
    1.54 +	  "Setup from installation media","location"},
    1.55  	{"update",0,0,G_OPTION_ARG_STRING,&update_base,
    1.56 -	  "Update from upgrade media","uri"},
    1.57 +	  "Update from upgrade media","location"},
    1.58  	{"default-action",0,0,G_OPTION_ARG_STRING,&default_action_base,
    1.59 -	  "Install, remove or update from repository","uri"},
    1.60 +	  "Install, remove or update from repository","location"},
    1.61  	{NULL}
    1.62      };
    1.63  #ifdef WIN32
    1.64 @@ -295,11 +329,23 @@
    1.65      gtk_builder_connect_signals(ui,NULL);
    1.66      gtk_link_button_set_uri_hook(show_uri,NULL,NULL);
    1.67      if (setup_base)
    1.68 -	started=setup(setup_base);
    1.69 +    {
    1.70 +	uri=uri_from_base(setup_base,use_paths);
    1.71 +	started=setup(uri);
    1.72 +	free(uri);
    1.73 +    }
    1.74      else if (update_base)
    1.75 -	started=update(update_base);
    1.76 +    {
    1.77 +	uri=uri_from_base(update_base,use_paths);
    1.78 +	started=update(uri);
    1.79 +	free(uri);
    1.80 +    }
    1.81      else if (default_action_base)
    1.82 -	started=default_action(default_action_base);
    1.83 +    {
    1.84 +	uri=uri_from_base(default_action_base,use_paths);
    1.85 +	started=default_action(uri);
    1.86 +	free(uri);
    1.87 +    }
    1.88      else
    1.89      {
    1.90  	if (database)
     2.1 --- a/plover-gtk/stockicons.c	Mon Aug 31 07:12:39 2020 +0100
     2.2 +++ b/plover-gtk/stockicons.c	Tue Jun 29 10:08:33 2021 +0100
     2.3 @@ -115,7 +115,7 @@
     2.4  #endif
     2.5  	if (!prefix)
     2.6  	    prefix=g_strdup("/usr");
     2.7 -	datadir=g_strconcat(prefix,"share",NULL);
     2.8 +	datadir=g_build_filename(prefix,"share",NULL);
     2.9  	g_free(prefix);
    2.10      }
    2.11      if (plover_pixbuf_supports_svg())
     3.1 --- a/plover-gtk/transactionhelper.c	Mon Aug 31 07:12:39 2020 +0100
     3.2 +++ b/plover-gtk/transactionhelper.c	Tue Jun 29 10:08:33 2021 +0100
     3.3 @@ -492,10 +492,12 @@
     3.4      g_return_val_if_fail(PLOVER_IS_TRANSACTION_HELPER(helper),NULL);
     3.5      if (!helper->installed)
     3.6      {
     3.7 -	comps=plover_transaction_helper_get_comps(helper,NULL);
     3.8 +	comps=plover_transaction_helper_get_comps(helper,&error);
     3.9  	if (!comps)
    3.10  	{
    3.11 -	    g_warning("plover_transaction_helper_get_installed: No comps");
    3.12 +	    g_warning("plover_transaction_helper_get_installed: No comps: %s",
    3.13 +	      error->message);
    3.14 +	    g_error_free(error);
    3.15  	    return NULL;
    3.16  	}
    3.17  	install_root=getenv("RAZOR_ROOT");
    3.18 @@ -656,13 +658,22 @@
    3.19    plover_transaction_helper_get_comps(PloverTransactionHelper *helper,
    3.20    GError **error)
    3.21  {
    3.22 -    gchar *s;
    3.23 +    char *s;
    3.24 +    GError *tmp_err=NULL;
    3.25      g_return_val_if_fail(PLOVER_IS_TRANSACTION_HELPER(helper),NULL);
    3.26      if (!helper->comps && helper->base_uri)
    3.27      {
    3.28 -	s=g_strconcat(helper->base_uri,"/repodata/comps.xml",NULL);
    3.29 -	helper->comps=plover_comps_new_from_uri(s,error);
    3.30 -	g_free(s);
    3.31 +	s=razor_path_relative_to_uri(helper->base_uri,"repodata/comps.xml",
    3.32 +	  NULL);
    3.33 +	helper->comps=plover_comps_new_from_uri(s,&tmp_err);
    3.34 +	if (!helper->comps)
    3.35 +	{
    3.36 +	    g_warning(
    3.37 +	      "PloverTransactionHelper: Failed to get comps at '%s': %s",
    3.38 +	      s,tmp_err->message);
    3.39 +	    g_propagate_error(error,tmp_err);
    3.40 +	}
    3.41 +	free(s);
    3.42      }
    3.43      return helper->comps;
    3.44  }
     4.1 --- a/setup/setup.js.in	Mon Aug 31 07:12:39 2020 +0100
     4.2 +++ b/setup/setup.js.in	Tue Jun 29 10:08:33 2021 +0100
     4.3 @@ -57,7 +57,7 @@
     4.4      {
     4.5  	path = FileSystemObject.BuildPath(install_prefix,
     4.6  	  "bin\\app-manager.exe");
     4.7 -	WshShell.Run("\"" + path + "\" --setup \"" + ScriptPath + "\"");
     4.8 +	WshShell.Run("\"" + path + "\" --paths --setup \"" + ScriptPath + "\"");
     4.9      }
    4.10      else
    4.11      {
     5.1 --- a/update/update.js.in	Mon Aug 31 07:12:39 2020 +0100
     5.2 +++ b/update/update.js.in	Tue Jun 29 10:08:33 2021 +0100
     5.3 @@ -49,7 +49,8 @@
     5.4      {
     5.5  	path = FileSystemObject.BuildPath(install_prefix,
     5.6  	  "bin\\app-manager.exe");
     5.7 -	WshShell.Run("\"" + path + "\" --update \"" + ScriptPath + "\"");
     5.8 +	WshShell.Run("\"" + path + "\" --paths "
     5.9 +	  + "--update \"" + ScriptPath + "\"");
    5.10      }
    5.11      else
    5.12      {