Skip to content

Commit

Permalink
update source attributes other than src
Browse files Browse the repository at this point in the history
  • Loading branch information
Artturin committed Oct 17, 2023
1 parent da0b544 commit 0051631
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 9 deletions.
7 changes: 7 additions & 0 deletions nix_update/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ def parse_args(args: list[str]) -> Options:
help="Attribute name within the file evaluated",
)

parser.add_argument(
"--src-attr",
help="Src attribute",
default="src",
)

a = parser.parse_args(args)
return Options(
import_path=os.path.realpath(a.file),
Expand All @@ -101,6 +107,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,
Expand Down
30 changes: 22 additions & 8 deletions nix_update/eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,20 @@ def __post_init__(


def eval_expression(
escaped_import_path: str, attr: str, flake: bool, system: str | None
escaped_import_path: str,
attr: str,
source_attr: str,
flake: bool,
system: 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:
let_bindings = f"""
inherit (builtins) getFlake stringLength substring;
Expand Down Expand Up @@ -132,17 +142,17 @@ def eval_expression(
else if pkg ? isPhpExtension then
raw_version_position
else
sanitizePosition (builtins.unsafeGetAttrPos "src" pkg);
sanitizePosition (builtins.unsafeGetAttrPos "{source_attr_last}" pkg{source_attr_all_but_last});
in {{
name = pkg.name;
old_version = pkg.version or (builtins.parseDrvName pkg.name).version;
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;
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;
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;
Expand All @@ -161,14 +171,18 @@ def eval_expression(
yarn_deps = pkg.offlineCache.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;
}}"""


def eval_attr(opts: Options) -> Package:
expr = eval_expression(
opts.escaped_import_path, opts.escaped_attribute, opts.flake, opts.system
opts.escaped_import_path,
opts.escaped_attribute,
opts.source_attribute,
opts.flake,
opts.system,
)
cmd = [
"nix",
Expand Down
2 changes: 2 additions & 0 deletions nix_update/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
@dataclass
class Options:
attribute: str
source_attribute: str
flake: bool = False
version: str = "stable"
version_preference: VersionPreference = VersionPreference.STABLE
Expand All @@ -29,4 +30,5 @@ 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)
2 changes: 1 addition & 1 deletion nix_update/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,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)


Expand Down

0 comments on commit 0051631

Please sign in to comment.