aboutsummaryrefslogtreecommitdiffstats
path: root/entity/dag
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2022-08-25 11:19:43 +0200
committerMichael Muré <batolettre@gmail.com>2022-08-25 11:20:36 +0200
commit4c074099b8f305758ee88b319c7e0d32c2412038 (patch)
treeee1817f5101b3fbabfbaa3df2cba81330d8b8ec0 /entity/dag
parent5c91174a84592b027c1b432a72ebf2974ec0e4c5 (diff)
downloadgit-bug-4c074099b8f305758ee88b319c7e0d32c2412038.tar.gz
generalized interface for an Entity
Diffstat (limited to 'entity/dag')
-rw-r--r--entity/dag/entity.go2
-rw-r--r--entity/dag/interface.go43
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
+}