On Thu, Feb 02, 2023 at 11:29:26AM +0100, Laszlo Ersek wrote:
> Introduce a new GTK_ENTRY field in the Output options box.  Similarly to
> "p2v.output.misc" on the kernel cmdline, the contents of this GTK_ENTRY
> are a comma-separated list of OPTION=VALUE options, where each option is
> passed to virt-v2v as the argument of a separate "-oo" option.
> 
> Refresh the manual accordingly.
> 
> For initially populating the text entry (in case the kernel command line
> specified "p2v.output.misc"), call the guestfs_int_join_strings() function
> that we imported previously in this series.
> 
> For unpacking the contents in start_conversion_clicked(), call
> guestfs_int_split_string(), just like the generated kernel cmdline parser
> does, in update_config_from_kernel_cmdline() [kernel-config.c].
> 
> Cc: Alban Lecorps <alban.leco...@ubisoft.com>
> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1792141
> Signed-off-by: Laszlo Ersek <ler...@redhat.com>
> ---
> 
> Notes:
>     v2:
>     
>     - highlight "no spaces around commas" in the tooltip [Rich]
>     
>     - repeat the "-oo" notes in the GUI section of the manual [Rich]
> 
>  gui.c        | 49 +++++++++++++++++++-
>  virt-p2v.pod | 11 +++++
>  2 files changed, 58 insertions(+), 2 deletions(-)
> 
> diff --git a/gui.c b/gui.c
> index f86cab649785..ce9b2455e666 100644
> --- a/gui.c
> +++ b/gui.c
> @@ -116,7 +116,7 @@ static GtkWidget *conn_dlg,
>  static GtkWidget *conv_dlg,
>    *guestname_entry, *vcpu_topo, *vcpus_entry, *memory_entry,
>    *vcpus_warning, *memory_warning, *target_warning_label,
> -  *o_combo, *oc_entry, *os_entry, *of_entry, *oa_combo,
> +  *o_combo, *oc_entry, *os_entry, *of_entry, *oa_combo, *oo_entry,
>    *info_label,
>    *disks_list, *removable_list, *interfaces_list;
>  static int vcpus_entry_when_last_sensitive;
> @@ -674,6 +674,7 @@ static void populate_removable_store (GtkListStore 
> *removable_store,
>  static void populate_removable (GtkTreeView *removable_list_p,
>                                  const char * const *removable);
>  static void populate_interfaces (GtkTreeView *interfaces_list_p);
> +static void populate_misc_opts (GtkEntry *entry, char * const *misc);
>  static void toggled (GtkCellRendererToggle *cell,
>                       gchar *path_str,
>                       gpointer data);
> @@ -733,7 +734,7 @@ create_conversion_dialog (struct config *config,
>    GtkWidget *target_frame, *target_vbox, *target_tbl;
>    GtkWidget *guestname_label, *vcpus_label, *memory_label;
>    GtkWidget *output_frame, *output_vbox, *output_tbl;
> -  GtkWidget *o_label, *oa_label, *oc_label, *of_label, *os_label;
> +  GtkWidget *o_label, *oa_label, *oc_label, *of_label, *os_label, *oo_label;
>    GtkWidget *info_frame;
>    GtkWidget *disks_frame, *disks_sw;
>    GtkWidget *removable_frame, *removable_sw;
> @@ -929,6 +930,25 @@ create_conversion_dialog (struct config *config,
>    table_attach (output_tbl, oa_combo,
>                  1, 2, row, GTK_FILL, GTK_FILL, 1, 1);
>  
> +  row++;
> +  oo_label = gtk_label_new_with_mnemonic (_("M_isc. options (-oo):"));
> +  table_attach (output_tbl, oo_label,
> +                0, 1, row, GTK_FILL, GTK_FILL, 1, 1);
> +  set_alignment (oo_label, 1., 0.5);
> +  oo_entry = gtk_entry_new ();
> +  gtk_label_set_mnemonic_widget (GTK_LABEL (oo_label), oo_entry);
> +  gtk_widget_set_tooltip_markup (oo_entry,
> +                                 _("A comma-separated list of "
> +                                   "<b>OPTION=VALUE</b> output-specific "
> +                                   "options.  Each option is passed to "
> +                                   "virt-v2v as the argument of a separate "
> +                                   "<b>-oo</b> option.  Do not place a space 
> "
> +                                   "character at either side of either comma 
> "
> +                                   "separator."));
> +  populate_misc_opts (GTK_ENTRY (oo_entry), config->output.misc);
> +  table_attach (output_tbl, oo_entry,
> +                1, 2, row, GTK_FILL, GTK_FILL, 1, 1);
> +
>    gtk_box_pack_start (GTK_BOX (output_vbox), output_tbl, TRUE, TRUE, 0);
>    gtk_container_add (GTK_CONTAINER (output_frame), output_vbox);
>  
> @@ -1356,6 +1376,25 @@ populate_interfaces (GtkTreeView *interfaces_list_p)
>                      G_CALLBACK (network_edited_callback), interfaces_store);
>  }
>  
> +/**
> + * Populate the C<Misc. options> text entry.
> + */
> +static void
> +populate_misc_opts (GtkEntry *entry, char * const *misc)
> +{
> +  char *joined;
> +
> +  if (misc == NULL)
> +    return;
> +
> +  joined = guestfs_int_join_strings (",", misc);
> +  if (joined == NULL)
> +    error (EXIT_FAILURE, errno, "malloc");
> +
> +  gtk_entry_set_text (entry, joined);
> +  free(joined);
> +}
> +
>  static void
>  toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
>  {
> @@ -2197,6 +2236,12 @@ start_conversion_clicked (GtkWidget *w, gpointer data)
>    else
>      config->output.storage = NULL;
>  
> +  str = gtk_entry_get_text (GTK_ENTRY (oo_entry));
> +  guestfs_int_free_string_list (config->output.misc);
> +  config->output.misc = guestfs_int_split_string (',', str);
> +  if (config->output.misc == NULL)
> +    error (EXIT_FAILURE, errno, "strdup");
> +
>    /* Display the UI for conversion. */
>    show_running_dialog ();
>  
> diff --git a/virt-p2v.pod b/virt-p2v.pod
> index ecdae46eaaf6..6008c25d6159 100644
> --- a/virt-p2v.pod
> +++ b/virt-p2v.pod
> @@ -175,10 +175,21 @@ first-time virt-p2v user.
>   │
>   │ Output allocation (-oa): [sparse            ▼]
>   │
> + │     Misc. options (-oo): [___________________]
> + │
>  
>  All output options and paths are relative to the conversion server
>  (I<not> to the physical server).
>  
> +Note that the C<Misc. options> text entry behaves differently from the

You can use S<C<Misc. options>> which will add a non-breaking space to
prevent the output from being wrapped (not that it's likely to be
line-wrapped in the current position, but it might be good practice).

> +other text entries -- its format is identical to that of the
> +C<p2v.output.misc> L<kernel command line|/KERNEL COMMAND LINE
> +CONFIGURATION> option.  Namely, the text entry contains a
> +comma-separated list of miscellaneous, output-specific options.  (Do
> +not put spaces around the commas!)  Each element in the list is of the
> +form C<OPTION=VALUE>, and each element is passed to virt-v2v as a
> +standalone I<-oo OPTION=VALUE> option.
> +
>  Finally in the left hand column is an information box giving the
>  version of virt-p2v (on the physical server) and virt-v2v (on the
>  conversion server).  You should supply this information when reporting

Reviewed-by: Richard W.M. Jones <rjo...@redhat.com>

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top
_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://listman.redhat.com/mailman/listinfo/libguestfs

Reply via email to