From b1bc437d1b91b33c767a31be15f8f41e90c4d8f0 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 12 Aug 2023 16:52:40 +1000 Subject: [PATCH 1/3] Factor out common config setup functions in demo package --- .../tests/demo/amend_old_commit.go | 2 +- pkg/integration/tests/demo/bisect.go | 2 +- pkg/integration/tests/demo/cherry_pick.go | 2 +- pkg/integration/tests/demo/commit_and_push.go | 2 +- pkg/integration/tests/demo/commit_graph.go | 10 ++-------- pkg/integration/tests/demo/custom_command.go | 4 +--- pkg/integration/tests/demo/custom_patch.go | 2 +- pkg/integration/tests/demo/filter.go | 2 +- .../tests/demo/interactive_rebase.go | 2 +- .../tests/demo/nuke_working_tree.go | 2 +- pkg/integration/tests/demo/rebase_onto.go | 2 +- pkg/integration/tests/demo/shared.go | 19 +++++++++++++++++++ pkg/integration/tests/demo/stage_lines.go | 2 +- pkg/integration/tests/demo/undo.go | 2 +- .../demo/worktree_create_from_branches.go | 4 +--- 15 files changed, 34 insertions(+), 25 deletions(-) create mode 100644 pkg/integration/tests/demo/shared.go diff --git a/pkg/integration/tests/demo/amend_old_commit.go b/pkg/integration/tests/demo/amend_old_commit.go index 522b11fc0..ac91a34e7 100644 --- a/pkg/integration/tests/demo/amend_old_commit.go +++ b/pkg/integration/tests/demo/amend_old_commit.go @@ -11,7 +11,7 @@ var AmendOldCommit = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) config.UserConfig.Gui.ShowFileTree = false }, SetupRepo: func(shell *Shell) { diff --git a/pkg/integration/tests/demo/bisect.go b/pkg/integration/tests/demo/bisect.go index edae1146f..f80ce86a9 100644 --- a/pkg/integration/tests/demo/bisect.go +++ b/pkg/integration/tests/demo/bisect.go @@ -11,7 +11,7 @@ var Bisect = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateFile("my-file.txt", "myfile content") diff --git a/pkg/integration/tests/demo/cherry_pick.go b/pkg/integration/tests/demo/cherry_pick.go index d6f16b19b..9f1e10886 100644 --- a/pkg/integration/tests/demo/cherry_pick.go +++ b/pkg/integration/tests/demo/cherry_pick.go @@ -11,7 +11,7 @@ var CherryPick = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(50) diff --git a/pkg/integration/tests/demo/commit_and_push.go b/pkg/integration/tests/demo/commit_and_push.go index 545d24d1e..360d685ce 100644 --- a/pkg/integration/tests/demo/commit_and_push.go +++ b/pkg/integration/tests/demo/commit_and_push.go @@ -11,7 +11,7 @@ var CommitAndPush = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateFile("my-file.txt", "myfile content") diff --git a/pkg/integration/tests/demo/commit_graph.go b/pkg/integration/tests/demo/commit_graph.go index 5ccaecf43..100bfca2b 100644 --- a/pkg/integration/tests/demo/commit_graph.go +++ b/pkg/integration/tests/demo/commit_graph.go @@ -11,14 +11,8 @@ var CommitGraph = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" - config.UserConfig.Gui.AuthorColors = map[string]string{ - "Fredrica Greenhill": "#fb5aa3", - "Oscar Reuenthal": "#86c82f", - "Paul Oberstein": "#ffd500", - "Siegfried Kircheis": "#fe7e11", - "Yang Wen-li": "#8e3ccb", - } + setDefaultDemoConfig(config) + setGeneratedAuthorColours(config) }, SetupRepo: func(shell *Shell) { shell.CreateRepoHistory() diff --git a/pkg/integration/tests/demo/custom_command.go b/pkg/integration/tests/demo/custom_command.go index 46b6b515e..147a63ba4 100644 --- a/pkg/integration/tests/demo/custom_command.go +++ b/pkg/integration/tests/demo/custom_command.go @@ -24,9 +24,7 @@ var CustomCommand = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(cfg *config.AppConfig) { - // No idea why I had to use version 2: it should be using my own computer's - // font and the one iterm uses is version 3. - cfg.UserConfig.Gui.NerdFontsVersion = "2" + setDefaultDemoConfig(cfg) cfg.UserConfig.CustomCommands = []config.CustomCommand{ { diff --git a/pkg/integration/tests/demo/custom_patch.go b/pkg/integration/tests/demo/custom_patch.go index 70aecd668..3a1440eda 100644 --- a/pkg/integration/tests/demo/custom_patch.go +++ b/pkg/integration/tests/demo/custom_patch.go @@ -21,7 +21,7 @@ var CustomPatch = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(cfg *config.AppConfig) { - cfg.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(cfg) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(30) diff --git a/pkg/integration/tests/demo/filter.go b/pkg/integration/tests/demo/filter.go index c6b6acb1a..84fba65f9 100644 --- a/pkg/integration/tests/demo/filter.go +++ b/pkg/integration/tests/demo/filter.go @@ -11,7 +11,7 @@ var Filter = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(30) diff --git a/pkg/integration/tests/demo/interactive_rebase.go b/pkg/integration/tests/demo/interactive_rebase.go index 56d711c55..3d6709d87 100644 --- a/pkg/integration/tests/demo/interactive_rebase.go +++ b/pkg/integration/tests/demo/interactive_rebase.go @@ -11,7 +11,7 @@ var InteractiveRebase = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateFile("my-file.txt", "myfile content") diff --git a/pkg/integration/tests/demo/nuke_working_tree.go b/pkg/integration/tests/demo/nuke_working_tree.go index c6dde3933..5fb21967d 100644 --- a/pkg/integration/tests/demo/nuke_working_tree.go +++ b/pkg/integration/tests/demo/nuke_working_tree.go @@ -11,7 +11,7 @@ var NukeWorkingTree = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) config.UserConfig.Gui.AnimateExplosion = true }, SetupRepo: func(shell *Shell) { diff --git a/pkg/integration/tests/demo/rebase_onto.go b/pkg/integration/tests/demo/rebase_onto.go index 381a2f050..7f5c564a1 100644 --- a/pkg/integration/tests/demo/rebase_onto.go +++ b/pkg/integration/tests/demo/rebase_onto.go @@ -11,7 +11,7 @@ var RebaseOnto = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(60) diff --git a/pkg/integration/tests/demo/shared.go b/pkg/integration/tests/demo/shared.go new file mode 100644 index 000000000..3b99ddac7 --- /dev/null +++ b/pkg/integration/tests/demo/shared.go @@ -0,0 +1,19 @@ +package demo + +import "github.com/jesseduffield/lazygit/pkg/config" + +// Gives us nicer colours when we generate a git repo history with `shell.CreateRepoHistory()` +func setGeneratedAuthorColours(config *config.AppConfig) { + config.UserConfig.Gui.AuthorColors = map[string]string{ + "Fredrica Greenhill": "#fb5aa3", + "Oscar Reuenthal": "#86c82f", + "Paul Oberstein": "#ffd500", + "Siegfried Kircheis": "#fe7e11", + "Yang Wen-li": "#8e3ccb", + } +} + +func setDefaultDemoConfig(config *config.AppConfig) { + // demos look much nicers with icons shown + config.UserConfig.Gui.NerdFontsVersion = "3" +} diff --git a/pkg/integration/tests/demo/stage_lines.go b/pkg/integration/tests/demo/stage_lines.go index df29ce61d..4e8db4fd4 100644 --- a/pkg/integration/tests/demo/stage_lines.go +++ b/pkg/integration/tests/demo/stage_lines.go @@ -39,7 +39,7 @@ var StageLines = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) config.UserConfig.Gui.ShowFileTree = false config.UserConfig.Gui.ShowCommandLog = false }, diff --git a/pkg/integration/tests/demo/undo.go b/pkg/integration/tests/demo/undo.go index 725090ed6..4b47e0726 100644 --- a/pkg/integration/tests/demo/undo.go +++ b/pkg/integration/tests/demo/undo.go @@ -11,7 +11,7 @@ var Undo = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(config *config.AppConfig) { - config.UserConfig.Gui.NerdFontsVersion = "3" + setDefaultDemoConfig(config) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(30) diff --git a/pkg/integration/tests/demo/worktree_create_from_branches.go b/pkg/integration/tests/demo/worktree_create_from_branches.go index d25b531d2..39d2cb73e 100644 --- a/pkg/integration/tests/demo/worktree_create_from_branches.go +++ b/pkg/integration/tests/demo/worktree_create_from_branches.go @@ -11,9 +11,7 @@ var WorktreeCreateFromBranches = NewIntegrationTest(NewIntegrationTestArgs{ Skip: false, IsDemo: true, SetupConfig: func(cfg *config.AppConfig) { - // No idea why I had to use version 2: it should be using my own computer's - // font and the one iterm uses is version 3. - cfg.UserConfig.Gui.NerdFontsVersion = "2" + setDefaultDemoConfig(cfg) }, SetupRepo: func(shell *Shell) { shell.CreateNCommitsWithRandomMessages(30) From 83d642b74f1aada9cc0da5524b6021feb80e5766 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 12 Aug 2023 17:17:32 +1000 Subject: [PATCH 2/3] Add demo for diffing two commits --- README.md | 6 +++ pkg/integration/tests/demo/diff_commits.go | 44 ++++++++++++++++++++++ pkg/integration/tests/test_list.go | 1 + 3 files changed, 51 insertions(+) create mode 100644 pkg/integration/tests/demo/diff_commits.go diff --git a/README.md b/README.md index d4915217e..7ba793631 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,12 @@ When viewing the commit graph in an enlarged window (use `+` and `_` to cycle wi ![commit_graph](../assets/demo/commit_graph-compressed.gif) +### Compare two commits + +If you press `shift+w` on a commit (or branch/ref) a menu will open that allows you to mark that commit so that any other commit you select will be diffed against it. Once you've selected the second commit, you'll see the diff in the main view and if you press `` you'll see the files of the diff. You can press `shift+w` to view the diff menu again to see options like reversing the diff direction or exiting diff mode. You can also exit diff mode by pressing ``. + +![diff_commits](../assets/demo/diff_commits-compressed.gif) + ## Tutorials [](https://youtu.be/CPLdltN7wgE) diff --git a/pkg/integration/tests/demo/diff_commits.go b/pkg/integration/tests/demo/diff_commits.go new file mode 100644 index 000000000..da83564a7 --- /dev/null +++ b/pkg/integration/tests/demo/diff_commits.go @@ -0,0 +1,44 @@ +package demo + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var DiffCommits = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Diff two commits", + ExtraCmdArgs: []string{}, + Skip: false, + IsDemo: true, + SetupConfig: func(config *config.AppConfig) { + setDefaultDemoConfig(config) + + config.UserConfig.Gui.ShowFileTree = false + config.UserConfig.Gui.ShowCommandLog = false + }, + SetupRepo: func(shell *Shell) { + shell.CreateNCommitsWithRandomMessages(50) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.SetCaptionPrefix("Compare two commits") + t.Wait(1000) + + t.Views().Commits(). + Focus(). + NavigateToLine(Contains("Replace deprecated lifecycle methods in React components")). + Wait(1000). + Press(keys.Universal.DiffingMenu). + Tap(func() { + t.ExpectPopup().Menu(). + Title(Equals("Diffing")). + TopLines( + MatchesRegexp(`Diff .*`), + ). + Wait(500). + Confirm() + }). + NavigateToLine(Contains("Move constants to a separate config file")). + Wait(1000). + PressEnter() + }, +}) diff --git a/pkg/integration/tests/test_list.go b/pkg/integration/tests/test_list.go index 44ff22514..a8b22413c 100644 --- a/pkg/integration/tests/test_list.go +++ b/pkg/integration/tests/test_list.go @@ -96,6 +96,7 @@ var tests = []*components.IntegrationTest{ demo.CommitGraph, demo.CustomCommand, demo.CustomPatch, + demo.DiffCommits, demo.Filter, demo.InteractiveRebase, demo.NukeWorkingTree, From 1c6cfafba7aac5c58ea6a74c004823bdf886637c Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 12 Aug 2023 17:27:25 +1000 Subject: [PATCH 3/3] Add features to table of contents --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 7ba793631..da19276ba 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,20 @@ If you're a mere mortal like me and you're tired of hearing how powerful git is ## Table of contents - [Features](#features) + - [Stage individual lines](#stage-individual-lines) + - [Interactive Rebase](#interactive-rebase) + - [Cherry-pick](#cherry-pick) + - [Bisect](#bisect) + - [Nuke the working tree](#nuke-the-working-tree) + - [Amend an old commit](#amend-an-old-commit) + - [Filter](#filter) + - [Invoke a custom command](#invoke-a-custom-command) + - [Worktrees](#worktrees) + - [Rebase magic (custom patches)](#rebase-magic-custom-patches) + - [Rebase from marked base commit](#rebase-from-marked-base-commit) + - [Undo](#undo) + - [Commit graph](#commit-graph) + - [Compare two commits](#compare-two-commits) - [Tutorials](#tutorials) - [Installation](#installation) - [Binary releases](#binary-releases)