-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
core.go
100 lines (90 loc) · 2.42 KB
/
core.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Package opcode defines the individual operations that the Git Town VM can execute.
// All opcodes implement the shared.Opcode interface.
package opcode
import (
"errors"
"github.com/git-town/git-town/v11/src/gohacks"
"github.com/git-town/git-town/v11/src/vm/shared"
)
// undeclaredOpcodeMethods can be added to structs in this package to satisfy the shared.Opcode interface even if they don't declare all required methods.
type undeclaredOpcodeMethods struct{}
func (self *undeclaredOpcodeMethods) CreateAbortProgram() []shared.Opcode {
return []shared.Opcode{}
}
func (self *undeclaredOpcodeMethods) CreateAutomaticUndoError() error {
return errors.New("")
}
func (self *undeclaredOpcodeMethods) CreateContinueProgram() []shared.Opcode {
return []shared.Opcode{}
}
func (self *undeclaredOpcodeMethods) Run(_ shared.RunArgs) error {
return nil
}
func (self *undeclaredOpcodeMethods) ShouldAutomaticallyUndoOnError() bool {
return false
}
func Lookup(opcodeType string) shared.Opcode { //nolint:ireturn
for _, opcode := range Types() {
if gohacks.TypeName(opcode) == opcodeType {
return opcode
}
}
return nil
}
// Types provides all existing opcodes.
// This is used to iterate all opcode types.
func Types() []shared.Opcode {
return []shared.Opcode{
&AbortMerge{},
&AbortRebase{},
&AddToPerennialBranches{},
&ChangeParent{},
&Checkout{},
&CheckoutIfExists{},
&CheckoutParent{},
&ChangeParent{},
&CommitOpenChanges{},
&ConnectorMergeProposal{},
&ContinueMerge{},
&ContinueRebase{},
&CreateBranch{},
&CreateBranchExistingParent{},
&CreateProposal{},
&CreateRemoteBranch{},
&CreateTrackingBranch{},
&DeleteLocalBranch{},
&DeleteParentBranch{},
&DeleteRemoteBranch{},
&DeleteTrackingBranch{},
&DiscardOpenChanges{},
&EnsureHasShippableChanges{},
&FetchUpstream{},
&ForcePushCurrentBranch{},
&DeleteBranchIfEmptyAtRuntime{},
&Merge{},
&MergeParent{},
&PreserveCheckoutHistory{},
&PullCurrentBranch{},
&PushCurrentBranch{},
&PushTags{},
&RebaseBranch{},
&RebaseParent{},
&RemoveBranchFromLineage{},
&RemoveFromPerennialBranches{},
&RemoveGlobalConfig{},
&RemoveLocalConfig{},
&ResetCurrentBranchToSHA{},
&ResetRemoteBranchToSHA{},
&RestoreOpenChanges{},
&RevertCommit{},
&SetExistingParent{},
&SetGlobalConfig{},
&SetLocalConfig{},
&SetParent{},
&SkipCurrentBranch{},
&StashOpenChanges{},
&SquashMerge{},
&UndoLastCommit{},
&UpdateProposalTarget{},
}
}