68 lines
2 KiB
Go
68 lines
2 KiB
Go
|
// SPDX-FileCopyrightText: 2023 Luke Granger-Brown <depot@lukegb.com>
|
||
|
//
|
||
|
// SPDX-License-Identifier: Apache-2.0
|
||
|
|
||
|
package nixbuild
|
||
|
|
||
|
type State int
|
||
|
|
||
|
const (
|
||
|
// Does this path (or path(s)) exist on the target already?
|
||
|
StateCheckingOnTarget State = iota
|
||
|
StateDoneAlreadyExisted
|
||
|
|
||
|
StateResolvingOnTarget
|
||
|
StateDoneResolvedOnTarget
|
||
|
|
||
|
// Does this path exist in any configured resolvers?
|
||
|
StateCheckingResolvers
|
||
|
StateFetchingReferencesFromResolvers
|
||
|
StateFetchingFromResolver
|
||
|
StateDoneFromResolver
|
||
|
|
||
|
// If we don't have the derivation for this path, fetch it.
|
||
|
// This state only matters if we only have the path and not the derivation.
|
||
|
StateLookingUpDerivation
|
||
|
StateChoosingBuilder
|
||
|
StateResolvingReferencesOnBuilder
|
||
|
StateCopyingReferencesToBuilder
|
||
|
StateBuildingDerivation
|
||
|
StateCopying
|
||
|
StateDoneBuilt
|
||
|
|
||
|
StateFailed
|
||
|
)
|
||
|
|
||
|
func (s State) String() string {
|
||
|
return map[State]string{
|
||
|
StateCheckingOnTarget: "checking if already on target",
|
||
|
StateDoneAlreadyExisted: "done (already on target)",
|
||
|
|
||
|
StateResolvingOnTarget: "resolving on target",
|
||
|
StateDoneResolvedOnTarget: "done (resolved on target)",
|
||
|
|
||
|
StateCheckingResolvers: "checking if present on any resolvers",
|
||
|
StateFetchingReferencesFromResolvers: "copying references from resolvers",
|
||
|
StateFetchingFromResolver: "copying from resolver",
|
||
|
StateDoneFromResolver: "done (copied from resolver)",
|
||
|
|
||
|
StateLookingUpDerivation: "looking up derivation",
|
||
|
StateChoosingBuilder: "picking a builder",
|
||
|
StateResolvingReferencesOnBuilder: "resolving build-time references on builder",
|
||
|
StateCopyingReferencesToBuilder: "copying build-time references to builder",
|
||
|
StateBuildingDerivation: "building",
|
||
|
StateCopying: "copying from builder",
|
||
|
StateDoneBuilt: "done (built)",
|
||
|
|
||
|
StateFailed: "failed :(",
|
||
|
}[s]
|
||
|
}
|
||
|
|
||
|
func (s State) Terminal() bool {
|
||
|
switch s {
|
||
|
case StateDoneAlreadyExisted, StateDoneResolvedOnTarget, StateDoneFromResolver, StateDoneBuilt, StateFailed:
|
||
|
return true
|
||
|
}
|
||
|
return false
|
||
|
}
|