[Libguestfs] [PATCH v8 7/7] Add a virt-builder-repository tool

Pino Toscano ptoscano at redhat.com
Fri Sep 15 14:24:27 UTC 2017


On Tuesday, 12 September 2017 09:03:14 CEST Cédric Bosdonnat wrote:
> virt-builder-repository allows users to easily create or update
> a virt-builder source repository out of disk images. The tool can
> be run in either interactive or automated mode.
> ---

Since this patch was done, Rich introduced Unicode quotes, so
- '%s'/'...' -> ‘%s’/‘...’
- don't/etc'etera -> don’t/etc’etera
and so on -- mostly in error/etc messages, and documentation

This looks almost like the last version I reviewed; will give a test
run on Monday.

A minor note on the commit message: I'd use
  New tool: virt-builder-repository
which is what was used in the past for other tools (so it makes it
sligtly easier to search for that).

> @@ -101,8 +137,7 @@ virt_builder_CPPFLAGS = \
>  	-I$(shell $(OCAMLC) -where) \
>  	-I$(top_srcdir)/gnulib/lib \
>  	-I$(top_srcdir)/common/utils \
> -	-I$(top_srcdir)/lib \
> -	-I$(top_srcdir)/fish
> +	-I$(top_srcdir)/lib

Extra change, can go in directly if split as own commit.

> +virt_builder_repository_SOURCES = $(REPOSITORY_SOURCES_C)
> +virt_builder_repository_CPPFLAGS = \
> +	-I. \
> +	-I$(top_builddir) \
> +	-I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib \
> +	-I$(shell $(OCAMLC) -where) \
> +	-I$(top_srcdir)/gnulib/lib \
> +	-I$(top_srcdir)/lib \
> +	-I$(top_srcdir)/fish

guestfish is needed here?

> +module StringSet = Set.Make(String)

This is now provided by mlstdutils.

> +let increment_revision = function
> +  | Utils.Rev_int n -> Utils.Rev_int (n + 1)
> +  | Utils.Rev_string s ->
> +    if Str.string_match (Str.regexp "^\\(.*[-._]\\)\\([0-9]+\\)$") s 0 then

There's a PCRE OCaml module now, so maybe it could be a better choice
here (and make the regexp less ugly).

> +let get_mime_type filepath =
> +  let file_cmd = "file --mime-type " ^ (quote filepath) in
> +  let output = List.hd (external_command file_cmd) in
> +  let _, mime = String.split ":" output in
> +  String.trim mime

- passing --brief removes the filename from the output, and thus the
  need to strip it (which will not work in case the file has a colon in
  the name)
- List.hd will raise an exception if the list is empty (so the command
  produced no output for some reason) -- you might need to check it,
  for example like I did in dib/utils.ml:var_from_lines

> +    printf "%s%s%s" message default_str list_str;

I think it might be a good idea to flush stdout before reading the
answer from the user -- just append "%!" at the end of the format
string.

> +      if x == "" then

You just need '=', as '==' is stronger than that (compares also object equality).

> +    (id, { Index.printable_name = printable_name;
> +           osinfo = osinfo;
> +           file_uri = Filename.basename out_path;
> +           arch = arch;
> +           signature_uri = None;
> +           checksums = Some [checksum];
> +           revision = revision;
> +           format = Some format;
> +           size = size;
> +           compressed_size = Some compressed_size;
> +           expand = expand;
> +           lvexpand = lvexpand;
> +           notes = notes;
> +           hidden = hidden;
> +           aliases = aliases;
> +           sigchecker = sigchecker;
> +           proxy = Curl.UnsetProxy })

Most probably it won't change (although I remember a chat on IRC about
different proxy values leading to failures in the unit test added in
patch #4), but better use one (e.g. Curl.SystemProxy) thoroughly.

> +  (* If debugging, echo the command line arguments. *)
> +  debug "command line: %s\n" (String.concat " " (Array.to_list Sys.argv));

debug already prints the newline at the end of the message. (Also in
other occurrences.)

> +  (* Remove the processed image files *)
> +  if not cmdline.no_compression then
> +      List.iter (
> +        fun filename -> Sys.remove (cmdline.repo // filename)
> +      ) images

Indented twice?

> +The file value needs to match the image name extended with the ".xz"

C<.xz>.

> +suffix if the C<--no-compression> parameter is not provided or the

Options with I<>.

> +To remove an image from the repository, just remove the corresponding
> +compressed image file before running virt-builder-repository.

I'd remove "compressed" here, since both options (compressed, and not)
are supported.

Thanks,
-- 
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20170915/c897f24f/attachment.sig>


More information about the Libguestfs mailing list