From 4c074099b8f305758ee88b319c7e0d32c2412038 Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Thu, 25 Aug 2022 11:19:43 +0200 Subject: generalized interface for an Entity --- entity/dag/entity.go | 2 +- entity/dag/interface.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 entity/dag/interface.go (limited to 'entity') diff --git a/entity/dag/entity.go b/entity/dag/entity.go index 8b561274..ca674ad7 100644 --- a/entity/dag/entity.go +++ b/entity/dag/entity.go @@ -361,7 +361,7 @@ func (e *Entity) Validate() error { return fmt.Errorf("entity has no operations") } - // check if each operations are valid + // check if each operation are valid for _, op := range e.ops { if err := op.Validate(); err != nil { return err diff --git a/entity/dag/interface.go b/entity/dag/interface.go new file mode 100644 index 00000000..613f60e6 --- /dev/null +++ b/entity/dag/interface.go @@ -0,0 +1,43 @@ +package dag + +import ( + "github.com/MichaelMure/git-bug/entity" + "github.com/MichaelMure/git-bug/repository" + "github.com/MichaelMure/git-bug/util/lamport" +) + +// Interface define the extended interface of a dag.Entity +type Interface[SnapT Snapshot, OpT Operation] interface { + entity.Interface + + // Validate checks if the Entity data is valid + Validate() error + + // Append an operation into the staging area, to be committed later + Append(op OpT) + + // Operations returns the ordered operations + Operations() []OpT + + // NeedCommit indicates that the in-memory state changed and need to be committed in the repository + NeedCommit() bool + + // Commit writes the staging area in Git and move the operations to the packs + Commit(repo repository.ClockedRepo) error + + // FirstOp lookup for the very first operation of the Entity. + FirstOp() OpT + + // LastOp lookup for the very last operation of the Entity. + // For a valid Entity, should never be nil + LastOp() OpT + + // Compile a bug in an easily usable snapshot + Compile() SnapT + + // CreateLamportTime return the Lamport time of creation + CreateLamportTime() lamport.Time + + // EditLamportTime return the Lamport time of the last edit + EditLamportTime() lamport.Time +} -- cgit