Merge pull request 'better_select_output' (#4213) from better_select_output into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4213
This commit is contained in:
@@ -290,6 +290,7 @@ class RunOpts:
|
|||||||
# Ask for sudo password in a graphical way.
|
# Ask for sudo password in a graphical way.
|
||||||
# This is needed for GUI applications
|
# This is needed for GUI applications
|
||||||
graphical_perm: bool = False
|
graphical_perm: bool = False
|
||||||
|
trace: bool = True
|
||||||
|
|
||||||
|
|
||||||
def cmd_with_root(cmd: list[str], graphical: bool = False) -> list[str]:
|
def cmd_with_root(cmd: list[str], graphical: bool = False) -> list[str]:
|
||||||
@@ -344,7 +345,7 @@ def run(
|
|||||||
# Use our sudo ask proxy here as well
|
# Use our sudo ask proxy here as well
|
||||||
options.needs_user_terminal = True
|
options.needs_user_terminal = True
|
||||||
|
|
||||||
if cmdlog.isEnabledFor(logging.DEBUG):
|
if cmdlog.isEnabledFor(logging.DEBUG) and options.trace:
|
||||||
if options.input and isinstance(options.input, bytes):
|
if options.input and isinstance(options.input, bytes):
|
||||||
if any(
|
if any(
|
||||||
not ch.isprintable() for ch in options.input.decode("ascii", "replace")
|
not ch.isprintable() for ch in options.input.decode("ascii", "replace")
|
||||||
|
|||||||
@@ -621,7 +621,9 @@ class Flake:
|
|||||||
return self._is_local
|
return self._is_local
|
||||||
|
|
||||||
def get_input_names(self) -> list[str]:
|
def get_input_names(self) -> list[str]:
|
||||||
return self.select("inputs", apply="builtins.attrNames")
|
log.debug("flake.get_input_names is deprecated and will be removed")
|
||||||
|
flakes = self.select("inputs.*._type")
|
||||||
|
return list(flakes.keys())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path(self) -> Path:
|
def path(self) -> Path:
|
||||||
@@ -710,7 +712,6 @@ class Flake:
|
|||||||
def get_from_nix(
|
def get_from_nix(
|
||||||
self,
|
self,
|
||||||
selectors: list[str],
|
selectors: list[str],
|
||||||
apply: str = "v: v",
|
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Retrieves specific attributes from a Nix flake using the provided selectors.
|
Retrieves specific attributes from a Nix flake using the provided selectors.
|
||||||
@@ -729,7 +730,7 @@ class Flake:
|
|||||||
ClanError: If the number of outputs does not match the number of selectors.
|
ClanError: If the number of outputs does not match the number of selectors.
|
||||||
AssertionError: If the cache or flake cache path is not properly initialized.
|
AssertionError: If the cache or flake cache path is not properly initialized.
|
||||||
"""
|
"""
|
||||||
from clan_lib.cmd import Log, RunOpts, run
|
from clan_lib.cmd import run, RunOpts, Log
|
||||||
from clan_lib.dirs import select_source
|
from clan_lib.dirs import select_source
|
||||||
from clan_lib.nix import (
|
from clan_lib.nix import (
|
||||||
nix_build,
|
nix_build,
|
||||||
@@ -772,7 +773,7 @@ class Flake:
|
|||||||
result = builtins.toJSON [
|
result = builtins.toJSON [
|
||||||
{" ".join(
|
{" ".join(
|
||||||
[
|
[
|
||||||
f"(({apply}) (selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake))"
|
f"(selectLib.applySelectors (builtins.fromJSON ''{attr}'') flake)"
|
||||||
for attr in str_selectors
|
for attr in str_selectors
|
||||||
]
|
]
|
||||||
)}
|
)}
|
||||||
@@ -795,11 +796,38 @@ class Flake:
|
|||||||
];
|
];
|
||||||
}}
|
}}
|
||||||
"""
|
"""
|
||||||
|
if len(selectors) > 1:
|
||||||
|
log.debug(f"""
|
||||||
|
selecting: {selectors}
|
||||||
|
to debug run:
|
||||||
|
nix repl --expr 'rec {{
|
||||||
|
flake = builtins.getFlake "self.identifier";
|
||||||
|
selectLib = (builtins.getFlake "path:{select_source()}?narHash={select_hash}").lib;
|
||||||
|
query = [
|
||||||
|
{" ".join(
|
||||||
|
[
|
||||||
|
f"(selectLib.select ''{selector}'' flake)"
|
||||||
|
for selector in selectors
|
||||||
|
]
|
||||||
|
)}
|
||||||
|
];
|
||||||
|
}}'
|
||||||
|
""")
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
elif len(selectors) == 1:
|
||||||
|
log.debug(f"""
|
||||||
|
selecting: {selectors[0]}
|
||||||
|
to debug run:
|
||||||
|
nix repl --expr 'rec {{
|
||||||
|
flake = builtins.getFlake "{self.identifier}";
|
||||||
|
selectLib = (builtins.getFlake "path:{select_source()}?narHash={select_hash}").lib;
|
||||||
|
query = selectLib.select '"''{selectors[0]}''"' flake;
|
||||||
|
}}'
|
||||||
|
""")
|
||||||
|
|
||||||
build_output = Path(
|
build_output = Path(
|
||||||
run(
|
run(
|
||||||
nix_build(["--expr", nix_code, *nix_options]), RunOpts(log=Log.NONE)
|
nix_build(["--expr", nix_code, *nix_options]), RunOpts(log=Log.NONE, trace=False),
|
||||||
).stdout.strip()
|
).stdout.strip()
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -840,7 +868,6 @@ class Flake:
|
|||||||
def select(
|
def select(
|
||||||
self,
|
self,
|
||||||
selector: str,
|
selector: str,
|
||||||
apply: str = "v: v",
|
|
||||||
) -> Any:
|
) -> Any:
|
||||||
"""
|
"""
|
||||||
Selects a value from the cache based on the provided selector string.
|
Selects a value from the cache based on the provided selector string.
|
||||||
@@ -856,6 +883,6 @@ class Flake:
|
|||||||
|
|
||||||
if not self._cache.is_cached(selector):
|
if not self._cache.is_cached(selector):
|
||||||
log.debug(f"Cache miss for {selector}")
|
log.debug(f"Cache miss for {selector}")
|
||||||
self.get_from_nix([selector], apply=apply)
|
self.get_from_nix([selector])
|
||||||
value = self._cache.select(selector)
|
value = self._cache.select(selector)
|
||||||
return value
|
return value
|
||||||
|
|||||||
Reference in New Issue
Block a user