mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
Support the possibility to have optional groups always enabled (e.g. because they were present in the past, and they need to be kept for users). Add and use few helper optgroups-related functions to deal also with them.
67 lines
2.1 KiB
OCaml
67 lines
2.1 KiB
OCaml
(* libguestfs
|
|
* Copyright (C) 2009-2014 Red Hat Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*)
|
|
|
|
(* Please read generator/README first. *)
|
|
|
|
open Types
|
|
open Utils
|
|
open Actions
|
|
|
|
(* The list of optional groups which need to be in the daemon as always
|
|
* available. These are "retired" as they no longer appear in the
|
|
* list of functions.
|
|
*)
|
|
let optgroups_retired = [
|
|
]
|
|
|
|
(* Create list of optional groups. *)
|
|
let optgroups =
|
|
let h = Hashtbl.create 13 in
|
|
List.iter (
|
|
function
|
|
| { optional = Some group } as fn ->
|
|
let fns = try Hashtbl.find h group with Not_found -> [] in
|
|
Hashtbl.replace h group (fn :: fns)
|
|
| _ -> ()
|
|
) daemon_functions;
|
|
let groups = Hashtbl.fold (fun k _ ks -> k :: ks) h [] in
|
|
let groups =
|
|
List.map (
|
|
fun group ->
|
|
(* Ensure the functions are sorted on the name field. *)
|
|
let fns = Hashtbl.find h group in
|
|
let cmp { name = n1 } { name = n2 } = compare n1 n2 in
|
|
let fns = List.sort cmp fns in
|
|
group, fns
|
|
) groups in
|
|
List.sort (fun x y -> compare (fst x) (fst y)) groups
|
|
|
|
let optgroups_names =
|
|
fst (List.split optgroups)
|
|
|
|
let optgroups_names_all =
|
|
List.sort compare (optgroups_names @ optgroups_retired)
|
|
|
|
let () =
|
|
let file = "generator/optgroups.ml" in
|
|
List.iter (
|
|
fun x ->
|
|
if List.mem x optgroups_names then
|
|
failwithf "%s: optgroups_retired list contains optgroup with functions (%s)" file x
|
|
) optgroups_retired
|