diff options
author | John Estabrook <jestabro@vyos.io> | 2022-02-27 10:05:40 -0600 |
---|---|---|
committer | John Estabrook <jestabro@vyos.io> | 2022-02-28 13:42:24 -0600 |
commit | 193cbd15ba39a41614c63b997e6a62254589158a (patch) | |
tree | aa66b973c9b61ec2818d9368c50b0343fdf4f0d1 /python | |
parent | 4625fd41f99ddf77c104a657cd90a1ddf5449dd8 (diff) | |
download | vyos-1x-193cbd15ba39a41614c63b997e6a62254589158a.tar.gz vyos-1x-193cbd15ba39a41614c63b997e6a62254589158a.zip |
configtree: T4235: distinguish sub(-tract) tree from delete tree
The DiffTree class maintains both the 'sub'(-tract) configtree,
containing all paths in the LHS of the comparison that are not in the
RHS, and the 'delete' configtree: the delete tree is the minimal subtree
containing only the first node of a path not present in the RHS. It is
the delete tree that is needed to produce 'delete' commands for config
mode, whereas the 'sub' tree contains full information, needed for
recursively detecting changes to a node.
Diffstat (limited to 'python')
-rw-r--r-- | python/vyos/configtree.py | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py index 5ba829a4c..e9cdb69e4 100644 --- a/python/vyos/configtree.py +++ b/python/vyos/configtree.py @@ -326,8 +326,13 @@ class DiffTree: self.__diff_tree.argtypes = [c_char_p, c_void_p, c_void_p] self.__diff_tree.restype = c_void_p + self.__trim_tree = self.__lib.trim_tree + self.__trim_tree.argtypes = [c_void_p, c_void_p] + self.__trim_tree.restype = c_void_p + check_path(path) path_str = " ".join(map(str, path)).encode() + res = self.__diff_tree(path_str, left._get_config(), right._get_config()) # full diff config_tree and python dict representation @@ -336,9 +341,14 @@ class DiffTree: # config_tree sub-trees self.add = self.full.get_subtree(['add']) - self.delete = self.full.get_subtree(['delete']) + self.sub = self.full.get_subtree(['sub']) self.inter = self.full.get_subtree(['inter']) + # trim sub(-tract) tree to get delete tree for commands + ref = self.right.get_subtree(path, with_node=True) if path else self.right + res = self.__trim_tree(self.sub._get_config(), ref._get_config()) + self.delete = ConfigTree(address=res) + def to_commands(self): add = self.add.to_commands() delete = self.delete.to_commands(op="delete") |