aboutsummaryrefslogtreecommitdiffstats
path: root/bug/interface.go
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2018-08-23 19:11:38 +0200
committerMichael Muré <batolettre@gmail.com>2018-08-23 19:15:50 +0200
commit16f55e3f4d560330a638986130d27fd067300169 (patch)
tree41cfedb5c11bf9accd131d34b8a9ac25cfafaa05 /bug/interface.go
parent6d7dc465d881d0d04b01dfb6e09870346216d2d0 (diff)
downloadgit-bug-16f55e3f4d560330a638986130d27fd067300169.tar.gz
bug: introduce WithSnapshot to maintain incrementally and effitiently a snapshot
Diffstat (limited to 'bug/interface.go')
-rw-r--r--bug/interface.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/bug/interface.go b/bug/interface.go
new file mode 100644
index 00000000..af10b895
--- /dev/null
+++ b/bug/interface.go
@@ -0,0 +1,52 @@
+package bug
+
+import (
+ "github.com/MichaelMure/git-bug/repository"
+)
+
+type Interface interface {
+ // Id return the Bug identifier
+ Id() string
+
+ // HumanId return the Bug identifier truncated for human consumption
+ HumanId() string
+
+ // IsValid check if the Bug data is valid
+ IsValid() bool
+
+ // Append an operation into the staging area, to be committed later
+ Append(op Operation)
+
+ // Append an operation into the staging area, to be committed later
+ HasPendingOp() bool
+
+ // Commit write the staging area in Git and move the operations to the packs
+ Commit(repo repository.Repo) error
+
+ // Merge a different version of the same bug by rebasing operations of this bug
+ // that are not present in the other on top of the chain of operations of the
+ // other version.
+ Merge(repo repository.Repo, other Interface) (bool, error)
+
+ // Lookup for the very first operation of the bug.
+ // For a valid Bug, this operation should be a CreateOp
+ FirstOp() Operation
+
+ // Lookup for the very last operation of the bug.
+ // For a valid Bug, should never be nil
+ LastOp() Operation
+
+ // Compile a bug in a easily usable snapshot
+ Compile() Snapshot
+}
+
+func bugFromInterface(bug Interface) *Bug {
+ switch bug.(type) {
+ case *Bug:
+ return bug.(*Bug)
+ case *WithSnapshot:
+ return bug.(*WithSnapshot).Bug
+ default:
+ panic("missing type case")
+ }
+}