62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
package export
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"aego/app/projects"
|
|
"aego/app/run"
|
|
"aego/asset"
|
|
"aego/asset/pipeline"
|
|
"aego/core/log"
|
|
"aego/project"
|
|
"aego/vfs"
|
|
)
|
|
|
|
type Snapshot struct {
|
|
idx *asset.Index
|
|
files vfs.FS
|
|
assets []pipeline.AssetInfo
|
|
issues []pipeline.MetaIssue
|
|
}
|
|
|
|
func Take(pl *pipeline.Pipeline) *Snapshot {
|
|
issues, _ := pl.MetaIssues()
|
|
return &Snapshot{idx: pl.Index().Clone(), files: pl.Artifacts(), assets: pl.Assets(), issues: slices.Clone(issues)}
|
|
}
|
|
|
|
func Fresh(p *project.Project) (*Snapshot, func(), error) {
|
|
ws, err := projects.OpenWorkspace(p, "", false)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
imps, err := run.Importers(ws)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
pl, err := pipeline.Open(p, imps, log.Nop())
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
if _, _, err := pl.Scan(); err != nil {
|
|
pl.Close()
|
|
return nil, nil, err
|
|
}
|
|
if _, err := pl.ImportAll(); err != nil {
|
|
pl.Close()
|
|
return nil, nil, err
|
|
}
|
|
return Take(pl), pl.Close, nil
|
|
}
|
|
|
|
func (s *Snapshot) Revision() uint64 {
|
|
return 1
|
|
}
|
|
|
|
func (s *Snapshot) Index() *asset.Index {
|
|
return s.idx
|
|
}
|
|
|
|
func (s *Snapshot) Artifacts() vfs.FS {
|
|
return s.files
|
|
}
|