diff options
Diffstat (limited to 'entity/dag')
-rw-r--r-- | entity/dag/entity.go | 2 | ||||
-rw-r--r-- | entity/dag/interface.go | 43 |
2 files changed, 44 insertions, 1 deletions
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 +} |