diff options
-rw-r--r-- | entity/dag/clock.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/entity/dag/clock.go b/entity/dag/clock.go new file mode 100644 index 00000000..fa944b33 --- /dev/null +++ b/entity/dag/clock.go @@ -0,0 +1,41 @@ +package dag + +import ( + "fmt" + + "github.com/MichaelMure/git-bug/identity" + "github.com/MichaelMure/git-bug/repository" +) + +// ClockLoader is the repository.ClockLoader for Entity +func ClockLoader(defs ...Definition) repository.ClockLoader { + clocks := make([]string, len(defs)*2) + for _, def := range defs { + clocks = append(clocks, fmt.Sprintf(creationClockPattern, def.namespace)) + clocks = append(clocks, fmt.Sprintf(editClockPattern, def.namespace)) + } + + return repository.ClockLoader{ + Clocks: clocks, + Witnesser: func(repo repository.ClockedRepo) error { + // We don't care about the actual identity so an IdentityStub will do + resolver := identity.NewStubResolver() + + for _, def := range defs { + // override the resolver + def := def + def.identityResolver = resolver + + // we actually just need to read all entities, + // as that will create and update the clocks + // TODO: concurrent loading to be faster? + for b := range ReadAll(def, repo) { + if b.Err != nil { + return b.Err + } + } + } + return nil + }, + } +} |