1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2024-11-28 09:08:41 +02:00

Add GetItemOperation/SetItemOperation/ClearItemOperation to IStateAccessor

Not used by anything yet; committing this separately in the interest of having
smaller independent commits.
This commit is contained in:
Stefan Haller 2023-10-08 17:54:40 +02:00
parent cc9a20c4ab
commit 9d55d71fdd
2 changed files with 51 additions and 0 deletions

View File

@ -110,6 +110,12 @@ type Gui struct {
// lazygit was opened in, or if we'll retain the one we're currently in. // lazygit was opened in, or if we'll retain the one we're currently in.
RetainOriginalDir bool RetainOriginalDir bool
// stores long-running operations associated with items (e.g. when a branch
// is being pushed). At the moment the rule is to use an item operation when
// we need to talk to the remote.
itemOperations map[string]types.ItemOperation
itemOperationsMutex *deadlock.Mutex
PrevLayout PrevLayout PrevLayout PrevLayout
// this is the initial dir we are in upon opening lazygit. We hold onto this // this is the initial dir we are in upon opening lazygit. We hold onto this
@ -180,6 +186,27 @@ func (self *StateAccessor) SetRetainOriginalDir(value bool) {
self.gui.RetainOriginalDir = value self.gui.RetainOriginalDir = value
} }
func (self *StateAccessor) GetItemOperation(item types.HasUrn) types.ItemOperation {
self.gui.itemOperationsMutex.Lock()
defer self.gui.itemOperationsMutex.Unlock()
return self.gui.itemOperations[item.URN()]
}
func (self *StateAccessor) SetItemOperation(item types.HasUrn, operation types.ItemOperation) {
self.gui.itemOperationsMutex.Lock()
defer self.gui.itemOperationsMutex.Unlock()
self.gui.itemOperations[item.URN()] = operation
}
func (self *StateAccessor) ClearItemOperation(item types.HasUrn) {
self.gui.itemOperationsMutex.Lock()
defer self.gui.itemOperationsMutex.Unlock()
delete(self.gui.itemOperations, item.URN())
}
// we keep track of some stuff from one render to the next to see if certain // we keep track of some stuff from one render to the next to see if certain
// things have changed // things have changed
type PrevLayout struct { type PrevLayout struct {
@ -473,6 +500,9 @@ func NewGui(
}, },
InitialDir: initialDir, InitialDir: initialDir,
afterLayoutFuncs: make(chan func() error, 1000), afterLayoutFuncs: make(chan func() error, 1000),
itemOperations: make(map[string]types.ItemOperation),
itemOperationsMutex: &deadlock.Mutex{},
} }
gui.PopupHandler = popup.NewPopupHandler( gui.PopupHandler = popup.NewPopupHandler(

View File

@ -265,6 +265,24 @@ type Mutexes struct {
PtyMutex *deadlock.Mutex PtyMutex *deadlock.Mutex
} }
// A long-running operation associated with an item. For example, we'll show
// that a branch is being pushed from so that there's visual feedback about
// what's happening and so that you can see multiple branches' concurrent
// operations
type ItemOperation int
const (
ItemOperationNone ItemOperation = iota
ItemOperationPushing
ItemOperationPulling
ItemOperationFastForwarding
ItemOperationDeleting
)
type HasUrn interface {
URN() string
}
type IStateAccessor interface { type IStateAccessor interface {
GetRepoPathStack() *utils.StringStack GetRepoPathStack() *utils.StringStack
GetRepoState() IRepoStateAccessor GetRepoState() IRepoStateAccessor
@ -277,6 +295,9 @@ type IStateAccessor interface {
SetShowExtrasWindow(bool) SetShowExtrasWindow(bool)
GetRetainOriginalDir() bool GetRetainOriginalDir() bool
SetRetainOriginalDir(bool) SetRetainOriginalDir(bool)
GetItemOperation(item HasUrn) ItemOperation
SetItemOperation(item HasUrn, operation ItemOperation)
ClearItemOperation(item HasUrn)
} }
type IRepoStateAccessor interface { type IRepoStateAccessor interface {