From a1e1d94d1cc00a63fbd882faf8db2b869a338f27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20K=C3=B6pcke?= Date: Tue, 11 Aug 2026 08:32:12 +0200 Subject: [PATCH] jetbrains.*: updater: update for by-name migration --- .../updater/jetbrains_nix_updater/config.py | 2 + .../updater/jetbrains_nix_updater/ides.py | 48 ++++++++----------- .../jetbrains_nix_updater/update_src.py | 20 ++++---- .../updater/jetbrains_nix_updater/util.py | 5 ++ .../editors/jetbrains/updater/main.py | 7 ++- 5 files changed, 42 insertions(+), 40 deletions(-) diff --git a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py index d2c202c13fcf..0b12e261742b 100644 --- a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py +++ b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/config.py @@ -24,6 +24,7 @@ class UpdaterConfig: no_bin: bool no_src: bool no_maven_deps: bool + dry_run: bool def __init__(self, argparse_result): self.nixpkgs_root = ( @@ -47,3 +48,4 @@ class UpdaterConfig: self.no_bin = argparse_result.no_bin self.no_src = argparse_result.no_src self.no_maven_deps = argparse_result.no_maven_deps + self.dry_run = argparse_result.dry_run diff --git a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/ides.py b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/ides.py index bbe68b3a7d2f..4abfdde4c8d4 100644 --- a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/ides.py +++ b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/ides.py @@ -22,43 +22,33 @@ class Ide: update_info: UpdateInfo | None -def is_source_ide(drv_path: Path): - assert " " not in str(drv_path) - try: - return ( - run_command( - [ - "nix-instantiate", - "--eval", - "-E", - f'builtins.hasAttr "mkJetBrainsSource" (builtins.functionArgs (import {drv_path}))', - ] - ) - == "true" - ) - except CalledProcessError as ex: - print(f"Failed to eval {drv_path}: {ex.stderr}", file=sys.stderr) - exit(1) +def by_name_path(ide_name: str, nixpkgs_root: Path) -> Path: + by_name_stem = ide_name[0:2] + return nixpkgs_root / "pkgs" / "by-name" / by_name_stem / ide_name -def get_single_ide(update_info: dict[str, UpdateInfo], jb_root: Path, name: str) -> Ide: - drv_path = jb_root / "ides" / f"{name}.nix" +def is_source_ide(ide_name: str): + return ide_name.endswith("-oss") + + +def get_single_ide(update_info: dict[str, UpdateInfo], nixpkgs_root: Path, name: str) -> Ide: + drv_path = by_name_path(name, nixpkgs_root) / "package.nix" if not drv_path.exists(): raise Exception(f"IDE not found at {drv_path}") return Ide( name=name, drv_path=drv_path, - is_source=is_source_ide(drv_path), + is_source=is_source_ide(name), update_info=update_info.get(name), ) -def get_all_ides(update_info: dict[str, UpdateInfo], jb_root: Path) -> Iterable[Ide]: - for file in sorted((jb_root / "ides").iterdir()): - if file.suffix == ".nix": - yield Ide( - name=file.stem, - drv_path=file, - is_source=is_source_ide(file), - update_info=update_info.get(file.stem), - ) +def get_all_ides(update_info: dict[str, UpdateInfo], nixpkgs_root: Path) -> Iterable[Ide]: + for name, update_info in update_info.items(): + drv_path = by_name_path(name, nixpkgs_root) / "package.nix" + yield Ide( + name=name, + drv_path=drv_path, + is_source=is_source_ide(name), + update_info=update_info, + ) diff --git a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/update_src.py b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/update_src.py index f761a51034a3..205f9d5d8c6d 100644 --- a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/update_src.py +++ b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/update_src.py @@ -1,3 +1,4 @@ +import os.path import sys import json @@ -8,7 +9,7 @@ from subprocess import CalledProcessError from jetbrains_nix_updater.config import UpdaterConfig from jetbrains_nix_updater.fetcher import VersionInfo -from jetbrains_nix_updater.ides import Ide +from jetbrains_nix_updater.ides import Ide, by_name_path from jetbrains_nix_updater.update_src_maven import ( get_maven_deps_for_ide, ensure_is_list, @@ -148,10 +149,6 @@ def generate_jps_hash(config: UpdaterConfig, root_path: Path) -> str: ) -def maven_out_path(jb_root: Path, name: str) -> Path: - return jb_root / "source" / f"{name}_maven_artefacts.json" - - def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig) -> bool: variant = ide.name.removesuffix("-oss") try: @@ -194,7 +191,7 @@ def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig) -> bool: androidHash = "{android_hash}"; jpsHash = "{jps_hash}"; restarterHash = "{restarter_hash}"; - mvnDeps = ../source/{variant}_maven_artefacts.json; + mvnDeps = ./maven_artefacts.json; repositories = [ {repositories_nix} ]; @@ -213,7 +210,12 @@ def run_src_update(ide: Ide, info: VersionInfo, config: UpdaterConfig) -> bool: if not config.no_maven_deps: print("[*] Collecting maven hashes") maven_hashes = get_maven_deps_for_ide(config, ide) - with open(maven_out_path(config.jetbrains_root, variant), "w") as f: - json.dump(maven_hashes, f, indent=4) - f.write("\n") + maven_out_path = by_name_path(ide.name, config.nixpkgs_root) / "maven_artefacts.json" + if config.dry_run: + assert maven_out_path.parent.exists() + print(f"[D] --dry-run: {maven_out_path} not modified", file=sys.stderr) + else: + with open(maven_out_path, "w") as f: + json.dump(maven_hashes, f, indent=4) + f.write("\n") return True diff --git a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/util.py b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/util.py index 69a23a5a7263..c3bdcc226dcd 100644 --- a/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/util.py +++ b/pkgs/applications/editors/jetbrains/updater/jetbrains_nix_updater/util.py @@ -1,3 +1,4 @@ +import sys from typing import Iterable import subprocess @@ -45,6 +46,10 @@ def replace_blocks( with open(file, "r") as f: lines = f.readlines() + if config.dry_run: + print(f"[D] --dry-run: {file} not modified", file=sys.stderr) + return + for name, block in blocks: old_lines = lines lines = [] diff --git a/pkgs/applications/editors/jetbrains/updater/main.py b/pkgs/applications/editors/jetbrains/updater/main.py index 7a0ca904d396..4d8a0a9cd7ef 100755 --- a/pkgs/applications/editors/jetbrains/updater/main.py +++ b/pkgs/applications/editors/jetbrains/updater/main.py @@ -34,6 +34,9 @@ def main(): action="store_true", help="do not update maven dependencies for source IDEs", ) + parser.add_argument( + "--dry-run", action="store_true", help="do not change any files" + ) parser.add_argument( "--old-version", type=str, @@ -50,9 +53,9 @@ def main(): version_fetcher = VersionFetcher() ides_to_run_for = ( - [get_single_ide(update_info, config.jetbrains_root, config.ide)] + [get_single_ide(update_info, config.nixpkgs_root, config.ide)] if config.ide is not None - else list(get_all_ides(update_info, config.jetbrains_root)) + else list(get_all_ides(update_info, config.nixpkgs_root)) ) print(f"[.] found IDEs to update: {', '.join(ide.name for ide in ides_to_run_for)}")