Anchor dependency preparation to checkout root

This commit is contained in:
2026-11-01 21:12:05 +00:00
parent b47202a2e9
commit 5aba4c6c87
4 changed files with 83 additions and 8 deletions

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"strings"
"go.maximumdirect.net/releasekit/internal/git"
internalpreparation "go.maximumdirect.net/releasekit/internal/preparation"
"go.maximumdirect.net/releasekit/internal/releaseidentity"
)
@@ -37,11 +38,13 @@ func PrepareTaggedCheckout(ctx context.Context, request TaggedCheckoutRequest) e
}
// DependencyPreparationRequest selects the repository module whose dependencies
// should be prepared.
// should be prepared. Within a checkout, RepositoryDir may name any directory
// in it; ModuleDir is resolved from the checkout root. Outside a checkout,
// ModuleDir is resolved from RepositoryDir.
type DependencyPreparationRequest struct {
RepositoryDir string
// ModuleDir selects a repository-relative module directory; empty selects
// the repository root.
// ModuleDir selects a directory relative to the checkout root or standalone
// RepositoryDir; empty selects that base.
ModuleDir string
}
@@ -55,7 +58,15 @@ func PrepareBuildDependencies(ctx context.Context, request DependencyPreparation
if strings.TrimSpace(request.RepositoryDir) == "" {
return errors.New("repository directory is required")
}
selection, err := releaseidentity.ResolveSelection(request.RepositoryDir, request.ModuleDir)
base := request.RepositoryDir
root, found, err := git.DiscoverRepositoryRoot(ctx, base)
if err != nil {
return fmt.Errorf("discover dependency preparation repository: %w", err)
}
if found {
base = root
}
selection, err := releaseidentity.ResolveSelection(base, request.ModuleDir)
if err != nil {
return fmt.Errorf("resolve dependency preparation module: %w", err)
}