From ce77be2fb546f5bd67cc438c7dece3b10b8da056 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Tue, 03 Mar 2026 00:09:03 +0000
Subject: [PATCH] Allow rebuilding existing repo packages

---
 src/archrepobuild/builder.py |   17 ++++++++++-------
 1 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/archrepobuild/builder.py b/src/archrepobuild/builder.py
index 38ee9ac..dd96578 100644
--- a/src/archrepobuild/builder.py
+++ b/src/archrepobuild/builder.py
@@ -494,11 +494,12 @@
                 error=str(e),
             )
 
-    async def add_package(self, package: str) -> BuildResult:
+    async def add_package(self, package: str, include_repo: bool = False) -> BuildResult:
         """Add and build (or download) a new package with dependencies.
 
         Args:
             package: Package name
+            include_repo: Whether to check the managed repository for existing packages
 
         Returns:
             BuildResult for the main package
@@ -506,14 +507,15 @@
         logger.info(f"Adding package: {package}")
 
         # Resolve dependencies
-        build_order = await self.resolver.resolve([package])
+        exclude_repo = None if include_repo else self.config.repository.name
+        build_order = await self.resolver.resolve([package], exclude_repo=exclude_repo)
 
         # Filter build order: skip managed repo, download others, build AUR
         final_results: list[BuildResult] = []
         for pkg_name in build_order:
             repo = self.resolver.is_in_repos(pkg_name)
             
-            if repo == self.config.repository.name:
+            if include_repo and repo == self.config.repository.name:
                 logger.info(f"Package {pkg_name} already in managed repository, skipping")
                 if pkg_name == package:
                     return BuildResult(package=package, status=BuildStatus.SKIPPED)
@@ -530,10 +532,11 @@
 
             if result.status == BuildStatus.SUCCESS:
                 if self.repo:
-                    logger.info(f"Adding {pkg_name} to repository")
-                    self.repo.add_packages(result)
-                    # Refresh resolver cache to recognize the newly added package
-                    self.resolver._refresh_pacman_cache()
+                    added = self.repo.add_packages(result)
+                    if added:
+                        logger.info(f"Added to repository: {', '.join(added)}")
+                    # Refresh resolver cache to recognize the newly added packages
+                    self.resolver._refresh_pacman_cache(sync=True)
             elif result.status == BuildStatus.FAILED:
                 logger.error(f"Failed to process {pkg_name}, aborting")
                 if pkg_name == package:

--
Gitblit v1.10.0