@@ -2,62 +2,111 @@ package models
22
33import  "github.com/jesseduffield/lazygit/pkg/i18n" 
44
5- type  WorkingTreeState  int 
5+ // The state of the working tree. Several of these can be true at once. 
6+ // In particular, the concrete multi-state combinations that can occur in 
7+ // practice are Rebasing+CherryPicking, and Rebasing+Reverting. Theoretically, I 
8+ // guess Rebasing+Merging could also happen, but it probably won't in practice. 
9+ type  WorkingTreeState  struct  {
10+ 	Rebasing       bool 
11+ 	Merging        bool 
12+ 	CherryPicking  bool 
13+ 	Reverting      bool 
14+ }
15+ 
16+ func  (self  WorkingTreeState ) Any () bool  {
17+ 	return  self .Rebasing  ||  self .Merging  ||  self .CherryPicking  ||  self .Reverting 
18+ }
19+ 
20+ func  (self  WorkingTreeState ) None () bool  {
21+ 	return  ! self .Any ()
22+ }
23+ 
24+ type  EffectiveWorkingTreeState  int 
625
726const  (
8- 	// this means we're neither rebasing nor merging 
9- 	WORKING_TREE_STATE_NONE  WorkingTreeState  =  iota 
27+ 	// this means we're neither rebasing nor merging, cherry-picking, or reverting  
28+ 	WORKING_TREE_STATE_NONE  EffectiveWorkingTreeState  =  iota 
1029	WORKING_TREE_STATE_REBASING 
1130	WORKING_TREE_STATE_MERGING 
31+ 	WORKING_TREE_STATE_CHERRY_PICKING 
32+ 	WORKING_TREE_STATE_REVERTING 
1233)
1334
14- func  (self  WorkingTreeState ) IsMerging () bool  {
15- 	return  self  ==  WORKING_TREE_STATE_MERGING 
16- }
17- 
18- func  (self  WorkingTreeState ) IsRebasing () bool  {
19- 	return  self  ==  WORKING_TREE_STATE_REBASING 
35+ // Effective returns the "current" state; if several states are true at once, 
36+ // this is the one that should be displayed in status views, and it's the one 
37+ // that the user can continue or abort. 
38+ // 
39+ // As an example, if you are stopped in an interactive rebase, and then you 
40+ // perform a cherry-pick, and the cherry-pick conflicts, then both 
41+ // WorkingTreeState.Rebasing and WorkingTreeState.CherryPicking are true. 
42+ // The effective state is cherry-picking, because that's the one you can 
43+ // continue or abort. It is not possible to continue the rebase without first 
44+ // aborting the cherry-pick. 
45+ func  (self  WorkingTreeState ) Effective () EffectiveWorkingTreeState  {
46+ 	if  self .Reverting  {
47+ 		return  WORKING_TREE_STATE_REVERTING 
48+ 	}
49+ 	if  self .CherryPicking  {
50+ 		return  WORKING_TREE_STATE_CHERRY_PICKING 
51+ 	}
52+ 	if  self .Merging  {
53+ 		return  WORKING_TREE_STATE_MERGING 
54+ 	}
55+ 	if  self .Rebasing  {
56+ 		return  WORKING_TREE_STATE_REBASING 
57+ 	}
58+ 	return  WORKING_TREE_STATE_NONE 
2059}
2160
2261func  (self  WorkingTreeState ) Title (tr  * i18n.TranslationSet ) string  {
23- 	switch  self  {
24- 	case  WORKING_TREE_STATE_REBASING :
25- 		return  tr .RebasingStatus 
26- 	case  WORKING_TREE_STATE_MERGING :
27- 		return  tr .MergingStatus 
28- 	default :
29- 		// should never actually display this 
30- 		return  "none" 
31- 	}
62+ 	return  map [EffectiveWorkingTreeState ]string {
63+ 		WORKING_TREE_STATE_REBASING :       tr .RebasingStatus ,
64+ 		WORKING_TREE_STATE_MERGING :        tr .MergingStatus ,
65+ 		WORKING_TREE_STATE_CHERRY_PICKING : tr .CherryPickingStatus ,
66+ 		WORKING_TREE_STATE_REVERTING :      tr .RevertingStatus ,
67+ 	}[self .Effective ()]
3268}
3369
3470func  (self  WorkingTreeState ) LowerCaseTitle (tr  * i18n.TranslationSet ) string  {
35- 	switch  self  {
36- 	case  WORKING_TREE_STATE_REBASING :
37- 		return  tr .LowercaseRebasingStatus 
38- 	case  WORKING_TREE_STATE_MERGING :
39- 		return  tr .LowercaseMergingStatus 
40- 	default :
41- 		// should never actually display this 
42- 		return  "none" 
43- 	}
71+ 	return  map [EffectiveWorkingTreeState ]string {
72+ 		WORKING_TREE_STATE_REBASING :       tr .LowercaseRebasingStatus ,
73+ 		WORKING_TREE_STATE_MERGING :        tr .LowercaseMergingStatus ,
74+ 		WORKING_TREE_STATE_CHERRY_PICKING : tr .LowercaseCherryPickingStatus ,
75+ 		WORKING_TREE_STATE_REVERTING :      tr .LowercaseRevertingStatus ,
76+ 	}[self .Effective ()]
4477}
4578
4679func  (self  WorkingTreeState ) OptionsMenuTitle (tr  * i18n.TranslationSet ) string  {
47- 	if  self  ==  WORKING_TREE_STATE_MERGING  {
48- 		return  tr .MergeOptionsTitle 
49- 	}
50- 	return  tr .RebaseOptionsTitle 
80+ 	return  map [EffectiveWorkingTreeState ]string {
81+ 		WORKING_TREE_STATE_REBASING :       tr .RebaseOptionsTitle ,
82+ 		WORKING_TREE_STATE_MERGING :        tr .MergeOptionsTitle ,
83+ 		WORKING_TREE_STATE_CHERRY_PICKING : tr .CherryPickOptionsTitle ,
84+ 		WORKING_TREE_STATE_REVERTING :      tr .RevertOptionsTitle ,
85+ 	}[self .Effective ()]
86+ }
87+ 
88+ func  (self  WorkingTreeState ) OptionsMapTitle (tr  * i18n.TranslationSet ) string  {
89+ 	return  map [EffectiveWorkingTreeState ]string {
90+ 		WORKING_TREE_STATE_REBASING :       tr .ViewRebaseOptions ,
91+ 		WORKING_TREE_STATE_MERGING :        tr .ViewMergeOptions ,
92+ 		WORKING_TREE_STATE_CHERRY_PICKING : tr .ViewCherryPickOptions ,
93+ 		WORKING_TREE_STATE_REVERTING :      tr .ViewRevertOptions ,
94+ 	}[self .Effective ()]
5195}
5296
5397func  (self  WorkingTreeState ) CommandName () string  {
54- 	switch  self  {
55- 	case  WORKING_TREE_STATE_MERGING :
56- 		return  "merge" 
57- 	case  WORKING_TREE_STATE_REBASING :
58- 		return  "rebase" 
59- 	default :
60- 		// shouldn't be possible to land here 
61- 		return  "" 
62- 	}
98+ 	return  map [EffectiveWorkingTreeState ]string {
99+ 		WORKING_TREE_STATE_REBASING :       "rebase" ,
100+ 		WORKING_TREE_STATE_MERGING :        "merge" ,
101+ 		WORKING_TREE_STATE_CHERRY_PICKING : "cherry-pick" ,
102+ 		WORKING_TREE_STATE_REVERTING :      "revert" ,
103+ 	}[self .Effective ()]
104+ }
105+ 
106+ func  (self  WorkingTreeState ) CanShowTodos () bool  {
107+ 	return  self .Rebasing  ||  self .CherryPicking  ||  self .Reverting 
108+ }
109+ 
110+ func  (self  WorkingTreeState ) CanSkip () bool  {
111+ 	return  self .Rebasing  ||  self .CherryPicking  ||  self .Reverting 
63112}
0 commit comments