// Load loads resources into the catalog func (c *Catalog) Load() error { // Register the resource providers and catalog in Lua resource.LuaRegisterBuiltin(c.config.L) if err := c.config.L.DoFile(c.config.Module); err != nil { return err } // Perform a topological sort of the resources collection, err := resource.CreateCollection(c.Unsorted) if err != nil { return err } collectionGraph, err := collection.DependencyGraph() if err != nil { return err } collectionSorted, err := collectionGraph.Sort() if err != nil { return err } for _, node := range collectionSorted { c.sorted = append(c.sorted, collection[node.Name]) } return nil }
// Load loads resources into the catalog func (c *Catalog) Load() error { // Register the resource providers and catalog in Lua resource.LuaRegisterBuiltin(c.config.L) if err := c.config.L.DoFile(c.config.Module); err != nil { return err } // Perform a topological sort of the resources collection, err := resource.CreateCollection(c.Unsorted) if err != nil { return err } collectionGraph, err := collection.DependencyGraph() if err != nil { return err } reversed := collectionGraph.Reversed() sorted, err := collectionGraph.Sort() if err != nil { return err } // Set catalog fields c.collection = collection c.sorted = sorted c.reversed = reversed c.config.Logger.Printf("Loaded %d resources\n", len(c.sorted)) return nil }
// Executes the "graph" command func execGraphCommand(c *cli.Context) error { if len(c.Args()) < 1 { return cli.NewExitError(errNoModuleName.Error(), 64) } L := lua.NewState() defer L.Close() module := c.Args()[0] config := &catalog.Config{ Module: module, DryRun: true, Logger: log.New(os.Stdout, "", log.LstdFlags), SiteRepo: c.String("siterepo"), L: L, } katalog := catalog.New(config) resource.LuaRegisterBuiltin(L) if err := L.DoFile(module); err != nil { return cli.NewExitError(err.Error(), 1) } collection, err := resource.CreateCollection(katalog.Unsorted) if err != nil { return cli.NewExitError(err.Error(), 1) } g, err := collection.DependencyGraph() if err != nil { return cli.NewExitError(err.Error(), 1) } g.AsDot("resources", os.Stdout) g.Reversed().AsDot("reversed", os.Stdout) sorted, err := g.Sort() if err == graph.ErrCircularDependency { circular := graph.New() circular.AddNode(sorted...) circular.AsDot("circular", os.Stdout) return cli.NewExitError(graph.ErrCircularDependency.Error(), 1) } return nil }