summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAzraelSec <federicogerardi94@gmail.com>2023-03-29 00:53:14 +0200
committerJesse Duffield <jessedduffield@gmail.com>2023-04-15 17:26:08 +1000
commita3fdf91714c460f0496627e48a86a697107f40fb (patch)
tree1c94bd6cd475e160543880bb9a5e8459e950d83a
parent368f9c8cb3d1f86d2a854cdfc20a8c87221e4087 (diff)
feat: allow to perform a rebase with breaking before the first commit
-rw-r--r--pkg/commands/git_commands/rebase.go5
-rw-r--r--pkg/gui/controllers/helpers/merge_and_rebase_helper.go39
-rw-r--r--pkg/i18n/chinese.go2
-rw-r--r--pkg/i18n/dutch.go2
-rw-r--r--pkg/i18n/english.go10
-rw-r--r--pkg/i18n/korean.go2
-rw-r--r--pkg/i18n/polish.go2
7 files changed, 40 insertions, 22 deletions
diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go
index 4e4892d8d..18072779e 100644
--- a/pkg/commands/git_commands/rebase.go
+++ b/pkg/commands/git_commands/rebase.go
@@ -126,6 +126,11 @@ func (self *RebaseCommands) InteractiveRebaseBreakAfter(commits []*models.Commit
return self.PrepareInteractiveRebaseCommand(sha, todo, true, false).Run()
}
+func (self *RebaseCommands) EditRebase(branchRef string) error {
+ commands := []TodoLine{{Action: "break"}}
+ return self.PrepareInteractiveRebaseCommand(branchRef, commands, false, true).Run()
+}
+
// PrepareInteractiveRebaseCommand returns the cmd for an interactive rebase
// we tell git to run lazygit to edit the todo list, and we pass the client
// lazygit a todo string to write to the todo file
diff --git a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
index b70f7b2ed..9cb8f4a15 100644
--- a/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
+++ b/pkg/gui/controllers/helpers/merge_and_rebase_helper.go
@@ -201,22 +201,39 @@ func (self *MergeAndRebaseHelper) RebaseOntoRef(ref string) error {
if ref == checkedOutBranch {
return self.c.ErrorMsg(self.c.Tr.CantRebaseOntoSelf)
}
- prompt := utils.ResolvePlaceholderString(
- self.c.Tr.ConfirmRebase,
+ menuItems := []*types.MenuItem{
+ {
+ Label: self.c.Tr.SimpleRebase,
+ Key: 's',
+ OnPress: func() error {
+ self.c.LogAction(self.c.Tr.Actions.RebaseBranch)
+ err := self.git.Rebase.RebaseBranch(ref)
+ return self.CheckMergeOrRebase(err)
+ },
+ },
+ {
+ Label: self.c.Tr.InteractiveRebase,
+ Key: 'i',
+ Tooltip: self.c.Tr.InteractiveRebaseTooltip,
+ OnPress: func() error {
+ self.c.LogAction(self.c.Tr.Actions.RebaseBranch)
+ err := self.git.Rebase.EditRebase(ref)
+ return self.CheckMergeOrRebase(err)
+ },
+ },
+ }
+
+ title := utils.ResolvePlaceholderString(
+ self.c.Tr.RebasingTitle,
map[string]string{
"checkedOutBranch": checkedOutBranch,
- "selectedBranch": ref,
+ "ref": ref,
},
)
- return self.c.Confirm(types.ConfirmOpts{
- Title: self.c.Tr.RebasingTitle,
- Prompt: prompt,
- HandleConfirm: func() error {
- self.c.LogAction(self.c.Tr.Actions.RebaseBranch)
- err := self.git.Rebase.RebaseBranch(ref)
- return self.CheckMergeOrRebase(err)
- },
+ return self.c.Menu(types.CreateMenuOptions{
+ Title: title,
+ Items: menuItems,
})
}
diff --git a/pkg/i18n/chinese.go b/pkg/i18n/chinese.go
index dbc8122e9..2d300caf7 100644
--- a/pkg/i18n/chinese.go
+++ b/pkg/i18n/chinese.go
@@ -201,8 +201,6 @@ func chineseTranslationSet() TranslationSet {
ReflogCommitsTitle: "Reflog 页面",
GlobalTitle: "全局键绑定",
ConflictsResolved: "已解决所有冲突。是否继续?",
- RebasingTitle: "变基",
- ConfirmRebase: "您确定要将分支 {{.checkedOutBranch}} 变基到 {{.selectedBranch}} 吗?",
ConfirmMerge: "您确定要将分支 {{.selectedBranch}} 合并到 {{.checkedOutBranch}} 吗?",
FwdNoUpstream: "此分支没有上游,无法快进",
FwdNoLocalUpstream: "此分支的远程未在本地注册,无法快进",
diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go
index d8fcb5338..f52908cea 100644
--- a/pkg/i18n/dutch.go
+++ b/pkg/i18n/dutch.go
@@ -166,9 +166,7 @@ func dutchTranslationSet() TranslationSet {
ReflogCommitsTitle: "Reflog",
GlobalTitle: "Globale Sneltoetsen",
ConflictsResolved: "alle merge conflicten zijn opgelost. Wilt je verder gaan?",
- RebasingTitle: "Rebasen",
MergingTitle: "Mergen",
- ConfirmRebase: "Weet je zeker dat je '{{.checkedOutBranch}}' op '{{.selectedBranch}}' wil rebasen?",
ConfirmMerge: "Weet je zeker dat je '{{.selectedBranch}}' in '{{.checkedOutBranch}}' wil mergen?",
FwdNoUpstream: "Kan niet de branch vooruitspoelen zonder upstream",
FwdCommitsToPush: "Je kan niet vooruitspoelen als de branch geen nieuwe commits heeft",
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 80179f365..b8cbc46b1 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -209,7 +209,9 @@ type TranslationSet struct {
ReflogCommitsTitle string
ConflictsResolved string
RebasingTitle string
- ConfirmRebase string
+ SimpleRebase string
+ InteractiveRebase string
+ InteractiveRebaseTooltip string
ConfirmMerge string
FwdNoUpstream string
FwdNoLocalUpstream string
@@ -877,8 +879,10 @@ func EnglishTranslationSet() TranslationSet {
ReflogCommitsTitle: "Reflog",
GlobalTitle: "Global Keybindings",
ConflictsResolved: "all merge conflicts resolved. Continue?",
- RebasingTitle: "Rebasing",
- ConfirmRebase: "Are you sure you want to rebase '{{.checkedOutBranch}}' on top of '{{.selectedBranch}}'?",
+ RebasingTitle: "Rebase '{{.checkedOutBranch}}' onto '{{.ref}}'",
+ SimpleRebase: "Simple rebase",
+ InteractiveRebase: "Interactive rebase",
+ InteractiveRebaseTooltip: "Begin an interactive rebase with a break at the start, so you can update the TODO commits before continuing",
ConfirmMerge: "Are you sure you want to merge '{{.selectedBranch}}' into '{{.checkedOutBranch}}'?",
FwdNoUpstream: "Cannot fast-forward a branch with no upstream",
FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally",
diff --git a/pkg/i18n/korean.go b/pkg/i18n/korean.go
index fa649bcc0..88e7db8f6 100644
--- a/pkg/i18n/korean.go
+++ b/pkg/i18n/korean.go
@@ -202,8 +202,6 @@ func koreanTranslationSet() TranslationSet {
ReflogCommitsTitle: "Reflog",
GlobalTitle: "글로벌 키 바인딩",
ConflictsResolved: "모든 병합 충돌이 해결되었습니다. 계속 할까요?",
- RebasingTitle: "리베이스 중",
- ConfirmRebase: "정말로 '{{.checkedOutBranch}}' 을(를) '{{.selectedBranch}}'에 리베이스 하시겠습니까?",
ConfirmMerge: "정말로 '{{.selectedBranch}}' 을(를) '{{.checkedOutBranch}}'에 병합하시겠습니까?",
FwdNoUpstream: "Cannot fast-forward a branch with no upstream",
FwdNoLocalUpstream: "Cannot fast-forward a branch whose remote is not registered locally",
diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go
index 3db26a22c..00ed9f38f 100644
--- a/pkg/i18n/polish.go
+++ b/pkg/i18n/polish.go
@@ -112,9 +112,7 @@ func polishTranslationSet() TranslationSet {
FileStagingRequirements: "Można tylko zatwierdzić pojedyncze linie dla śledzonych plików z niezatwierdzonymi zmianami",
StagingTitle: "Poczekalnia",
ReturnToFilesPanel: "wróć do panelu plików",
- RebasingTitle: "Zmiana bazy",
MergingTitle: "Scalanie",
- ConfirmRebase: "Czy napewno chcesz zmienić bazę '{{.checkedOutBranch}}' na '{{.selectedBranch}}'?",
ConfirmMerge: "Czy na pewno chcesz scalić '{{.selectedBranch}}' do '{{.checkedOutBranch}}'?",
FwdNoUpstream: "Nie można przewinąć gałęzi bez gałęzi nadrzędnej",
FwdCommitsToPush: "Nie można przewinąć gałęzi z commitami do wysłania",