diff --git a/pkgs/clan-cli/clan_cli/vars/set.py b/pkgs/clan-cli/clan_cli/vars/set.py index 89681f0b7..b6f51337a 100644 --- a/pkgs/clan-cli/clan_cli/vars/set.py +++ b/pkgs/clan-cli/clan_cli/vars/set.py @@ -4,6 +4,7 @@ import sys from clan_cli.clan_uri import FlakeId from clan_cli.completions import add_dynamic_completer, complete_machines +from clan_cli.git import commit_files from clan_cli.machines.machines import Machine from clan_cli.vars.get import get_var from clan_cli.vars.prompt import PromptType @@ -25,7 +26,13 @@ def set_var( _var = get_var(_machine, var) else: _var = var - _var.set(value) + path = _var.set(value) + if path: + commit_files( + [path], + _machine.flake_dir, + f"Update var {_var.id} for machine {_machine.name}", + ) def set_via_stdin(machine: str, var_id: str, flake: FlakeId) -> None: diff --git a/pkgs/clan-cli/clan_cli/vars/var.py b/pkgs/clan-cli/clan_cli/vars/var.py index 74324a406..f6030da53 100644 --- a/pkgs/clan-cli/clan_cli/vars/var.py +++ b/pkgs/clan-cli/clan_cli/vars/var.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from pathlib import Path from typing import TYPE_CHECKING, Any if TYPE_CHECKING: @@ -45,10 +46,10 @@ class Var: except UnicodeDecodeError: return "" - def set(self, value: bytes) -> None: + def set(self, value: bytes) -> Path | None: assert self._store is not None assert self._generator is not None - self._store.set(self._generator, self, value) + return self._store.set(self._generator, self, value) @property def exists(self) -> bool: diff --git a/pkgs/clan-cli/tests/test_vars.py b/pkgs/clan-cli/tests/test_vars.py index 966762aa9..517548c1a 100644 --- a/pkgs/clan-cli/tests/test_vars.py +++ b/pkgs/clan-cli/tests/test_vars.py @@ -766,6 +766,17 @@ def test_commit_message( commit_message == "Update vars via generator my_secret_generator for machine my_machine" ) + # ensure `clan vars set` also sets a reasonable commit message + set_var( + "my_machine", + "my_generator/my_value", + b"world", + FlakeId(str(flake.path)), + ) + commit_message = run( + ["git", "log", "-1", "--pretty=%B"], + ).stdout.strip() + assert all(x in commit_message for x in ["Update var", "my_generator", "my_value"]) @pytest.mark.with_core