Skip to content

Commit

Permalink
T6946: add wrapper for show_commit_data and test function
Browse files Browse the repository at this point in the history
  • Loading branch information
jestabro committed Feb 3, 2025
1 parent 1705416 commit d46f835
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 5 deletions.
10 changes: 5 additions & 5 deletions python/vyos/config_mgmt.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ def revert_soft(self) -> Tuple[str, int]:

# commits under commit-confirm are not added to revision list unless
# confirmed, hence a soft revert is to revision 0
revert_ct = self._get_config_tree_revision(0)
revert_ct = self.get_config_tree_revision(0)

message = '[commit-confirm] Reverting to previous config now'
os.system('wall -n ' + message)
Expand Down Expand Up @@ -351,7 +351,7 @@ def rollback_soft(self, rev: int):
)
return msg, 1

rollback_ct = self._get_config_tree_revision(rev)
rollback_ct = self.get_config_tree_revision(rev)
try:
load(rollback_ct, switch='explicit')
print('Rollback diff has been applied.')
Expand Down Expand Up @@ -382,15 +382,15 @@ def compare(
if rev1 is not None:
if not self._check_revision_number(rev1):
return f'Invalid revision number {rev1}', 1
ct1 = self._get_config_tree_revision(rev1)
ct1 = self.get_config_tree_revision(rev1)
ct2 = self.working_config
msg = f'No changes between working and revision {rev1} configurations.\n'
if rev2 is not None:
if not self._check_revision_number(rev2):
return f'Invalid revision number {rev2}', 1
# compare older to newer
ct2 = ct1
ct1 = self._get_config_tree_revision(rev2)
ct1 = self.get_config_tree_revision(rev2)
msg = f'No changes between revisions {rev2} and {rev1} configurations.\n'

out = ''
Expand Down Expand Up @@ -575,7 +575,7 @@ def _get_file_revision(self, rev: int):
r = f.read().decode()
return r

def _get_config_tree_revision(self, rev: int):
def get_config_tree_revision(self, rev: int):
c = self._get_file_revision(rev)
return ConfigTree(c)

Expand Down
16 changes: 16 additions & 0 deletions python/vyos/configtree.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,22 @@ def mask_inclusive(left, right, libpath=LIBPATH):
return tree


def show_commit_data(active_tree, proposed_tree, libpath=LIBPATH):
if not (
isinstance(active_tree, ConfigTree) and isinstance(proposed_tree, ConfigTree)
):
raise TypeError('Arguments must be instances of ConfigTree')

__lib = cdll.LoadLibrary(libpath)
__show_commit_data = __lib.show_commit_data
__show_commit_data.argtypes = [c_void_p, c_void_p]
__show_commit_data.restype = c_char_p

res = __show_commit_data(active_tree._get_config(), proposed_tree._get_config())

return res.decode()


def reference_tree_to_json(from_dir, to_file, internal_cache='', libpath=LIBPATH):
try:
__lib = cdll.LoadLibrary(libpath)
Expand Down
56 changes: 56 additions & 0 deletions src/helpers/show_commit_data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/usr/bin/env python3
#
# Copyright (C) 2025 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
# published by the Free Software Foundation.
#
# 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, see <http://www.gnu.org/licenses/>.
#
#
# This script is used to show the commit data of the configuration

import sys
from pathlib import Path
from argparse import ArgumentParser

from vyos.config_mgmt import ConfigMgmt
from vyos.configtree import ConfigTree
from vyos.configtree import show_commit_data

cm = ConfigMgmt()

parser = ArgumentParser(
description='Show commit priority queue; no options compares the last two commits'
)
parser.add_argument('--active-config', help='Path to the active configuration file')
parser.add_argument('--proposed-config', help='Path to the proposed configuration file')
args = parser.parse_args()

active_arg = args.active_config
proposed_arg = args.proposed_config

if active_arg and not proposed_arg:
print('--proposed-config is required when --active-config is specified')
sys.exit(1)

if not active_arg and not proposed_arg:
active = cm.get_config_tree_revision(1)
proposed = cm.get_config_tree_revision(0)
else:
if active_arg:
active = ConfigTree(Path(active_arg).read_text())
else:
active = cm.get_config_tree_revision(0)

proposed = ConfigTree(Path(proposed_arg).read_text())

ret = show_commit_data(active, proposed)
print(ret)

0 comments on commit d46f835

Please sign in to comment.