128 lines
4.4 KiB
Diff
128 lines
4.4 KiB
Diff
diff --git a/nix_update/__init__.py b/nix_update/__init__.py
|
|
index 89bbe45..93f9322 100644
|
|
--- a/nix_update/__init__.py
|
|
+++ b/nix_update/__init__.py
|
|
@@ -124,6 +124,12 @@ def parse_args(args: list[str]) -> Options:
|
|
default=[],
|
|
)
|
|
|
|
+ parser.add_argument(
|
|
+ "--src-attr",
|
|
+ help="Src attribute",
|
|
+ default="src",
|
|
+ )
|
|
+
|
|
a = parser.parse_args(args)
|
|
extra_flags = ["--extra-experimental-features", "flakes nix-command"]
|
|
if a.system:
|
|
@@ -146,6 +152,7 @@ def parse_args(args: list[str]) -> Options:
|
|
version=a.version,
|
|
version_preference=VersionPreference.from_str(a.version),
|
|
attribute=a.attribute,
|
|
+ source_attribute=a.src_attr,
|
|
test=a.test,
|
|
version_regex=a.version_regex,
|
|
review=a.review,
|
|
diff --git a/nix_update/eval.py b/nix_update/eval.py
|
|
index 1767056..f85ea69 100644
|
|
--- a/nix_update/eval.py
|
|
+++ b/nix_update/eval.py
|
|
@@ -105,12 +105,19 @@ class Package:
|
|
def eval_expression(
|
|
escaped_import_path: str,
|
|
attr: str,
|
|
+ source_attr: str,
|
|
flake: bool,
|
|
system: str | None,
|
|
override_filename: str | None,
|
|
) -> str:
|
|
system = f'"{system}"' if system else "builtins.currentSystem"
|
|
|
|
+ source_attrs = source_attr.rpartition(".")
|
|
+ source_attr_last = source_attrs[-1] or source_attr
|
|
+ source_attr_all_but_last = (
|
|
+ f".{source_attrs[0]}" if source_attr_last != source_attr else ""
|
|
+ )
|
|
+
|
|
if flake:
|
|
sanitize_position = (
|
|
f"""
|
|
@@ -164,8 +171,8 @@ let
|
|
raw_version_position
|
|
else if pkg ? isPhpExtension then
|
|
raw_version_position
|
|
- else if (builtins.unsafeGetAttrPos "src" pkg) != null then
|
|
- sanitizePosition (builtins.unsafeGetAttrPos "src" pkg)
|
|
+ else if (builtins.unsafeGetAttrPos "{source_attr_last}" pkg) != null then
|
|
+ sanitizePosition (builtins.unsafeGetAttrPos "{source_attr_last}" pkg{source_attr_all_but_last})
|
|
else
|
|
sanitizePosition (positionFromMeta pkg);
|
|
in {{
|
|
@@ -174,11 +181,11 @@ in {{
|
|
inherit raw_version_position;
|
|
filename = position.file;
|
|
line = position.line;
|
|
- urls = pkg.src.urls or null;
|
|
- url = pkg.src.url or null;
|
|
- rev = pkg.src.rev or null;
|
|
- tag = pkg.src.tag or null;
|
|
- hash = pkg.src.outputHash or null;
|
|
+ urls = pkg.{source_attr}.urls or null;
|
|
+ url = pkg.{source_attr}.url or null;
|
|
+ rev = pkg.{source_attr}.rev or null;
|
|
+ tag = pkg.{source_attr}.tag or null;
|
|
+ hash = pkg.{source_attr}.outputHash or null;
|
|
go_modules = pkg.goModules.outputHash or null;
|
|
go_modules_old = pkg.go-modules.outputHash or null;
|
|
cargo_deps = pkg.cargoDeps.outputHash or null;
|
|
@@ -205,7 +212,7 @@ in {{
|
|
mix_deps = pkg.mixFodDeps.outputHash or null;
|
|
tests = builtins.attrNames (pkg.passthru.tests or {{}});
|
|
has_update_script = {has_update_script};
|
|
- src_homepage = pkg.src.meta.homepage or null;
|
|
+ src_homepage = pkg.{source_attr}.meta.homepage or null;
|
|
changelog = pkg.meta.changelog or null;
|
|
maintainers = pkg.meta.maintainers or null;
|
|
}}"""
|
|
@@ -215,6 +222,7 @@ def eval_attr(opts: Options) -> Package:
|
|
expr = eval_expression(
|
|
opts.escaped_import_path,
|
|
opts.escaped_attribute,
|
|
+ opts.source_attribute,
|
|
opts.flake,
|
|
opts.system,
|
|
opts.override_filename,
|
|
diff --git a/nix_update/options.py b/nix_update/options.py
|
|
index 2d07b77..ab5c305 100644
|
|
--- a/nix_update/options.py
|
|
+++ b/nix_update/options.py
|
|
@@ -8,6 +8,7 @@ from .version.version import VersionPreference
|
|
@dataclass
|
|
class Options:
|
|
attribute: str
|
|
+ source_attribute: str = "src"
|
|
flake: bool = False
|
|
version: str = "stable"
|
|
version_preference: VersionPreference = VersionPreference.STABLE
|
|
@@ -33,4 +34,7 @@ class Options:
|
|
|
|
def __post_init__(self) -> None:
|
|
self.escaped_attribute = ".".join(map(json.dumps, self.attribute.split(".")))
|
|
+ self.escaped_source_attribute = ".".join(
|
|
+ map(json.dumps, self.source_attribute.split("."))
|
|
+ )
|
|
self.escaped_import_path = json.dumps(self.import_path)
|
|
diff --git a/nix_update/update.py b/nix_update/update.py
|
|
index 82b7bc5..464bf3d 100644
|
|
--- a/nix_update/update.py
|
|
+++ b/nix_update/update.py
|
|
@@ -155,7 +155,7 @@ def git_prefetch(x: tuple[str, tuple[str, str]]) -> tuple[str, str]:
|
|
|
|
|
|
def update_src_hash(opts: Options, filename: str, current_hash: str) -> None:
|
|
- target_hash = nix_prefetch(opts, "src")
|
|
+ target_hash = nix_prefetch(opts, opts.source_attribute)
|
|
replace_hash(filename, current_hash, target_hash)
|
|
|
|
|