Skip to content

Commit 7ae508a

Browse files
authored
feat: 'the world' target (#204)
feat: 'the world' target
2 parents 76204aa + 7f7e1b8 commit 7ae508a

File tree

3 files changed

+41
-30
lines changed

3 files changed

+41
-30
lines changed

Diff for: internal/dvcore/run.go

+2
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ func Run(h *cayley.Handle, args []string, opts RunOpts) error {
5050
}
5151
opts.Logger.Debug("Run called", zap.Strings("args", args), zap.Any("opts", opts))
5252

53+
// FIXME: support the world
54+
5355
targets, err := dvparser.ParseTargets(args)
5456
if err != nil {
5557
return fmt.Errorf("parse targets: %w", err)

Diff for: internal/dvserver/api.go

+9-5
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,20 @@ func (s *service) Graph(ctx context.Context, in *Graph_Input) (*Graph_Output, er
1818
return nil, fmt.Errorf("targets is required")
1919
}
2020

21-
targets, err := dvparser.ParseTargets(in.Targets)
22-
if err != nil {
23-
return nil, fmt.Errorf("parse targets: %w", err)
24-
}
2521
filters := dvstore.LoadTasksFilters{
2622
WithClosed: in.WithClosed,
2723
WithoutIsolated: in.WithoutIsolated,
2824
WithoutPRs: in.WithoutPRs,
2925
WithoutExternalDeps: in.WithoutExternalDeps,
30-
Targets: targets,
26+
}
27+
if len(in.Targets) == 1 && in.Targets[0] == "world" {
28+
filters.TheWorld = true
29+
} else {
30+
targets, err := dvparser.ParseTargets(in.Targets)
31+
if err != nil {
32+
return nil, fmt.Errorf("parse targets: %w", err)
33+
}
34+
filters.Targets = targets
3135
}
3236

3337
// load tasks

Diff for: internal/dvstore/query.go

+30-25
Original file line numberDiff line numberDiff line change
@@ -50,51 +50,56 @@ func LastUpdatedIssueInRepo(ctx context.Context, h *cayley.Handle, entity multip
5050

5151
type LoadTasksFilters struct {
5252
Targets []multipmuri.Entity
53+
TheWorld bool
5354
WithClosed bool
5455
WithoutIsolated bool
5556
WithoutPRs bool
5657
WithoutExternalDeps bool
5758
}
5859

5960
func LoadTasks(h *cayley.Handle, schema *schema.Config, filters LoadTasksFilters, logger *zap.Logger) (dvmodel.Tasks, error) {
60-
if filters.Targets == nil || len(filters.Targets) == 0 {
61+
if (filters.Targets == nil || len(filters.Targets) == 0) && !filters.TheWorld {
6162
return nil, fmt.Errorf("missing filter.targets")
6263
}
6364

6465
ctx := context.TODO()
6566

66-
// fetch and filter
67+
// fetch targets
6768
paths := []*path.Path{}
68-
for _, target := range filters.Targets {
69-
// FIXME: handle different target types (for now only repo)
70-
p := path.StartPath(h, quad.IRI(target.String())).
71-
In().
72-
Has(quad.IRI("rdf:type"), quad.IRI("dv:Task"))
73-
kinds := []quad.Value{
74-
quad.Int(dvmodel.Task_Issue),
75-
quad.Int(dvmodel.Task_Milestone),
76-
quad.Int(dvmodel.Task_Epic),
77-
quad.Int(dvmodel.Task_Story),
78-
quad.Int(dvmodel.Task_Card),
69+
if filters.TheWorld {
70+
paths = append(paths, path.StartPath(h))
71+
} else {
72+
for _, target := range filters.Targets {
73+
// FIXME: handle different target types (for now only repo)
74+
p := path.StartPath(h, quad.IRI(target.String())).
75+
Both().
76+
Has(quad.IRI("rdf:type"), quad.IRI("dv:Task"))
77+
78+
// FIXME: reverse depends/blocks
79+
paths = append(paths, p)
7980
}
80-
// FIXME: one option per type
81-
if !filters.WithoutPRs {
82-
kinds = append(kinds, quad.Int(dvmodel.Task_MergeRequest))
83-
}
84-
p = p.Has(quad.IRI("schema:kind"), kinds...)
85-
if !filters.WithClosed {
86-
p = p.Has(quad.IRI("schema:state"), quad.Int(dvmodel.Task_Open))
87-
}
88-
// FIXME: reverse depends/blocks
89-
90-
paths = append(paths, p)
9181
}
92-
9382
p := paths[0]
9483
for _, path := range paths[1:] {
9584
p = p.Or(path)
9685
}
9786

87+
// filters
88+
kinds := []quad.Value{
89+
quad.Int(dvmodel.Task_Issue),
90+
quad.Int(dvmodel.Task_Milestone),
91+
quad.Int(dvmodel.Task_Epic),
92+
quad.Int(dvmodel.Task_Story),
93+
quad.Int(dvmodel.Task_Card),
94+
}
95+
if !filters.WithoutPRs {
96+
kinds = append(kinds, quad.Int(dvmodel.Task_MergeRequest))
97+
}
98+
p = p.Has(quad.IRI("schema:kind"), kinds...)
99+
if !filters.WithClosed {
100+
p = p.Has(quad.IRI("schema:state"), quad.Int(dvmodel.Task_Open))
101+
}
102+
98103
if !filters.WithoutExternalDeps {
99104
p = p.Or(p.Both(
100105
quad.IRI("isDependingOn"),

0 commit comments

Comments
 (0)