From d9ee67300e901f2b5529cdc0dee41b93a39b1789 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Fri, 19 Dec 2025 09:31:07 -0600 Subject: [PATCH] nixpkgs-plugin-update: improve commit message generation Enhance commit messages to differentiate between single plugin updates and bulk updates. Single plugin updates now show version transitions (e.g., "vimPlugins.telescope-nvim: 1.0 -> 1.1"), while bulk updates use a date-based format. Signed-off-by: Austin Horstman --- .../src/nixpkgs_plugin_update/__init__.py | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/pkgs/development/python-modules/nixpkgs-plugin-update/nixpkgs-plugin-update/src/nixpkgs_plugin_update/__init__.py b/pkgs/development/python-modules/nixpkgs-plugin-update/nixpkgs-plugin-update/src/nixpkgs_plugin_update/__init__.py index 1ddf7f58f17b..0874e9e44f00 100644 --- a/pkgs/development/python-modules/nixpkgs-plugin-update/nixpkgs-plugin-update/src/nixpkgs_plugin_update/__init__.py +++ b/pkgs/development/python-modules/nixpkgs-plugin-update/nixpkgs-plugin-update/src/nixpkgs_plugin_update/__init__.py @@ -20,7 +20,7 @@ import urllib.parse import urllib.request import xml.etree.ElementTree as ET from dataclasses import asdict, dataclass -from datetime import UTC, datetime +from datetime import datetime, date from functools import wraps from multiprocessing.dummy import Pool from pathlib import Path @@ -749,7 +749,12 @@ class Editor: ] ) - def update() -> Redirects: + def update() -> tuple[Redirects, list[tuple[str, str, str]]]: + """ + Returns: + tuple of (redirects, updated_plugins) + where updated_plugins is [(name, old_version, new_version), ...] + """ if len(plugins_to_update) == 0: log.error( "\n\n\n\nIt seems like you provided some arguments to `--update`:\n" @@ -759,7 +764,7 @@ class Editor: "Are you sure you provided the same URIs as in your input file?\n" "(" + str(input_file) + ")\n\n" ) - return {} + return {}, [] try: pool = Pool(processes=config.proc) @@ -773,10 +778,25 @@ class Editor: results = self.merge_results(current_plugins, results) plugins, redirects = check_results(results) + # Track version changes for commit message generation + updated_plugins = [] + current_plugin_map = {p.normalized_name: p for _, p in current_plugins} + + for _, new_plugin in plugins: + old_plugin = current_plugin_map.get(new_plugin.normalized_name) + if old_plugin and old_plugin.version != new_plugin.version: + updated_plugins.append( + ( + new_plugin.normalized_name, + old_plugin.version, + new_plugin.version, + ) + ) + plugins = sorted(plugins, key=lambda v: v[1].normalized_name) self.generate_nix(plugins, output_file) - return redirects + return redirects, updated_plugins return update @@ -1192,19 +1212,25 @@ def update_plugins(editor: Editor, args): ) start_time = time.time() - redirects = update() + redirects, updated_plugins = update() duration = time.time() - start_time print(f"The plugin update took {duration:.2f}s.") editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, redirects) autocommit = not args.no_commit - if autocommit: + if autocommit and len(updated_plugins) > 0: try: repo = git.Repo(os.getcwd()) - updated = datetime.now(tz=UTC).strftime("%Y-%m-%d") + + if len(updated_plugins) == 1: + name, old_ver, new_ver = updated_plugins[0] + message = f"{editor.attr_path}.{name}: {old_ver} -> {new_ver}" + else: + message = f"{editor.attr_path}: update on {date.today()}" + print(args.outfile) - commit(repo, f"{editor.attr_path}: update on {updated}", [args.outfile]) + commit(repo, message, [args.outfile]) except git.InvalidGitRepositoryError as e: print(f"Not in a git repository: {e}", file=sys.stderr) sys.exit(1)