summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/commit.ml27
-rw-r--r--src/commit.mli7
2 files changed, 23 insertions, 11 deletions
diff --git a/src/commit.ml b/src/commit.ml
index c8cb43e..a2b9f6e 100644
--- a/src/commit.ml
+++ b/src/commit.ml
@@ -4,10 +4,16 @@ module CD = Vyos1x.Config_diff
module RT = Vyos1x.Reference_tree
module FP = FilePath
+type tree_source = DELETE | ADD
+
+let tree_source_to_yojson = function
+ | DELETE -> `String "DELETE"
+ | ADD -> `String "ADD"
+
type status = {
success : bool;
out : string;
-} [@@deriving yojson]
+} [@@deriving to_yojson]
type node_data = {
script_name: string;
@@ -15,8 +21,9 @@ type node_data = {
tag_value: string option;
arg_value: string option;
path: string list;
+ source: tree_source;
reply: status option;
-} [@@deriving yojson]
+} [@@deriving to_yojson]
let default_node_data = {
@@ -25,6 +32,7 @@ let default_node_data = {
tag_value = None;
arg_value = None;
path = [];
+ source = ADD;
reply = Some { success = false; out = ""; };
}
@@ -37,7 +45,7 @@ type commit_data = {
background: bool;
init: status option;
node_list: node_data list;
-} [@@deriving yojson]
+} [@@deriving to_yojson]
let default_commit_data = {
session_id = "";
@@ -84,7 +92,7 @@ let owner_args_from_data p o =
let add_tag_instance cd cs tv =
CS.add { cd with tag_value = Some tv; } cs
-let get_node_data rt ct (path, cs') t =
+let get_node_data rt ct src (path, cs') t =
if Vyos1x.Util.is_empty path then
(path, cs')
else
@@ -112,7 +120,8 @@ let get_node_data rt ct (path, cs') t =
script_name = own;
priority = priority;
arg_value = arg;
- path = rpath; }
+ path = rpath;
+ source = src; }
in
let tag_values =
match RT.is_tag rt rt_path with
@@ -125,8 +134,8 @@ let get_node_data rt ct (path, cs') t =
| _ -> List.fold_left (add_tag_instance c_data) cs' tag_values
in (path, cs)
-let get_commit_set rt ct =
- snd (VT.fold_tree_with_path (get_node_data rt ct) ([], CS.empty) ct)
+let get_commit_set rt ct src =
+ snd (VT.fold_tree_with_path (get_node_data rt ct src) ([], CS.empty) ct)
(* for initial consistency with the legacy ordering of delete and add
queues, enforce the following subtlety: if a path in the delete tree is
@@ -150,8 +159,8 @@ let calculate_priority_lists rt at wt =
let diff = CD.diff_tree [] at wt in
let del_tree = CD.get_tagged_delete_tree diff in
let add_tree = CT.get_subtree diff ["add"] in
- let cs_del' = get_commit_set rt del_tree in
- let cs_add' = get_commit_set rt add_tree in
+ let cs_del' = get_commit_set rt del_tree DELETE in
+ let cs_add' = get_commit_set rt add_tree ADD in
let cs_del, cs_add = legacy_order del_tree cs_del' cs_add' in
List.rev (CS.elements cs_del), CS.elements cs_add
diff --git a/src/commit.mli b/src/commit.mli
index e765f48..da97389 100644
--- a/src/commit.mli
+++ b/src/commit.mli
@@ -1,3 +1,5 @@
+type tree_source = DELETE | ADD
+
type status = {
success : bool;
out : string;
@@ -9,8 +11,9 @@ type node_data = {
tag_value: string option;
arg_value: string option;
path: string list;
+ source: tree_source;
reply: status option;
-} [@@deriving yojson]
+} [@@deriving to_yojson]
type commit_data = {
session_id: string;
@@ -21,7 +24,7 @@ type commit_data = {
background: bool;
init: status option;
node_list: node_data list;
-} [@@deriving yojson]
+} [@@deriving to_yojson]
val default_node_data : node_data