func ApplyChange(ctx context.Context, ds dag.DAGService, nd *dag.Node, cs []*Change) (*dag.Node, error) { e := NewDagEditor(ds, nd) for _, c := range cs { switch c.Type { case Add: child, err := ds.Get(ctx, c.After) if err != nil { return nil, err } err = e.InsertNodeAtPath(ctx, c.Path, child, nil) if err != nil { return nil, err } case Remove: err := e.RmLink(ctx, c.Path) if err != nil { return nil, err } case Mod: err := e.RmLink(ctx, c.Path) if err != nil { return nil, err } child, err := ds.Get(ctx, c.After) if err != nil { return nil, err } err = e.InsertNodeAtPath(ctx, c.Path, child, nil) if err != nil { return nil, err } } } return e.GetNode(), nil }