diff --git a/CommonFunctions.ml b/CommonFunctions.ml index de6caf9..f77e593 100644 --- a/CommonFunctions.ml +++ b/CommonFunctions.ml @@ -33,8 +33,8 @@ open Datamodel_types module DT = Datamodel_types let rec list_distinct list = - match list with - | [] -> [] + match list with + | [] -> [] | [x] -> [x] | hd1::(hd2::_ as tl) -> if hd1 = hd2 then list_distinct tl else hd1::(list_distinct tl) @@ -54,9 +54,9 @@ and list_index_of x list = with Not_found -> -1 and list_is_empty list = - match list with - | [] -> true - | _ -> false + match list with + | [] -> true + | _ -> false let rec gen_param_groups_for_releases releaseOrder params = match releaseOrder with @@ -74,6 +74,7 @@ and get_method_params_list message = else List.tl message.msg_params and gen_param_groups message params = + let expRelease = get_prototyped_release message.msg_lifecycle in let msgRelease = get_first_release message.msg_release.internal in let msgReleaseIndex = list_index_of msgRelease DT.release_order in let paramGroups = gen_param_groups_for_releases DT.release_order params in @@ -85,27 +86,30 @@ and gen_param_groups message params = valid::(getValid tl) in let filteredGroups = List.filter (fun x -> match x with | [] -> false | _ -> true) (getValid paramGroups) in - list_distinct filteredGroups + if (not (expRelease = "")) then + [params] + else + list_distinct filteredGroups and get_release_name release = - if release = rel_rio then "XenServer 4.0" - else if release = rel_miami then "XenServer 4.1" - else if release = rel_symc then "XenServer 4.1.1" - else if release = rel_orlando then "XenServer 5.0" - else if release = rel_orlando_update_1 then "XenServer 5.0 Update 1" - else if release = rel_george then "XenServer 5.5" - else if release = rel_midnight_ride then "XenServer 5.6" - else if release = rel_cowley then "XenServer 5.6 FP1" - else if release = rel_boston then "XenServer 6.0" - else if release = rel_tampa then "XenServer 6.1" - else if release = rel_clearwater then "XenServer 6.2" - else if release = rel_vgpu_tech_preview then "XenServer 6.2 SP1 Tech-Preview" - else if release = rel_vgpu_productisation then "XenServer 6.2 SP1" - else if release = rel_augusta then "Unreleased" - else "" + if release = rel_rio then "XenServer 4.0" + else if release = rel_miami then "XenServer 4.1" + else if release = rel_symc then "XenServer 4.1.1" + else if release = rel_orlando then "XenServer 5.0" + else if release = rel_orlando_update_1 then "XenServer 5.0 Update 1" + else if release = rel_george then "XenServer 5.5" + else if release = rel_midnight_ride then "XenServer 5.6" + else if release = rel_cowley then "XenServer 5.6 FP1" + else if release = rel_boston then "XenServer 6.0" + else if release = rel_tampa then "XenServer 6.1" + else if release = rel_clearwater then "XenServer 6.2" + else if release = rel_vgpu_tech_preview then "XenServer 6.2 SP1 Tech-Preview" + else if release = rel_vgpu_productisation then "XenServer 6.2 SP1" + else if release = rel_augusta then "Unreleased" + else "" and get_first_release releases = - let filtered = List.filter (fun x -> List.mem x releases) DT.release_order in + let filtered = List.filter (fun x -> List.mem x releases) DT.release_order in match filtered with | [] -> "" | hd::tl -> hd @@ -114,35 +118,51 @@ and get_first_release_string release = if release = "" then "" else sprintf "First published in %s." (get_release_name release) + +and get_prototyped_release lifecycle = + match lifecycle with + | [Prototyped, release, doc] -> release + | _ -> "" + +and get_prototyped_release_string lifecycle = + match lifecycle with + | [Prototyped, release, doc] -> "Experimental. "^(get_first_release_string release) + | _ -> "" + and get_published_info_message message cls = + let expRelease = get_prototyped_release_string message.msg_lifecycle in let clsRelease = get_first_release cls.obj_release.internal in let msgRelease = get_first_release message.msg_release.internal in let clsReleaseIndex = list_index_of clsRelease DT.release_order in - let msgReleaseIndex = list_index_of msgRelease DT.release_order in - if (not (clsReleaseIndex = -1)) && (not (msgReleaseIndex = -1)) && (clsReleaseIndex < msgReleaseIndex) then + let msgReleaseIndex = list_index_of msgRelease DT.release_order in + if (not (expRelease = "")) then + expRelease + else if (not (clsReleaseIndex = -1)) && (not (msgReleaseIndex = -1)) && (clsReleaseIndex < msgReleaseIndex) then get_first_release_string msgRelease else get_first_release_string clsRelease and get_published_info_param message param = - let msgRelease = get_first_release message.msg_release.internal in - let paramRelease = get_first_release param.param_release.internal in + let msgRelease = get_first_release message.msg_release.internal in + let paramRelease = get_first_release param.param_release.internal in let msgReleaseIndex = list_index_of msgRelease DT.release_order in let paramReleaseIndex = list_index_of paramRelease DT.release_order in if (not (msgReleaseIndex = -1)) && (not (paramReleaseIndex = -1)) && (msgReleaseIndex < paramReleaseIndex) then get_first_release_string paramRelease - else "" + else "" and get_published_info_class cls = get_first_release_string (get_first_release cls.obj_release.internal) and get_published_info_field field cls = + let expRelease = get_prototyped_release_string field.lifecycle in let clsRelease = get_first_release cls.obj_release.internal in let fieldRelease = get_first_release field.release.internal in let clsReleaseIndex = list_index_of clsRelease DT.release_order in - let fieldReleaseIndex = list_index_of fieldRelease DT.release_order in - if (not (clsReleaseIndex = -1)) && (not (fieldReleaseIndex = -1)) && (clsReleaseIndex < fieldReleaseIndex) then - get_first_release_string fieldRelease + let fieldReleaseIndex = list_index_of fieldRelease DT.release_order in + if (not (expRelease = "")) then + expRelease + else if (not (clsReleaseIndex = -1)) && (not (fieldReleaseIndex = -1)) && (clsReleaseIndex < fieldReleaseIndex) then + get_first_release_string fieldRelease else "" - diff --git a/powershell/gen_powershell_binding.ml b/powershell/gen_powershell_binding.ml index 1ed83b3..a24a2bc 100644 --- a/powershell/gen_powershell_binding.ml +++ b/powershell/gen_powershell_binding.ml @@ -289,7 +289,6 @@ and gen_binding obj = match obj with {name=classname; description = description; messages=messages; contents=contents; gen_constructor_destructor=gen_const_dest} -> - let messages = List.filter (fun x -> not ((get_first_release x.msg_release.internal) = "")) messages in let partNew = List.partition (fun x -> is_constructor x) messages in let constructors = fst partNew in let partDest = List.partition (fun x -> is_destructor x) (snd partNew) in