| | |
| | | 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 |
| | |
| | | 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) |
| | |
| | | |
| | | 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 |
| | | 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") |