diff options
author | Michael Muré <batolettre@gmail.com> | 2022-08-20 10:14:09 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-20 10:14:09 +0200 |
commit | 58df94d38d754bff4dcca11e2ae4b99326a9a87e (patch) | |
tree | 8701efc87732439f993eb4f1d00585fc419b87ab /entities/bug/with_snapshot.go | |
parent | 5ca686b59751e3c87740b84108c54fc675a074cf (diff) | |
parent | 5511c230b678a181cc596238bf6669428d1b1902 (diff) | |
download | git-bug-58df94d38d754bff4dcca11e2ae4b99326a9a87e.tar.gz |
Merge pull request #852 from MichaelMure/move-around
move {bug,identity} to /entities, move input to /commands
Diffstat (limited to 'entities/bug/with_snapshot.go')
-rw-r--r-- | entities/bug/with_snapshot.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/entities/bug/with_snapshot.go b/entities/bug/with_snapshot.go new file mode 100644 index 00000000..0474cac7 --- /dev/null +++ b/entities/bug/with_snapshot.go @@ -0,0 +1,53 @@ +package bug + +import ( + "github.com/MichaelMure/git-bug/repository" +) + +var _ Interface = &WithSnapshot{} + +// WithSnapshot encapsulate a Bug and maintain the corresponding Snapshot efficiently +type WithSnapshot struct { + *Bug + snap *Snapshot +} + +func (b *WithSnapshot) Compile() *Snapshot { + if b.snap == nil { + snap := b.Bug.Compile() + b.snap = snap + } + return b.snap +} + +// Append intercept Bug.Append() to update the snapshot efficiently +func (b *WithSnapshot) Append(op Operation) { + b.Bug.Append(op) + + if b.snap == nil { + return + } + + op.Apply(b.snap) + b.snap.Operations = append(b.snap.Operations, op) +} + +// Commit intercept Bug.Commit() to update the snapshot efficiently +func (b *WithSnapshot) Commit(repo repository.ClockedRepo) error { + err := b.Bug.Commit(repo) + + if err != nil { + b.snap = nil + return err + } + + // Commit() shouldn't change anything of the bug state apart from the + // initial ID set + + if b.snap == nil { + return nil + } + + b.snap.id = b.Bug.Id() + return nil +} |