| 381 | } |
| 382 | |
| 383 | func (*GitRef) DecodePersistedObject(ctx context.Context, dag *dagql.Server, _ uint64, _ *dagql.ResultCall, payload json.RawMessage) (dagql.Typed, error) { |
| 384 | var persisted persistedGitRefPayload |
| 385 | if err := json.Unmarshal(payload, &persisted); err != nil { |
| 386 | return nil, fmt.Errorf("decode persisted git ref payload: %w", err) |
| 387 | } |
| 388 | repo, err := loadPersistedObjectResultByResultID[*GitRepository](ctx, dag, persisted.RepoResultID, "git ref repo") |
| 389 | if err != nil { |
| 390 | return nil, err |
| 391 | } |
| 392 | ref := &gitutil.Ref{ |
| 393 | Name: persisted.Name, |
| 394 | SHA: persisted.SHA, |
| 395 | } |
| 396 | backend, err := repo.Self().Backend.Get(ctx, ref) |
| 397 | if err != nil { |
| 398 | return nil, err |
| 399 | } |
| 400 | return &GitRef{ |
| 401 | Repo: repo, |
| 402 | Backend: backend, |
| 403 | Ref: ref, |
| 404 | }, nil |
| 405 | } |
| 406 | |
| 407 | func (ref *GitRef) Tree(ctx context.Context, srv *dagql.Server, discardGitDir bool, depth int, includeTags bool) (*Directory, error) { |
| 408 | return ref.Backend.Tree(ctx, srv, ref.Repo.Self().DiscardGitDir || discardGitDir, depth, includeTags) |