diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-08-05 12:27:45 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2025-08-06 15:23:41 -0500 |
| commit | dd126f493e01968c8f4c7f4c420f31ecc599c242 (patch) | |
| tree | 8ba857d53e6b624ca4791a056ee02ab5c052f4a6 /src | |
| parent | 868b906e8af275a7121b59bb186c06602e9d8af4 (diff) | |
| download | vyos1x-config-dd126f493e01968c8f4c7f4c420f31ecc599c242.tar.gz vyos1x-config-dd126f493e01968c8f4c7f4c420f31ecc599c242.zip | |
T7694: insert paths lexico-numerically in config_tree set
This enforces lexico-numerical order on insertion of new paths/tag-node
values.
Diffstat (limited to 'src')
| -rw-r--r-- | src/config_tree.ml | 2 | ||||
| -rw-r--r-- | src/vytree.ml | 6 | ||||
| -rw-r--r-- | src/vytree.mli | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/src/config_tree.ml b/src/config_tree.ml index 4d0f5df..ed15b0e 100644 --- a/src/config_tree.ml +++ b/src/config_tree.ml @@ -72,7 +72,7 @@ let set node path value behaviour = let path_remaining = Vylist.complement path path_existing in let values = match value with None -> [] | Some v -> [v] in let end_data = {default_data with values=values; leaf=true} in - Vytree.insert_multi_level default_data node path_existing path_remaining end_data + Vytree.insert_multi_level ~position:Lexical default_data node path_existing path_remaining end_data let get_values node path = let node' = Vytree.get node path in diff --git a/src/vytree.ml b/src/vytree.ml index dec1666..0f6e24a 100644 --- a/src/vytree.ml +++ b/src/vytree.ml @@ -142,13 +142,13 @@ let merge_children merge_data cmp node = (* When inserting at a path that, entirely or partially, does not exist yet, create missing nodes on the way with default data *) -let rec insert_multi_level default_data node path_done path_remaining data = +let rec insert_multi_level ?(position=Default) default_data node path_done path_remaining data = match path_remaining with | [] | [_] -> insert node (path_done @ path_remaining) data | name :: names -> let path_done = path_done @ [name] in - let node = insert node path_done default_data in - insert_multi_level default_data node path_done names data + let node = insert ~position:position node path_done default_data in + insert_multi_level ~position:position default_data node path_done names data let delete node path = do_with_child delete_immediate node path diff --git a/src/vytree.mli b/src/vytree.mli index 9839728..cce169c 100644 --- a/src/vytree.mli +++ b/src/vytree.mli @@ -27,7 +27,7 @@ val insert_maybe : ?position:position -> 'a t -> string list -> 'a -> 'a t val insert_or_update : ?position:position -> 'a t -> string list -> 'a -> 'a t -val insert_multi_level : 'a -> 'a t -> string list -> string list -> 'a -> 'a t +val insert_multi_level : ?position:position -> 'a -> 'a t -> string list -> string list -> 'a -> 'a t val merge_children : ('a -> 'a -> 'a) -> (string -> string -> int) -> 'a t -> 'a t |
