diff options
author | Michael Muré <batolettre@gmail.com> | 2018-08-23 19:11:38 +0200 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2018-08-23 19:15:50 +0200 |
commit | 16f55e3f4d560330a638986130d27fd067300169 (patch) | |
tree | 41cfedb5c11bf9accd131d34b8a9ac25cfafaa05 /bug/interface.go | |
parent | 6d7dc465d881d0d04b01dfb6e09870346216d2d0 (diff) | |
download | git-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.go | 52 |
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") + } +} |