[Libguestfs] [PATCH 01/10] builder: add format=FMT in repository .conf files

Pino Toscano
Tue, 28 Jul 2015 09:24:41 -0000

First step in allow different formats for indexes of images, aside the
current one.

The only accepted value is "native".
---
 builder/builder.ml       |  5 ++++-
 builder/sources.ml       | 16 ++++++++++++++++
 builder/sources.mli      |  3 +++
 builder/virt-builder.pod | 16 ++++++++++++++++
 4 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/builder/builder.ml b/builder/builder.ml
index 1f618ad..d40ad8f 100644
--- a/builder/builder.ml
+++ b/builder/builder.ml
@@ -161,6 +161,7 @@ let main ()          Sources.name = source; uri = source;
         gpgkey = Utils.Fingerprint fingerprint;
         proxy = Downloader.SystemProxy;
+        format = Sources.FormatNative;
       }
   ) sources in
   let sources = List.append sources repos in
@@ -171,7 +172,9 @@ let main ()            let sigchecker
Sigchecker.create ~gpg ~check_signature
               ~gpgkey:source.Sources.gpgkey in
-          Index_parser.get_index ~downloader ~sigchecker source
+          match source.Sources.format with
+          | Sources.FormatNative ->
+            Index_parser.get_index ~downloader ~sigchecker source
       ) sources
     ) in
   let index = remove_duplicates index in
diff --git a/builder/sources.ml b/builder/sources.ml
index b774762..b21e8fc 100644
--- a/builder/sources.ml
+++ b/builder/sources.ml
@@ -27,7 +27,10 @@ type source = {
   uri : string;
   gpgkey : Utils.gpgkey_type;
   proxy : Downloader.proxy_mode;
+  format : source_format;
 }
+and source_format +| FormatNative

 module StringSet = Set.Make (String)

@@ -75,8 +78,21 @@ let parse_conf file              )
           with
             Not_found -> Downloader.SystemProxy in
+        let format +          try
+            (match (List.assoc ("format", None) fields) with
+            | "native" | "" -> FormatNative
+            | fmt ->
+              if verbose () then (
+                eprintf (f_"%s: unknown repository type '%s' in
%s, skipping it\n") prog fmt file;
+              );
+              invalid_arg fmt
+            )
+          with
+            Not_found -> FormatNative in
         {
           name = n; uri = uri; gpgkey = gpgkey; proxy = proxy;
+          format = format;
         }
       in
       try (give_source n fields) :: acc
diff --git a/builder/sources.mli b/builder/sources.mli
index 2a94c54..e861310 100644
--- a/builder/sources.mli
+++ b/builder/sources.mli
@@ -21,6 +21,9 @@ type source = {
   uri : string;
   gpgkey : Utils.gpgkey_type;
   proxy : Downloader.proxy_mode;
+  format : source_format;
 }
+and source_format +| FormatNative

 val read_sources : unit -> source list
diff --git a/builder/virt-builder.pod b/builder/virt-builder.pod
index b4a341f..fc49d4d 100644
--- a/builder/virt-builder.pod
+++ b/builder/virt-builder.pod
@@ -1169,6 +1169,22 @@ configuration.
 If not present, the assumed value is to respect the proxy settings of the
 system (i.e. as if B<system> would be specified).

+=item C<format=FORMAT>
+
+This optional field specifies the format of the repository.
+The possible values are:
+
+=over 4
+
+=item B<native>
+
+The native format of the C<virt-builder> repository.  See also
+L</Creating and signing the index file> below.
+
+=back
+
+If not present, the assumed value is C<native>.
+
 =back

 For serious virt-builder use, you may want to create your own
--
2.1.0