From 7ab8d86396cf84cfeedae086f261b9596691d748 Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Sun, 08 Feb 2026 01:15:14 +0000
Subject: [PATCH] Try to allow vcs rebuilds

---
 src/archrepobuild/builder.py |   28 +++++++++++++++++++++++-----
 1 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/archbuild/builder.py b/src/archrepobuild/builder.py
similarity index 93%
rename from src/archbuild/builder.py
rename to src/archrepobuild/builder.py
index 597f495..dea86f9 100644
--- a/src/archbuild/builder.py
+++ b/src/archrepobuild/builder.py
@@ -12,10 +12,10 @@
 from concurrent.futures import ProcessPoolExecutor
 from typing import Any
 
-from archbuild.aur import AURClient
-from archbuild.config import Config, PackageOverride
-from archbuild.logging import get_logger
-from archbuild.resolver import DependencyResolver
+from archrepobuild.aur import AURClient
+from archrepobuild.config import Config, PackageOverride
+from archrepobuild.logging import get_logger
+from archrepobuild.resolver import DependencyResolver
 
 logger = get_logger("builder")
 
@@ -76,6 +76,7 @@
     sign: bool = False,
     key: str = "",
     clean: bool = True,
+    force: bool = False,
     skip_checksums: bool = False,
     extra_args: list[str] | None = None,
     env_overrides: dict[str, str] | None = None,
@@ -102,6 +103,8 @@
         cmd.append("-c")
     if sign and key:
         cmd.extend(["--sign", "--key", key])
+    if force:
+        cmd.append("-f")
     if skip_checksums:
         cmd.append("--skipchecksums")
     if extra_args:
@@ -122,7 +125,14 @@
         )
 
         if result.returncode != 0:
-            return False, result.stderr or result.stdout, []
+            error = result.stderr or result.stdout
+            if "A package has already been built" in error:
+                logger.info("Package already built, treating as success")
+                # Find built packages anyway
+                artifacts = list(package_dir.glob("*.pkg.tar.*"))
+                artifacts = [a for a in artifacts if not a.name.endswith(".sig")]
+                return True, "", artifacts
+            return False, error, []
 
         # Find built packages
         artifacts = list(package_dir.glob("*.pkg.tar.*"))
@@ -318,6 +328,7 @@
                     self.config.signing.enabled,
                     self.config.signing.key,
                     self.config.building.clean,
+                    force or is_vcs,
                     override.skip_checksums,
                     override.extra_args,
                     override.env,
@@ -421,6 +432,13 @@
         # Resolve dependencies
         build_order = await self.resolver.resolve([package])
 
+        if package not in build_order.packages:
+            logger.info(f"Package {package} does not need to be built")
+            return BuildResult(
+                package=package,
+                status=BuildStatus.SKIPPED,
+            )
+
         # Build dependencies first
         results: list[BuildResult] = []
         for dep in build_order:

--
Gitblit v1.10.0