nixbuild/cmd/nix-tool/resolve.go

37 lines
1.0 KiB
Go

package main
import (
"fmt"
"log"
"slices"
"gensokyo.uk/nix"
)
func buildAndResolve(ctx nix.Context, name string, installable *string, collective *[]string, flagNixOS bool, args []string) error {
if err := formatInstallable(name, installable, flagNixOS, args); err != nil {
return err
}
log.Printf("evaluating %q...", *installable)
var installables []string
if v, err := nix.EvalInstantiated(ctx, *installable); err != nil {
return commandHandlerError(fmt.Sprintf("cannot evaluate: %v", err))
} else {
installables = v
}
log.Println("building instantiated derivations...")
if err := nix.Build(ctx, slices.Values(installables)); err != nil {
return commandHandlerError(fmt.Sprintf("cannot build: %v", err))
}
log.Println("collecting store paths...")
if derivations, err := nix.DerivationShow(ctx, slices.Values(installables)); err != nil {
return commandHandlerError(fmt.Sprintf("cannot get derivations: %v", err))
} else {
*collective = nix.CollectFromDerivations(derivations)
return nil
}
}