Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

T6946: add wrapper for show_commit_data and test function #4331

Draft
wants to merge 1 commit into
base: current
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
Loading