MCPcopy Create free account
hub / github.com/dagger/dagger / decodePersistedModTree

Function decodePersistedModTree

core/modtree.go:1066–1131  ·  view source on GitHub ↗
(ctx context.Context, dag *dagql.Server, tree persistedModTree)

Source from the content-addressed store, hash-verified

1064}
1065
1066func decodePersistedModTree(ctx context.Context, dag *dagql.Server, tree persistedModTree) (map[int]*ModTreeNode, error) {
1067 nodes := make(map[int]*ModTreeNode, len(tree.Nodes))
1068 serverByModuleID := map[uint64]*dagql.Server{}
1069
1070 for _, persisted := range tree.Nodes {
1071 if persisted.ID == 0 {
1072 return nil, fmt.Errorf("decode persisted mod tree: zero node ID")
1073 }
1074 if _, exists := nodes[persisted.ID]; exists {
1075 return nil, fmt.Errorf("decode persisted mod tree: duplicate node ID %d", persisted.ID)
1076 }
1077
1078 node := &ModTreeNode{
1079 Name: persisted.Name,
1080 Description: persisted.Description,
1081 IsCheck: persisted.IsCheck,
1082 IsGenerator: persisted.IsGenerator,
1083 IsUp: persisted.IsUp,
1084 }
1085 if persisted.ModuleResultID != 0 {
1086 module, err := loadPersistedObjectResultByResultID[*Module](ctx, dag, persisted.ModuleResultID, "mod tree module")
1087 if err != nil {
1088 return nil, err
1089 }
1090 node.Module = module
1091 if srv, ok := serverByModuleID[persisted.ModuleResultID]; ok {
1092 node.DagqlServer = srv
1093 } else {
1094 srv, err := dagqlServerForModule(ctx, module)
1095 if err != nil {
1096 return nil, fmt.Errorf("decode persisted mod tree server for module %d: %w", persisted.ModuleResultID, err)
1097 }
1098 serverByModuleID[persisted.ModuleResultID] = srv
1099 node.DagqlServer = srv
1100 }
1101 }
1102 if persisted.OriginalModuleResultID != 0 {
1103 originalModule, err := loadPersistedObjectResultByResultID[*Module](ctx, dag, persisted.OriginalModuleResultID, "mod tree original module")
1104 if err != nil {
1105 return nil, err
1106 }
1107 node.OriginalModule = originalModule
1108 }
1109 if persisted.TypeResultID != 0 {
1110 typeDef, err := loadPersistedObjectResultByResultID[*TypeDef](ctx, dag, persisted.TypeResultID, "mod tree typedef")
1111 if err != nil {
1112 return nil, err
1113 }
1114 node.Type = typeDef
1115 }
1116 nodes[persisted.ID] = node
1117 }
1118
1119 for _, persisted := range tree.Nodes {
1120 if persisted.ParentID == 0 {
1121 continue
1122 }
1123 parent, ok := nodes[persisted.ParentID]

Callers 2

DecodePersistedObjectMethod · 0.85
DecodePersistedObjectMethod · 0.85

Calls 1

dagqlServerForModuleFunction · 0.85

Tested by

no test coverage detected