diff options
-rw-r--r-- | docs/keybindings/Keybindings_en.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_ja.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_ko.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_nl.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_pl.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_ru.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_zh-CN.md | 1 | ||||
-rw-r--r-- | docs/keybindings/Keybindings_zh-TW.md | 1 | ||||
-rw-r--r-- | pkg/commands/git_commands/remote_loader.go | 24 | ||||
-rw-r--r-- | pkg/config/app_config.go | 10 | ||||
-rw-r--r-- | pkg/config/user_config.go | 2 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/refs_helper.go | 31 | ||||
-rw-r--r-- | pkg/gui/controllers/remote_branches_controller.go | 18 | ||||
-rw-r--r-- | pkg/i18n/english.go | 6 | ||||
-rw-r--r-- | pkg/i18n/japanese.go | 7 | ||||
-rw-r--r-- | pkg/i18n/russian.go | 3 | ||||
-rw-r--r-- | schema/config.json | 4 |
17 files changed, 100 insertions, 13 deletions
diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md index 5c7d2f1f9..e4f6fd8be 100644 --- a/docs/keybindings/Keybindings_en.md +++ b/docs/keybindings/Keybindings_en.md @@ -258,6 +258,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: Rebase checked-out branch onto this branch <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Set as upstream of checked-out branch + <kbd>s</kbd>: Sort order <kbd>g</kbd>: View reset options <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: View commits diff --git a/docs/keybindings/Keybindings_ja.md b/docs/keybindings/Keybindings_ja.md index 2acbd3777..16e2d8a4d 100644 --- a/docs/keybindings/Keybindings_ja.md +++ b/docs/keybindings/Keybindings_ja.md @@ -323,6 +323,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: Rebase checked-out branch onto this branch <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Set as upstream of checked-out branch + <kbd>s</kbd>: 並び替え <kbd>g</kbd>: View reset options <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: コミットを閲覧 diff --git a/docs/keybindings/Keybindings_ko.md b/docs/keybindings/Keybindings_ko.md index 68e3a25ed..35dd0ebc9 100644 --- a/docs/keybindings/Keybindings_ko.md +++ b/docs/keybindings/Keybindings_ko.md @@ -241,6 +241,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: 체크아웃된 브랜치를 이 브랜치에 리베이스 <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Set as upstream of checked-out branch + <kbd>s</kbd>: Sort order <kbd>g</kbd>: View reset options <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: 커밋 보기 diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md index a53ad13a8..c5fe3f3b3 100644 --- a/docs/keybindings/Keybindings_nl.md +++ b/docs/keybindings/Keybindings_nl.md @@ -236,6 +236,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: Rebase branch <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Stel in als upstream van uitgecheckte branch + <kbd>s</kbd>: Sort order <kbd>g</kbd>: Bekijk reset opties <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: Bekijk commits diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md index 9ffffade5..558e3b50f 100644 --- a/docs/keybindings/Keybindings_pl.md +++ b/docs/keybindings/Keybindings_pl.md @@ -235,6 +235,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: Zmiana bazy gałęzi <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Set as upstream of checked-out branch + <kbd>s</kbd>: Sort order <kbd>g</kbd>: Wyświetl opcje resetu <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: View commits diff --git a/docs/keybindings/Keybindings_ru.md b/docs/keybindings/Keybindings_ru.md index 3296c8c16..22600aea7 100644 --- a/docs/keybindings/Keybindings_ru.md +++ b/docs/keybindings/Keybindings_ru.md @@ -296,6 +296,7 @@ _Связки клавиш_ <kbd>r</kbd>: Перебазировать переключённую ветку на эту ветку <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: Установить как upstream-ветку переключённую ветку + <kbd>s</kbd>: Порядок сортировки <kbd>g</kbd>: Просмотреть параметры сброса <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: Просмотреть коммиты diff --git a/docs/keybindings/Keybindings_zh-CN.md b/docs/keybindings/Keybindings_zh-CN.md index 3f9d060ca..354ef952a 100644 --- a/docs/keybindings/Keybindings_zh-CN.md +++ b/docs/keybindings/Keybindings_zh-CN.md @@ -337,6 +337,7 @@ _Legend: `<c-b>` means ctrl+b, `<a-b>` means alt+b, `B` means shift+b_ <kbd>r</kbd>: 将已检出的分支变基到该分支 <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: 设置为检出分支的上游 + <kbd>s</kbd>: Sort order <kbd>g</kbd>: 查看重置选项 <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: 查看提交 diff --git a/docs/keybindings/Keybindings_zh-TW.md b/docs/keybindings/Keybindings_zh-TW.md index 78fd75687..6e3094afd 100644 --- a/docs/keybindings/Keybindings_zh-TW.md +++ b/docs/keybindings/Keybindings_zh-TW.md @@ -347,6 +347,7 @@ _說明:`<c-b>` 表示 Ctrl+B、`<a-b>` 表示 Alt+B,`B`表示 Shift+B_ <kbd>r</kbd>: 將已檢出的分支變基至此分支 <kbd>d</kbd>: Delete remote tag <kbd>u</kbd>: 將此分支設為當前分支之上游 + <kbd>s</kbd>: Sort order <kbd>g</kbd>: 檢視重設選項 <kbd>w</kbd>: View worktree options <kbd><enter></kbd>: 檢視提交 diff --git a/pkg/commands/git_commands/remote_loader.go b/pkg/commands/git_commands/remote_loader.go index 6551ecb25..9d48374c5 100644 --- a/pkg/commands/git_commands/remote_loader.go +++ b/pkg/commands/git_commands/remote_loader.go @@ -1,6 +1,7 @@ package git_commands import ( + "fmt" "strings" "sync" @@ -83,14 +84,23 @@ func (self *RemoteLoader) GetRemotes() ([]*models.Remote, error) { func (self *RemoteLoader) getRemoteBranchesByRemoteName() (map[string][]*models.RemoteBranch, error) { remoteBranchesByRemoteName := make(map[string][]*models.RemoteBranch) - cmdArgs := NewGitCmd("branch").Arg("-r").ToArgv() - err := self.cmd.New(cmdArgs).DontLog().RunAndProcessLines(func(line string) (bool, error) { - // excluding lines like 'origin/HEAD -> origin/master' (there will be a separate - // line for 'origin/master') - if strings.Contains(line, "->") { - return false, nil - } + var sortOrder string + switch strings.ToLower(self.AppState.RemoteBranchSortOrder) { + case "alphabetical": + sortOrder = "refname" + case "date": + sortOrder = "-committerdate" + default: + sortOrder = "refname" + } + + cmdArgs := NewGitCmd("for-each-ref"). + Arg(fmt.Sprintf("--sort=%s", sortOrder)). + Arg("--format=%(refname:short)"). + Arg("refs/remotes"). + ToArgv() + err := self.cmd.New(cmdArgs).DontLog().RunAndProcessLines(func(line string) (bool, error) { line = strings.TrimSpace(line) split := strings.SplitN(line, "/", 2) diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go index 54d41b695..927f9f309 100644 --- a/pkg/config/app_config.go +++ b/pkg/config/app_config.go @@ -323,14 +323,16 @@ type AppState struct { HideCommandLog bool IgnoreWhitespaceInDiffView bool DiffContextSize int + RemoteBranchSortOrder string } func getDefaultAppState() *AppState { return &AppState{ - LastUpdateCheck: 0, - RecentRepos: []string{}, - StartupPopupVersion: 0, - DiffContextSize: 3, + LastUpdateCheck: 0, + RecentRepos: []string{}, + StartupPopupVersion: 0, + DiffContextSize: 3, + RemoteBranchSortOrder: "alphabetical", } } diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go index 3d772e778..749b41822 100644 --- a/pkg/config/user_config.go +++ b/pkg/config/user_config.go @@ -389,6 +389,7 @@ type KeybindingBranchesConfig struct { PushTag string `yaml:"pushTag"` SetUpstream string `yaml:"setUpstream"` FetchRemote string `yaml:"fetchRemote"` + SortOrder string `yaml:"sortOrder"` } type KeybindingWorktreesConfig struct { @@ -781,6 +782,7 @@ func GetDefaultConfig() *UserConfig { PushTag: "P", SetUpstream: "u", FetchRemote: "f", + SortOrder: "s", }, Worktrees: KeybindingWorktreesConfig{ ViewWorktreeOptions: "w", diff --git a/pkg/gui/controllers/helpers/refs_helper.go b/pkg/gui/controllers/helpers/refs_helper.go index a6de0d39f..b4617c8a0 100644 --- a/pkg/gui/controllers/helpers/refs_helper.go +++ b/pkg/gui/controllers/helpers/refs_helper.go @@ -119,6 +119,37 @@ func (self *RefsHelper) ResetToRef(ref string, strength string, envVars []string return nil } +func (self *RefsHelper) CreateSortOrderMenu(onSelected func(sortOrder string) error) error { + type sortOrderWithKey struct { + key types.Key + label string + sortKey string + sortOrder string + } + sortKeys := []sortOrderWithKey{ + {label: self.c.Tr.SortAlphabetical, sortKey: "refname", sortOrder: "alphabetical", key: 'a'}, + {label: self.c.Tr.SortByDate, sortKey: "-committerdate", sortOrder: "date", key: 'd'}, + } + + menuItems := lo.Map(sortKeys, func(row sortOrderWithKey, _ int) *types.MenuItem { + return &types.MenuItem{ + LabelColumns: []string{ + row.label, + style.FgYellow.Sprintf("--sort=%s", row.sortKey), + }, + OnPress: func() error { + return onSelected(row.sortOrder) + }, + Key: row.key, + } + }) + + return self.c.Menu(types.CreateMenuOptions{ + Title: self.c.Tr.SortOrder, + Items: menuItems, + }) +} + func (self *RefsHelper) CreateGitResetMenu(ref string) error { type strengthWithKey struct { strength string diff --git a/pkg/gui/controllers/remote_branches_controller.go b/pkg/gui/controllers/remote_branches_controller.go index ffb55d5ca..6d2244746 100644 --- a/pkg/gui/controllers/remote_branches_controller.go +++ b/pkg/gui/controllers/remote_branches_controller.go @@ -59,6 +59,12 @@ func (self *RemoteBranchesController) GetKeybindings(opts types.KeybindingsOpts) Description: self.c.Tr.SetAsUpstream, }, { + Key: opts.GetKey(opts.Config.Branches.SortOrder), + Handler: self.createSortMenu, + Description: self.c.Tr.SortOrder, + OpensMenu: true, + }, + { Key: opts.GetKey(opts.Config.Commits.ViewResetOptions), Handler: self.checkSelected(self.createResetMenu), Description: self.c.Tr.ViewResetOptions, @@ -121,6 +127,18 @@ func (self *RemoteBranchesController) rebase(selectedBranch *models.RemoteBranch return self.c.Helpers().MergeAndRebase.RebaseOntoRef(selectedBranch.FullName()) } +func (self *RemoteBranchesController) createSortMenu() error { + return self.c.Helpers().Refs.CreateSortOrderMenu(func(sortOrder string) error { + if self.c.GetAppState().RemoteBranchSortOrder != sortOrder { + self.c.GetAppState().RemoteBranchSortOrder = sortOrder + self.c.SaveAppStateAndLogError() + self.c.Contexts().RemoteBranches.SetSelectedLineIdx(0) + return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC, Scope: []types.RefreshableView{types.REMOTES}}) + } + return nil + }) +} + func (self *RemoteBranchesController) createResetMenu(selectedBranch *models.RemoteBranch) error { return self.c.Helpers().Refs.CreateGitResetMenu(selectedBranch.FullName()) } diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index 32392cee7..260976d64 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -555,6 +555,9 @@ type TranslationSet struct { LogMenuTitle string ToggleShowGitGraphAll string ShowGitGraph string + SortOrder string + SortAlphabetical string + SortByDate string SortCommits string CantChangeContextSizeError string OpenCommitInBrowser string @@ -1364,6 +1367,9 @@ func EnglishTranslationSet() TranslationSet { LogMenuTitle: "Commit Log Options", ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", ShowGitGraph: "Show git graph", + SortOrder: "Sort order", + SortAlphabetical: "Alphabetical", + SortByDate: "Date", SortCommits: "Commit sort order", CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", OpenCommitInBrowser: "Open commit in browser", diff --git a/pkg/i18n/japanese.go b/pkg/i18n/japanese.go index 03e4ff6f4..089c95ed6 100644 --- a/pkg/i18n/japanese.go +++ b/pkg/i18n/japanese.go @@ -461,8 +461,11 @@ func japaneseTranslationSet() TranslationSet { OpenLogMenu: "ログメニューを開く", LogMenuTitle: "コミットログオプション", // ToggleShowGitGraphAll: "Toggle show whole git graph (pass the `--all` flag to `git log`)", - ShowGitGraph: "コミットグラフの表示", - SortCommits: "コミットの表示順", + ShowGitGraph: "コミットグラフの表示", + SortOrder: "並び替え", + SortAlphabetical: "アルファベット順", + SortByDate: "日付順", + SortCommits: "コミットの表示順", // CantChangeContextSizeError: "Cannot change context while in patch building mode because we were too lazy to support it when releasing the feature. If you really want it, please let us know!", OpenCommitInBrowser: "ブラウザでコミットを開く", // LcViewBisectOptions: "View bisect options", diff --git a/pkg/i18n/russian.go b/pkg/i18n/russian.go index 3332f72cd..e4b67a77e 100644 --- a/pkg/i18n/russian.go +++ b/pkg/i18n/russian.go @@ -525,6 +525,9 @@ func RussianTranslationSet() TranslationSet { LogMenuTitle: "Параметры журнала коммитов", ToggleShowGitGraphAll: "Переключить отображение всего git графа (передать флаг --all в git log )", ShowGitGraph: "Показать git граф", + SortOrder: "Порядок сортировки", + SortAlphabetical: "По алфавиту", + SortByDate: "По дате", SortCommits: "Упорядочить коммиты", CantChangeContextSizeError: "Невозможно изменить контекст в режиме создания патча, потому что мы были слишком ленивы, чтобы поддерживать его при выпуске функции. Если вы действительно этого хотите, пожалуйста, дайте нам знать!", OpenCommitInBrowser: "Открыть коммит в браузере", diff --git a/schema/config.json b/schema/config.json index 186ca2576..54f6d6961 100644 --- a/schema/config.json +++ b/schema/config.json @@ -1014,6 +1014,10 @@ "fetchRemote": { "type": "string", "default": "f" + }, + "sortOrder": { + "type": "string", + "default": "s" } }, "additionalProperties": false, |