Don't allow .enroll.ini in CWD, rely on env var or XDG path

This commit is contained in:
Miguel Jacq 2026-06-22 09:52:33 +10:00
parent 6ee8c60e64
commit a85e8265f4
Signed by: mig5
GPG key ID: 03906B4110AAD3B8
3 changed files with 10 additions and 13 deletions

View file

@ -656,8 +656,8 @@ Enroll supports reading an ini-style file of all the arguments for each subcomma
### Location of the config file ### Location of the config file
The path the config file can be specified with `-c` or `--config` on the command-line. Otherwise, The path the config file can be specified with `-c` or `--config` on the command-line. Otherwise,
Enroll will look for `./enroll.ini`, `./.enroll.ini` (in the current working directory), Enroll will look for the `ENROLL_CONFIG` environment variable, `$XDG_CONFIG_HOME/enroll/enroll.ini`,
`~/.config/enroll/enroll.ini` (or `$XDG_CONFIG_HOME/enroll/enroll.ini`). or `~/.config/enroll/enroll.ini`.
You may also pass `--no-config` if you deliberately want to ignore the config file even if it existed. You may also pass `--no-config` if you deliberately want to ignore the config file even if it existed.

View file

@ -39,8 +39,10 @@ def _discover_config_path(argv: list[str]) -> Optional[Path]:
1) --no-config disables loading. 1) --no-config disables loading.
2) --config PATH (or -c PATH) 2) --config PATH (or -c PATH)
3) $ENROLL_CONFIG 3) $ENROLL_CONFIG
4) ./enroll.ini, ./.enroll.ini 4) $XDG_CONFIG_HOME/enroll/enroll.ini (or ~/.config/enroll/enroll.ini)
5) $XDG_CONFIG_HOME/enroll/enroll.ini (or ~/.config/enroll/enroll.ini)
Current-directory config files are deliberately not auto-loaded; use
--config ./enroll.ini if that behaviour is desired.
The config file is optional; if no file is found, returns None. The config file is optional; if no file is found, returns None.
""" """
@ -66,12 +68,6 @@ def _discover_config_path(argv: list[str]) -> Optional[Path]:
if envp: if envp:
return Path(envp).expanduser() return Path(envp).expanduser()
cwd = Path.cwd()
for name in ("enroll.ini", ".enroll.ini"):
cp = cwd / name
if cp.exists() and cp.is_file():
return cp
xdg = os.environ.get("XDG_CONFIG_HOME") xdg = os.environ.get("XDG_CONFIG_HOME")
if xdg: if xdg:
base = Path(xdg).expanduser() base = Path(xdg).expanduser()

View file

@ -23,10 +23,10 @@ def test_discover_config_path_precedence(monkeypatch, tmp_path: Path):
assert _discover_config_path(["harvest"]) == cfg assert _discover_config_path(["harvest"]) == cfg
def test_discover_config_path_finds_local_and_xdg(monkeypatch, tmp_path: Path): def test_discover_config_path_ignores_local_and_finds_xdg(monkeypatch, tmp_path: Path):
from enroll.cli import _discover_config_path from enroll.cli import _discover_config_path
# local file in cwd # local files in cwd are deliberately ignored unless passed via --config
cwd = tmp_path / "cwd" cwd = tmp_path / "cwd"
cwd.mkdir() cwd.mkdir()
local = cwd / "enroll.ini" local = cwd / "enroll.ini"
@ -35,7 +35,8 @@ def test_discover_config_path_finds_local_and_xdg(monkeypatch, tmp_path: Path):
monkeypatch.chdir(cwd) monkeypatch.chdir(cwd)
monkeypatch.delenv("ENROLL_CONFIG", raising=False) monkeypatch.delenv("ENROLL_CONFIG", raising=False)
monkeypatch.delenv("XDG_CONFIG_HOME", raising=False) monkeypatch.delenv("XDG_CONFIG_HOME", raising=False)
assert _discover_config_path(["harvest"]) == local assert _discover_config_path(["harvest"]) is None
assert _discover_config_path(["--config", str(local), "harvest"]) == local
# xdg config fallback # xdg config fallback
monkeypatch.chdir(tmp_path) monkeypatch.chdir(tmp_path)