From 5c11b1ecb7cd5da23969c63569d40849ffd4e3d1 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sat, 24 Dec 2022 16:46:01 +1100
Subject: [PATCH] discard changes integration test

---
 pkg/gui/gui_driver.go                         |   4 +-
 pkg/integration/components/shell.go           |  26 ++++
 pkg/integration/tests/file/discard_changes.go | 123 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   1 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |  23 ----
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../expected/repo/.git_keep/HEAD              |   1 -
 .../expected/repo/.git_keep/ORIG_HEAD         |   1 -
 .../expected/repo/.git_keep/config            |  10 --
 .../expected/repo/.git_keep/description       |   1 -
 .../expected/repo/.git_keep/index             | Bin 1524 -> 0 bytes
 .../expected/repo/.git_keep/info/exclude      |   7 -
 .../expected/repo/.git_keep/logs/HEAD         |   8 --
 .../repo/.git_keep/logs/refs/heads/conflict   |   3 -
 .../.git_keep/logs/refs/heads/conflict_second |   4 -
 .../11/bdfc142c42c6ffaa904890ab61ec76262ec9ca |   2 -
 .../15/fe7f43604da957ffb663b4db95b60d0af66469 | Bin 48 -> 0 bytes
 .../1c/9488b0e1b8abd1ec8645b3345bdac91290b464 | Bin 350 -> 0 bytes
 .../26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 | Bin 19 -> 0 bytes
 .../2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d | Bin 27 -> 0 bytes
 .../30/07c9c07bf80aaa72b1f1f704e7fea622446678 | Bin 342 -> 0 bytes
 .../3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f | Bin 30 -> 0 bytes
 .../47/966dcaa8ee736e89279b895faf8707de898e04 | Bin 30 -> 0 bytes
 .../48/f9387742d3cc3017c1a7e292c9187e35321753 | Bin 31 -> 0 bytes
 .../4d/8452fc76beed0c7b15e40e45d06922bf746c5f | Bin 20 -> 0 bytes
 .../59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b | Bin 351 -> 0 bytes
 .../5a/d28e22767f979da2c198dc6c1003b25964e3da | Bin 20 -> 0 bytes
 .../5b/e4a414b32cf4204f889469942986d3d783da84 | Bin 23 -> 0 bytes
 .../7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 | Bin 30 -> 0 bytes
 .../85/4f08fa802293e0679d07771547fe9fe5d159e8 | Bin 201 -> 0 bytes
 .../89/44a13fdfc597e4cf1d23797df51977680f8e77 | Bin 21 -> 0 bytes
 .../8c/82faa1358ce6cddba19d59b2924cbcc5ef1c8e | Bin 147 -> 0 bytes
 .../90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 | Bin 20 -> 0 bytes
 .../90/be1f3056c4f471f977a28497b8d4b392c55a02 | Bin 22 -> 0 bytes
 .../98/e834e9cdae1191de7fafb2b6f334bddd0793e8 | Bin 116 -> 0 bytes
 .../99/76d7948def8b082e9d20135d6a04624d711752 |   1 -
 .../9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 | Bin 20 -> 0 bytes
 .../9f/5118ee216a6e44728305f90633b0c0e2ad235c | Bin 21 -> 0 bytes
 .../a1/be04124078e38a592c153942bf75edf210f1ed | Bin 48 -> 0 bytes
 .../a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c | Bin 30 -> 0 bytes
 .../ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 | Bin 19 -> 0 bytes
 .../c9/1b3b139ea108475c19839fcda3a4e33db4ccc9 |   2 -
 .../ce/e08babc6b109f011f42eaba5f79e6e693c09e7 | Bin 349 -> 0 bytes
 .../d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 | Bin 27 -> 0 bytes
 .../d7/98b86744c3997c186e0f0dc666f02943c797a7 | Bin 22 -> 0 bytes
 .../e9/55de60e73263440d4651e79e947ec8b2902373 | Bin 351 -> 0 bytes
 .../fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 | Bin 20 -> 0 bytes
 .../repo/.git_keep/refs/heads/conflict        |   1 -
 .../repo/.git_keep/refs/heads/conflict_second |   1 -
 .../expected/repo/both-added.txt              |   1 -
 .../expected/repo/both-modded.txt             |   1 -
 .../expected/repo/change-delete.txt           |   1 -
 .../expected/repo/changed-them-added-us.txt   |   1 -
 .../expected/repo/delete-change.txt           |   1 -
 .../expected/repo/deleted-staged.txt          |   1 -
 .../expected/repo/deleted-them.txt            |   1 -
 .../expected/repo/deleted.txt                 |   1 -
 .../expected/repo/double-modded.txt           |   1 -
 .../expected/repo/modded-staged.txt           |   1 -
 .../expected/repo/modded.txt                  |   1 -
 .../expected/repo/renamed.txt                 |   1 -
 .../discardFileChanges/recording.json         |   1 -
 test/integration/discardFileChanges/setup.sh  |  65 ---------
 test/integration/discardFileChanges/test.json |   1 -
 64 files changed, 153 insertions(+), 145 deletions(-)
 create mode 100644 pkg/integration/tests/file/discard_changes.go
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/FETCH_HEAD
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/ORIG_HEAD
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/config
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/description
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/index
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/info/exclude
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict_second
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/11/bdfc142c42c6ffaa904890ab61ec76262ec9ca
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/85/4f08fa802293e0679d07771547fe9fe5d159e8
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/8c/82faa1358ce6cddba19d59b2924cbcc5ef1c8e
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/98/e834e9cdae1191de7fafb2b6f334bddd0793e8
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/99/76d7948def8b082e9d20135d6a04624d711752
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/c9/1b3b139ea108475c19839fcda3a4e33db4ccc9
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict
 delete mode 100644 test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict_second
 delete mode 100644 test/integration/discardFileChanges/expected/repo/both-added.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/both-modded.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/change-delete.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/changed-them-added-us.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/delete-change.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/deleted-staged.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/deleted-them.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/deleted.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/double-modded.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/modded-staged.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/modded.txt
 delete mode 100644 test/integration/discardFileChanges/expected/repo/renamed.txt
 delete mode 100644 test/integration/discardFileChanges/recording.json
 delete mode 100644 test/integration/discardFileChanges/setup.sh
 delete mode 100644 test/integration/discardFileChanges/test.json

diff --git a/pkg/gui/gui_driver.go b/pkg/gui/gui_driver.go
index 919ad5416..268d53f1d 100644
--- a/pkg/gui/gui_driver.go
+++ b/pkg/gui/gui_driver.go
@@ -1,6 +1,8 @@
 package gui
 
 import (
+	"fmt"
+	"strings"
 	"time"
 
 	"github.com/gdamore/tcell/v2"
@@ -55,7 +57,7 @@ func (self *GuiDriver) Fail(message string) {
 	self.gui.g.Close()
 	// need to give the gui time to close
 	time.Sleep(time.Millisecond * 100)
-	panic(message)
+	panic(fmt.Sprintf("%s\nLog:\n%s", message, strings.Join(self.gui.CmdLog, "\n")))
 }
 
 // logs to the normal place that you log to i.e. viewable with `lazygit --logs`
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 409a17bc6..d0f0345dc 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -35,6 +35,32 @@ func (s *Shell) RunCommand(cmdStr string) *Shell {
 	return s
 }
 
+func (s *Shell) RunShellCommand(cmdStr string) *Shell {
+	cmd := secureexec.Command("sh", "-c", cmdStr)
+	cmd.Env = os.Environ()
+	cmd.Dir = s.dir
+
+	output, err := cmd.CombinedOutput()
+	if err != nil {
+		panic(fmt.Sprintf("error running shell command: %s\n%s", cmdStr, string(output)))
+	}
+
+	return s
+}
+
+func (s *Shell) RunShellCommandExpectError(cmdStr string) *Shell {
+	cmd := secureexec.Command("sh", "-c", cmdStr)
+	cmd.Env = os.Environ()
+	cmd.Dir = s.dir
+
+	output, err := cmd.CombinedOutput()
+	if err == nil {
+		panic(fmt.Sprintf("Expected error running shell command: %s\n%s", cmdStr, string(output)))
+	}
+
+	return s
+}
+
 func (s *Shell) CreateFile(path string, content string) *Shell {
 	fullPath := filepath.Join(s.dir, path)
 	err := os.WriteFile(fullPath, []byte(content), 0o644)
diff --git a/pkg/integration/tests/file/discard_changes.go b/pkg/integration/tests/file/discard_changes.go
new file mode 100644
index 000000000..ce2e2c65d
--- /dev/null
+++ b/pkg/integration/tests/file/discard_changes.go
@@ -0,0 +1,123 @@
+package file
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var DiscardChanges = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Discarding all possible permutations of changed files",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig: func(config *config.AppConfig) {
+	},
+	SetupRepo: func(shell *Shell) {
+		// typically we would use more bespoke shell methods here, but I struggled to find a way to do that,
+		// and this is copied over from a legacy integration test which did everything in a big shell script
+		// so I'm just copying it across.
+
+		// common stuff
+		shell.RunShellCommand(`echo test > both-deleted.txt`)
+		shell.RunShellCommand(`git checkout -b conflict && git add both-deleted.txt`)
+		shell.RunShellCommand(`echo bothmodded > both-modded.txt && git add both-modded.txt`)
+		shell.RunShellCommand(`echo haha > deleted-them.txt && git add deleted-them.txt`)
+		shell.RunShellCommand(`echo haha2 > deleted-us.txt && git add deleted-us.txt`)
+		shell.RunShellCommand(`echo mod > modded.txt & git add modded.txt`)
+		shell.RunShellCommand(`echo mod > modded-staged.txt & git add modded-staged.txt`)
+		shell.RunShellCommand(`echo del > deleted.txt && git add deleted.txt`)
+		shell.RunShellCommand(`echo del > deleted-staged.txt && git add deleted-staged.txt`)
+		shell.RunShellCommand(`echo change-delete > change-delete.txt && git add change-delete.txt`)
+		shell.RunShellCommand(`echo delete-change > delete-change.txt && git add delete-change.txt`)
+		shell.RunShellCommand(`echo double-modded > double-modded.txt && git add double-modded.txt`)
+		shell.RunShellCommand(`echo "renamed\nhaha" > renamed.txt && git add renamed.txt`)
+		shell.RunShellCommand(`git commit -m one`)
+
+		// stuff on other branch
+		shell.RunShellCommand(`git branch conflict_second && git mv both-deleted.txt added-them-changed-us.txt`)
+		shell.RunShellCommand(`git commit -m "both-deleted.txt renamed in added-them-changed-us.txt"`)
+		shell.RunShellCommand(`echo blah > both-added.txt && git add both-added.txt`)
+		shell.RunShellCommand(`echo mod1 > both-modded.txt && git add both-modded.txt`)
+		shell.RunShellCommand(`rm deleted-them.txt && git add deleted-them.txt`)
+		shell.RunShellCommand(`echo modded > deleted-us.txt && git add deleted-us.txt`)
+		shell.RunShellCommand(`git commit -m "two"`)
+
+		// stuff on our branch
+		shell.RunShellCommand(`git checkout conflict_second`)
+		shell.RunShellCommand(`git mv both-deleted.txt changed-them-added-us.txt`)
+		shell.RunShellCommand(`git commit -m "both-deleted.txt renamed in changed-them-added-us.txt"`)
+		shell.RunShellCommand(`echo mod2 > both-modded.txt && git add both-modded.txt`)
+		shell.RunShellCommand(`echo blah2 > both-added.txt && git add both-added.txt`)
+		shell.RunShellCommand(`echo modded > deleted-them.txt && git add deleted-them.txt`)
+		shell.RunShellCommand(`rm deleted-us.txt && git add deleted-us.txt`)
+		shell.RunShellCommand(`git commit -m "three"`)
+		shell.RunShellCommand(`git reset --hard conflict_second`)
+		shell.RunShellCommandExpectError(`git merge conflict`)
+
+		shell.RunShellCommand(`echo "new" > new.txt`)
+		shell.RunShellCommand(`echo "new staged" > new-staged.txt && git add new-staged.txt`)
+		shell.RunShellCommand(`echo mod2 > modded.txt`)
+		shell.RunShellCommand(`echo mod2 > modded-staged.txt && git add modded-staged.txt`)
+		shell.RunShellCommand(`rm deleted.txt`)
+		shell.RunShellCommand(`rm deleted-staged.txt && git add deleted-staged.txt`)
+		shell.RunShellCommand(`echo change-delete2 > change-delete.txt && git add change-delete.txt`)
+		shell.RunShellCommand(`rm change-delete.txt`)
+		shell.RunShellCommand(`rm delete-change.txt && git add delete-change.txt`)
+		shell.RunShellCommand(`echo "changed" > delete-change.txt`)
+		shell.RunShellCommand(`echo "change1" > double-modded.txt && git add double-modded.txt`)
+		shell.RunShellCommand(`echo "change2" > double-modded.txt`)
+		shell.RunShellCommand(`echo before > added-changed.txt && git add added-changed.txt`)
+		shell.RunShellCommand(`echo after > added-changed.txt`)
+		shell.RunShellCommand(`rm renamed.txt && git add renamed.txt`)
+		shell.RunShellCommand(`echo "renamed\nhaha" > renamed2.txt && git add renamed2.txt`)
+	},
+
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		assert.CommitCount(3)
+
+		type statusFile struct {
+			status string
+			path   string
+		}
+
+		discardOneByOne := func(files []statusFile) {
+			for _, file := range files {
+				assert.MatchSelectedLine(Contains(file.status + " " + file.path))
+				input.PressKeys(keys.Universal.Remove)
+				assert.InMenu()
+				assert.MatchCurrentViewContent(Contains("discard all changes"))
+				input.Confirm()
+			}
+		}
+
+		discardOneByOne([]statusFile{
+			{"UA", "added-them-changed-us.txt"},
+			{"AA", "both-added.txt"},
+			{"DD", "both-deleted.txt"},
+			{"UU", "both-modded.txt"},
+			{"AU", "changed-them-added-us.txt"},
+			{"UD", "deleted-them.txt"},
+			{"DU", "deleted-us.txt"},
+		})
+
+		assert.InConfirm()
+		assert.MatchCurrentViewTitle(Contains("continue"))
+		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
+		input.PressKeys(keys.Universal.Return)
+
+		discardOneByOne([]statusFile{
+			{"MD", "change-delete.txt"},
+			{"D ", "delete-change.txt"},
+			{"D ", "deleted-staged.txt"},
+			{" D", "deleted.txt"},
+			{"MM", "double-modded.txt"},
+			{"M ", "modded-staged.txt"},
+			{" M", "modded.txt"},
+			{"R ", "renamed.txt → renamed2.txt"},
+			{"AM", "added-changed.txt"},
+			{"A ", "new-staged.txt"},
+			{"??", "new.txt"},
+		})
+
+		assert.WorkingTreeFileCount(0)
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 53961363e..6f7476657 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -52,6 +52,7 @@ var tests = []*components.IntegrationTest{
 	custom_commands.MenuFromCommandsOutput,
 	custom_commands.MultiplePrompts,
 	file.DirWithUntrackedFile,
+	file.DiscardChanges,
 	interactive_rebase.AmendMerge,
 	interactive_rebase.One,
 	stash.Rename,
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/discardFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index 552587d35..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1,23 +0,0 @@
-Merge branch 'conflict' into conflict_second
-
-# Conflicts:
-#	added-them-changed-us.txt
-#	both-added.txt
-#	both-deleted.txt
-#	both-modded.txt
-#	changed-them-added-us.txt
-#	deleted-them.txt
-#	deleted-us.txt
-#
-# It looks like you may be committing a merge.
-# If this is not correct, please remove the file
-#	/Users/jesseduffieldduffield/go/src/github.com/jesseduffield/lazygit/test/integration/discardFileChanges/actual/.git/MERGE_HEAD
-# and try again.
-
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-#
-# On branch conflict_second
-# All conflicts fixed but you are still merging.
-#
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/FETCH_HEAD b/test/integration/discardFileChanges/expected/repo/.git_keep/FETCH_HEAD
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/HEAD b/test/integration/discardFileChanges/expected/repo/.git_keep/HEAD
deleted file mode 100644
index 52c2dc641..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/conflict_second
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/ORIG_HEAD b/test/integration/discardFileChanges/expected/repo/.git_keep/ORIG_HEAD
deleted file mode 100644
index e45dbd932..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/ORIG_HEAD
+++ /dev/null
@@ -1 +0,0 @@
-11bdfc142c42c6ffaa904890ab61ec76262ec9ca
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/config b/test/integration/discardFileChanges/expected/repo/.git_keep/config
deleted file mode 100644
index 8ae104545..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/config
+++ /dev/null
@@ -1,10 +0,0 @@
-[core]
-	repositoryformatversion = 0
-	filemode = true
-	bare = false
-	logallrefupdates = true
-	ignorecase = true
-	precomposeunicode = true
-[user]
-	email = CI@example.com
-	name = CI
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/description b/test/integration/discardFileChanges/expected/repo/.git_keep/description
deleted file mode 100644
index 498b267a8..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/description
+++ /dev/null
@@ -1 +0,0 @@
-Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/index b/test/integration/discardFileChanges/expected/repo/.git_keep/index
deleted file mode 100644
index 3021c8c326aef0202345328e3eaf54fee931dcef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1524
zcmZ?q402{*U|<4bo`mczn|bA0N?<f20|N`2E|&xYL*o(#2F9;IH6lRF*6Fg){{GSF
zPtMCKSJr-&EYINYD`((K$}h>#O-xBiP0=f<C;_Tt0GhLvPjKcl7!5T~4$VB)Uz2-h
zetQ>lH0dnA@voG>8P|Iry=34Ao0pr9WFXL-T_PNPFJLs(JQFnY_}r)Eo?7v)IImNE
zc4z$hcJ_OneJl)u$r*`x>8ZLYsX3`7sbD7p&DkLKx^x|khM32B2+cg!x$D;NZ1eeI
z5V~&iz76ZI9lz+Ze+h#m#Jm*Ul8n?`h`)79i(%&O=HJ;Y4m1}`L)~ePW-i~t2Xpjq
zrSJT4#f72xz+wA5*NoXU41y2`>Ozc%nYV}cQLR1DJTMJ4&j!srmep(TaL>CNWRoeD
zr8D1Zp5c-c#g7?;Am*j$7MCQZBjN@cKO01hPFw)_A4Eg_KMBoT_Ukitq`MrRStF6h
z&wDKGgQoNG>B|`eVCI7S4~cQ0IeWRpQr5s|s5>3d%){<ZZm4+>qd?9BrJsH5>c2qg
z5llnP1EyD$^vGvledAka`;~{;{rStkZ7A+`lHipGhGTwdQckKaQVIf^v!BKFl>>~1
zn&*aQ9*bJT`MZ1PFR)>qb&Oa0O<d%{!%mG1f)Im{gArto)v3jDFdAx}2T|s6Avp}}
zTd;o*X&zWu1T+s!L(TI=Gmo!IY5iPDjvH|{-nkRAX6F>!gr1zhz+IG@mzawZ!68Ae
zu0W%u7z~XR47eiCS68f`wYsIz`ZV{6ed>R2DrRd3xrPEmlkpZf+d@(@ELlU-vH^nu
zgQ0<enTZJlwrqfw>EUXjTCkNA6RHgw(?4|ZZ(4fbVWRhj<4OE;4}*<CP5@B-Alq?T
zixhxR<*3w^i`yy#BeY6og#Onpns=|({O`OM*oqq8mY_dn``+?Yi$39Vy^yK2za%Ff
z77Cb|8}3EyF2l$bsBSV~h`Q9LR8~KI?xKS;?&JtCZ;DKLd<$C!gBb*k2Y7%$8S?`r
t-YI6~xfC_C{$w-WaNyBe<rr+nM0tllGuPy5VRHKP#@YAz&x2+&`2jR69-06E

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/info/exclude b/test/integration/discardFileChanges/expected/repo/.git_keep/info/exclude
deleted file mode 100644
index 8e9f2071f..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/info/exclude
+++ /dev/null
@@ -1,7 +0,0 @@
-# git ls-files --others --exclude-from=.git/info/exclude
-# Lines that start with '#' are comments.
-# For a project mostly in C, the following would be a good set of
-# exclude patterns (uncomment them if you want to use them):
-# *.[oa]
-# *~
-.DS_Store
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/HEAD b/test/integration/discardFileChanges/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index cb32732a9..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,8 +0,0 @@
-0000000000000000000000000000000000000000 98e834e9cdae1191de7fafb2b6f334bddd0793e8 CI <CI@example.com> 1617671344 +1000	commit (initial): one
-98e834e9cdae1191de7fafb2b6f334bddd0793e8 9976d7948def8b082e9d20135d6a04624d711752 CI <CI@example.com> 1617671344 +1000	commit: both-deleted.txt renamed in added-them-changed-us.txt
-9976d7948def8b082e9d20135d6a04624d711752 8c82faa1358ce6cddba19d59b2924cbcc5ef1c8e CI <CI@example.com> 1617671344 +1000	commit: two
-8c82faa1358ce6cddba19d59b2924cbcc5ef1c8e 98e834e9cdae1191de7fafb2b6f334bddd0793e8 CI <CI@example.com> 1617671344 +1000	checkout: moving from conflict to conflict_second
-98e834e9cdae1191de7fafb2b6f334bddd0793e8 c91b3b139ea108475c19839fcda3a4e33db4ccc9 CI <CI@example.com> 1617671344 +1000	commit: both-deleted.txt renamed in changed-them-added-us.txt
-c91b3b139ea108475c19839fcda3a4e33db4ccc9 11bdfc142c42c6ffaa904890ab61ec76262ec9ca CI <CI@example.com> 1617671344 +1000	commit: three
-11bdfc142c42c6ffaa904890ab61ec76262ec9ca 11bdfc142c42c6ffaa904890ab61ec76262ec9ca CI <CI@example.com> 1617671344 +1000	reset: moving to conflict_second
-11bdfc142c42c6ffaa904890ab61ec76262ec9ca 854f08fa802293e0679d07771547fe9fe5d159e8 CI <CI@example.com> 1617671365 +1000	commit (merge): Merge branch 'conflict' into conflict_second
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict b/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict
deleted file mode 100644
index ba5017ea9..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict
+++ /dev/null
@@ -1,3 +0,0 @@
-0000000000000000000000000000000000000000 98e834e9cdae1191de7fafb2b6f334bddd0793e8 CI <CI@example.com> 1617671344 +1000	commit (initial): one
-98e834e9cdae1191de7fafb2b6f334bddd0793e8 9976d7948def8b082e9d20135d6a04624d711752 CI <CI@example.com> 1617671344 +1000	commit: both-deleted.txt renamed in added-them-changed-us.txt
-9976d7948def8b082e9d20135d6a04624d711752 8c82faa1358ce6cddba19d59b2924cbcc5ef1c8e CI <CI@example.com> 1617671344 +1000	commit: two
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict_second b/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict_second
deleted file mode 100644
index d7cdb2c6e..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/logs/refs/heads/conflict_second
+++ /dev/null
@@ -1,4 +0,0 @@
-0000000000000000000000000000000000000000 98e834e9cdae1191de7fafb2b6f334bddd0793e8 CI <CI@example.com> 1617671344 +1000	branch: Created from conflict
-98e834e9cdae1191de7fafb2b6f334bddd0793e8 c91b3b139ea108475c19839fcda3a4e33db4ccc9 CI <CI@example.com> 1617671344 +1000	commit: both-deleted.txt renamed in changed-them-added-us.txt
-c91b3b139ea108475c19839fcda3a4e33db4ccc9 11bdfc142c42c6ffaa904890ab61ec76262ec9ca CI <CI@example.com> 1617671344 +1000	commit: three
-11bdfc142c42c6ffaa904890ab61ec76262ec9ca 854f08fa802293e0679d07771547fe9fe5d159e8 CI <CI@example.com> 1617671365 +1000	commit (merge): Merge branch 'conflict' into conflict_second
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/11/bdfc142c42c6ffaa904890ab61ec76262ec9ca b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/11/bdfc142c42c6ffaa904890ab61ec76262ec9ca
deleted file mode 100644
index 28cbe4c0d..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/11/bdfc142c42c6ffaa904890ab61ec76262ec9ca
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0@Q�9E��d:i���cf2A��R"x|{���x����h8��̏�5I�\�Yr̀�D�ؐj)4�$���w{w��H�rL�e�����!��J�?���~^�u^��嶽�k�y� M	0F��;������㠻!z:�
\ No newline at end of file
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469
deleted file mode 100644
index cd888e56cf518570ce7c6a622c49a5f1027a4dc4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 48
zcmb<m^geacKgeKX%7#V;R{n5z@pVh)9N|&ci{@bXyyK06gQBIqzOK6Q&K7Ql)!+D2
E0JC2aOaK4?

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464
deleted file mode 100644
index 43396deed2e51a9a8d2f82f96e2002cebbb6782f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 350
zcmV-k0iphQ0V^p=O;s>8GGZ_^FfcPQQAkWlNlno$$w<xBP0mQnO9ygFi}gw>N*Ly@
zTfei-=Zit;y2<-CtiN{rqRajzP)$ksB^kP4onVy{stp>`KXmYKT6*ANqW6a5N&IsU
zBdg5K2U!AE>e~|Zr)=L_o@&u2e6ANVmG+n9#6y)rtk+FR%}Fgu1uJ%+mV0W&yW+e~
z_1T^A>)YAyb@s796+=`(oeWmI@WCAYTj@K0TybG2K5*DR&oyIq4T|Cv-Qto&p#Q+C
zSFgRpJ@0OiO{Q3u&U~wRhD%NqKSomx4TkG8cBH!;o>?Q2$Ip8#?SrQC@#)J^RT4BX
zzceW)RTn7~?5l5l>ukUBFuOm0`L_+l-A)p`@=!A&s*s(k)^Psr-uVk`SZ5vM)qWEf
wx$v-4BZ^|M{diOrrRF8(Lj7H(w0^E6$Bj4}@7#%5vvZ1VLQhTr0F@8Z^N4t_DgXcg

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281
deleted file mode 100644
index 0931fd1bd3ae67a11709c6569502cab617db4545..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19
acmb<m^geacKgb~Q#99A`ObnvY%ys}yuLlAE

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d
deleted file mode 100644
index 4b382c69aa300b95a7bd22c4c54ec9d0b78db617..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27
icmb<m^geacKghr&<%G9xxQ3pmkH7CjCI*|WY<vKRiU`L5

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678
deleted file mode 100644
index 6e1003c136a1f54fd41c24fc5de38b41eb0317a4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 342
zcmV-c0jd6Y0V^p=O;s>8G-WU}FfcPQQAo-!$<R$n%}FguP0=f<C}EhpZvD<SpDzZX
z>n88pu>RWdi!S?@Agj&IPf39)y>f9|WnhF>sf^J7x<&Ku)tdjE_X4UkIU_MIJr!y&
z*j)E%xu;gVE6(dwpWPY1zMcJEXCDhxF~oXZh#s)wg%9TF-%8*4<BAJI@qxqkd9E3=
zYfu!Y=oXhGrbFGadhH$Vd3S?sGR3lV=3C7(TymoLF`DX<jMQAP$x)a3l*;O-&s}tI
z#+@7i=1q|)k8h!=EiDGCoF6FhPBAObrKp+pC!6tx1CQ1!$DpbNE5m1berZxpsxDH9
z*;n8A*4cjLVRnE1@^2f8yPYI><)LOmR3Upyt>OILz4I5?u+BQhtNkV}a^Yd8Mij+h
o`|+qMO3h2mg@#d;()ziQ95>=@ymKdJ&CV&d2|YOh0CHE-ST`xJ>;M1&

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f
deleted file mode 100644
index 01335af9cb1ba115d2ffd38c8c9b43e84684e6bf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30
mcmb<m^geacKghr&(c`4P?<vo#XV3b3dip+OVhC1ccL4ywTMMB8

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04
deleted file mode 100644
index 0c3f6db6034a2913a7726b36984a0982d9bfe2bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30
mcmb<m^geacKghr&(c_%Q8E^lqzMf}2bv>UlF$Df&Hw6H`gA3~b

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753
deleted file mode 100644
index 96d96c7feaad918f388df7977912d1f7a8281c57..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 31
ncmb<m^geacKghr&)#IGU8E^lqzMf}2bv;cVF)>8WW6uBp$r=m%

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f
deleted file mode 100644
index 879dad0ba70403c3523afea0d80ea35925ce7065..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20
bcmb<m^geacKgb~U#94pCCrk_yKbQ*uSN{kM

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b
deleted file mode 100644
index 8c946f2fbe4dd64e8317c3143e6ceafc87cab033..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 351
zcmV-l0igbP0V^p=O;s>8GGQ<@FfcPQQAo-!$<R$qNl8u7E2$`9=yX|VfB)$8C+B6A
zD{H?>mS^zyl_RUn&4(-fHMw`@w|6l|lg{!R|4R9ralPl!OQ_Q1jKsY3RNa)+oYaz3
zu(|Hja!;*zSDe?WKD#r1eLMTT&OR0t#VNWa8L7Dtm*|!jgEh@vw|-}v&liKxb(8mP
zSby#KMVI|cpqd~?>q0C7D_;0uj{dFmoj<O)Fccp+Y@g?vF}nsuaf)tnNn$$GpR3p2
z;huLl$R<-POJ}~-Ji{d?iXWq?2Dt}p^7R=z(p?VEtdYp$=RKD8LDTv8^yR2(!OHL%
znO~Zeld6jpc=pvdzIC==d6?awzx>;V;%+AiUU{gQ5LL*IRcknZcklcKHmtLb@oK+`
xi(GivsS!mn*nT{!ic<3ubD=)3Qd&P(lH*34jd$+Etl2rmHlZgc001r?*QL_BwVeO}

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da
deleted file mode 100644
index a49384ff604c8486178beafbf3cf566283daef9a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20
bcmb<m^geacKgb~UgvS|=Crk{I!psu^RbU5L

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84
deleted file mode 100644
index 4cb486fbd59b5dfc8663765c4fcde69df337f1b9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 23
fcmb<m^geacKWIaO$2pHP-u|Xfm>ATBS!MzNbrcA{

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990
deleted file mode 100644
index d248b43e804b22aa8a33283b729c49d1f5b38a4b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30
mcmb<m^geacKghr&QN!!3_ZeT`&XcD-&UidwVhD*~PX_?NLJTJW

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/85/4f08fa802293e0679d07771547fe9fe5d159e8 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/85/4f08fa802293e0679d07771547fe9fe5d159e8
deleted file mode 100644
index 58a92001e3b9099c7a324da482d88edc7170ea11..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 201
zcmV;)05<=40gaEnY6CG4gj4G&wsR2(THWanLI}8Wk!J|It5tm9I~hfRJbu);4@@!h
z@iilD-?srS=BLqB!Dp$FW1^agIIRg67Pc&j)x}y$b{N>Pxl`9;03w$vxH_2$wGw5!
zrfi7=s>I-eQ^`UPKS^>^!o?@iAf+&2E<Ur%ZWR{sT2Yc3`We^O;e3JD^W|NCX}{m}
zMcV!b7%+y2OYrcF)><>^JTdg2y7|!lrNEsIxxz`>QE!`!6Kuz5@R*<9I%_e1no3wS
DiEd%_

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77
deleted file mode 100644
index 7bba19849cee224f475b9bf893981b9124de3177..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb~2<CNzagGWpZvO>%!0b9!l!T<mO

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/8c/82faa1358ce6cddba19d59b2924cbcc5ef1c8e b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/8c/82faa1358ce6cddba19d59b2924cbcc5ef1c8e
deleted file mode 100644
index 8f0db8b46852f859c8ea62b06f1c460bc0dd0fc1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaAJ3IZ_@1zqP9*$dL0^yC8~!mQ>PNxDVBm?1>;_~r<1-lC|2S6Z!)
zp)tZ?bP<guQV1CYb4Zy{N^rDfYv*t(5lw_lj?|vIyoQd^JNC0-xy>vXiEIGv!Y%<h
zL+la#VpMvMd+U1L^m*N`@=bMr%Bi$^(df`SkCsRu5dhSr^VE<(bu~Us{Q!&ZH~6G?
BN234$

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3
deleted file mode 100644
index 20cd3d0002a991f3c2dffc2187d3fd7db750f42e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20
bcmb<m^geacKgb}}<CN!_2TTl-Qq0o;RCfns

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02
deleted file mode 100644
index b448be25d05ba0f09555527e704d879c9d6adbc0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22
dcmb<m^geacKgb~6!^`)yzSmPG2BmzK5&&O32crN0

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/98/e834e9cdae1191de7fafb2b6f334bddd0793e8 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/98/e834e9cdae1191de7fafb2b6f334bddd0793e8
deleted file mode 100644
index a7d747f3f6017e06fba9f7d1182bf4e4c909292e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 116
zcmV-)0E_>40gcT;3WGolK+&$}6xj<U8AGB_ir~s)#34fqosP&9dVD>C+s}iaYANpq
z#PQa4cjyr{jR|$l1Dct}l`>^TcFk@QBeRGO!G7&kcbFG=%**6|E8EBKsg@^@kcv{z
W3>_h2IO{oSevyaz^>6@AL@MSxYc~M^

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/99/76d7948def8b082e9d20135d6a04624d711752 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/99/76d7948def8b082e9d20135d6a04624d711752
deleted file mode 100644
index c5f360872..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/99/76d7948def8b082e9d20135d6a04624d711752
+++ /dev/null
@@ -1 +0,0 @@
-x��Aj�0E��)f_4�*YJ!�c�����	��uo��{�ū[�7�)�7��������s��GK1��2���Q�1��\U��Y���2�ؼEU]�� O[��.W:_�_xI�q�[�$��bb��sn8�1e�g>�͖Qq�AO�2:֤C鶒�BG[�Ǻ��}���/~�L�
\ No newline at end of file
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4
deleted file mode 100644
index 4667dcf6f2b51dda01be1dd1679b0195ab0e185a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20
bcmb<m^geacKgb|e!&6u9Arph-GUojNN%aQ4

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c
deleted file mode 100644
index 6b863c7fc88cad592488061d73f9d5b27f8543bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb~YgvS{VlSfPpvTV#p09>XAvH$=8

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed
deleted file mode 100644
index 72043ce4795e744924a7c22e53baeb2bf78cc511..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 48
zcmb<m^geacKgeKX!iGi$R{n5z@pX6ph$!ntb1)S0?0lo(plE5Yud8mnvxS>s`XRn&
E0H<dV=l}o!

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c
deleted file mode 100644
index 935ea99311799a3b9342db6d19fb93d2246aaf21..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30
mcmb<m^geacKghr&(Zlnsr>^H!-*X;ky#1dtF$6`jn*sp12Mb34

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3
deleted file mode 100644
index 7ce146a5a77b54048c196767d8dc96e278a42107..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19
acmb<m^geacKgb}_!}IJzCI(SWW@7+IS_VG=

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/c9/1b3b139ea108475c19839fcda3a4e33db4ccc9 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/c9/1b3b139ea108475c19839fcda3a4e33db4ccc9
deleted file mode 100644
index 7744b72d7..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/c9/1b3b139ea108475c19839fcda3a4e33db4ccc9
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K��0��)z?8�gɂ0d�cH��8���@�?�
�{<
-����M�z}� �qd��lp�k�a4�	�Gԩؤ��N=�U(M��G��aL2�8��f�|af�ä�K�m��N��޹=�8֭��	&�h��~��Z��G	��U�dw�(o����n+�%�W� ڐ��|=?���XK.
\ No newline at end of file
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7
deleted file mode 100644
index 2e84f7f1654f32dc655cfd2755c208ba12b8601e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 349
zcmV-j0iynR0V^p=O;s>8GGQ<@FfcPQQAkWlNlno$$w<xBP0mQnO9ygFi}gw>N*Ly@
zTfei-=Zit;y2<-CtiN{rqRajzP)$ksB^kQ8`5>)erB^O)s|<|LDwPrXU$<!9y;}3X
z^IkxeLJZYSNzF+uNd+r*pO$-S#k=CXPW9QH@$1{!?{)UEKovt&K^+2Cyzs#s{afif
ze_U~4C_Zr5KF>8{b`6T+6y4&IM4+p|s#mYQ!#(eAkWHpomd<>ud4@|)6hB5&4e}{i
zZPcYcrLy|za~B<)aVJNBc~fM{<6CHIp#d>JP~x3pR-Q{yGwV+_;|&KMtyPXeRY}nD
z{L-YHROAq|ufFlEv;E4$?Ed`a-!>F?J4x`$L(PPQE3&uL8qVL{JAZ)<>#SqE+Hc|_
v7an$ML{SX3ACIb{)V#!8Xc$!~t)DB&aU;&gJ9lE%?3`ko(32AY=}OgreRi)<

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8
deleted file mode 100644
index 901facc5d0f38e8d6f7a8343b5bc8c5da36fe55c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 27
jcmb<m^geacKghr&#p9Iz$rES&Jw1INGBMbdvbg~OoK^~O

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7
deleted file mode 100644
index 7cb3efd4a13356d6a53b551fc7c950aea4a6eee2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22
dcmb<m^geacKgb~c#94n&Pv3`33`#Ru@&IT+2x9;M

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373
deleted file mode 100644
index 56e224b23728460a09fddff4e7088c76fe583c9e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 351
zcmV-l0igbP0V^p=O;s>8GGQ<@FfcPQQAo-!$<WQsPf1Bl(JQGaVYqT}TV-H`R;i58
z|GGu<?$w(Ao%aH&G&v(NFFjQ^B{e6tBo(aKeOm6R74M4kI@M=)#;<Q@zt`Evf}%J@
zw<IGqS2q!4yl!bRSkv5f>vy*Kd@%@JH+kQN_1BJHblJZIstIDWF2o|R;)M_9=-*1;
z`QwTUL-B#b_Ia)uvujWkr|1@!B&I_hzk2N*?s<2EY%;~Nbmm*lGhA|__%WJlkbA%;
zM_uYuDyyG9chSKacX9-nH$|pAzJ;b1>frf-67LkV@?46VS%0z_Z#eL1t#S;iO0a?W
zEYB}Z%1K2IX8Y<J-#Xi`Jk0LTU;b@FakrBMuRPRDNMs;;OReGj-M#Y{*s#tz#;g4%
xE^^^vr$!XTVEgf?DoV{u%!P(gmD2jTk{mbUY`k+PX3fqiwh28s0RV0J)quz3uaW=&

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 b/test/integration/discardFileChanges/expected/repo/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9
deleted file mode 100644
index 4fc7dee503dafb7062a87bd94341f9ef5f529f75..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20
bcmb<m^geacKgb~U#94pCM@$S7znBXFSNI4G

diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict b/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict
deleted file mode 100644
index 5984d595a..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict
+++ /dev/null
@@ -1 +0,0 @@
-8c82faa1358ce6cddba19d59b2924cbcc5ef1c8e
diff --git a/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict_second b/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict_second
deleted file mode 100644
index f7790393b..000000000
--- a/test/integration/discardFileChanges/expected/repo/.git_keep/refs/heads/conflict_second
+++ /dev/null
@@ -1 +0,0 @@
-854f08fa802293e0679d07771547fe9fe5d159e8
diff --git a/test/integration/discardFileChanges/expected/repo/both-added.txt b/test/integration/discardFileChanges/expected/repo/both-added.txt
deleted file mode 100644
index 8944a13fd..000000000
--- a/test/integration/discardFileChanges/expected/repo/both-added.txt
+++ /dev/null
@@ -1 +0,0 @@
-blah2
diff --git a/test/integration/discardFileChanges/expected/repo/both-modded.txt b/test/integration/discardFileChanges/expected/repo/both-modded.txt
deleted file mode 100644
index fa938d99f..000000000
--- a/test/integration/discardFileChanges/expected/repo/both-modded.txt
+++ /dev/null
@@ -1 +0,0 @@
-mod2
diff --git a/test/integration/discardFileChanges/expected/repo/change-delete.txt b/test/integration/discardFileChanges/expected/repo/change-delete.txt
deleted file mode 100644
index 47966dcaa..000000000
--- a/test/integration/discardFileChanges/expected/repo/change-delete.txt
+++ /dev/null
@@ -1 +0,0 @@
-change-delete
diff --git a/test/integration/discardFileChanges/expected/repo/changed-them-added-us.txt b/test/integration/discardFileChanges/expected/repo/changed-them-added-us.txt
deleted file mode 100644
index 9daeafb98..000000000
--- a/test/integration/discardFileChanges/expected/repo/changed-them-added-us.txt
+++ /dev/null
@@ -1 +0,0 @@
-test
diff --git a/test/integration/discardFileChanges/expected/repo/delete-change.txt b/test/integration/discardFileChanges/expected/repo/delete-change.txt
deleted file mode 100644
index a1e09c2fd..000000000
--- a/test/integration/discardFileChanges/expected/repo/delete-change.txt
+++ /dev/null
@@ -1 +0,0 @@
-delete-change
diff --git a/test/integration/discardFileChanges/expected/repo/deleted-staged.txt b/test/integration/discardFileChanges/expected/repo/deleted-staged.txt
deleted file mode 100644
index abaddc0b9..000000000
--- a/test/integration/discardFileChanges/expected/repo/deleted-staged.txt
+++ /dev/null
@@ -1 +0,0 @@
-del
diff --git a/test/integration/discardFileChanges/expected/repo/deleted-them.txt b/test/integration/discardFileChanges/expected/repo/deleted-them.txt
deleted file mode 100644
index d798b8674..000000000
--- a/test/integration/discardFileChanges/expected/repo/deleted-them.txt
+++ /dev/null
@@ -1 +0,0 @@
-modded
diff --git a/test/integration/discardFileChanges/expected/repo/deleted.txt b/test/integration/discardFileChanges/expected/repo/deleted.txt
deleted file mode 100644
index abaddc0b9..000000000
--- a/test/integration/discardFileChanges/expected/repo/deleted.txt
+++ /dev/null
@@ -1 +0,0 @@
-del
diff --git a/test/integration/discardFileChanges/expected/repo/double-modded.txt b/test/integration/discardFileChanges/expected/repo/double-modded.txt
deleted file mode 100644
index 3f7bd8f68..000000000
--- a/test/integration/discardFileChanges/expected/repo/double-modded.txt
+++ /dev/null
@@ -1 +0,0 @@
-double-modded
diff --git a/test/integration/discardFileChanges/expected/repo/modded-staged.txt b/test/integration/discardFileChanges/expected/repo/modded-staged.txt
deleted file mode 100644
index 2680cfddb..000000000
--- a/test/integration/discardFileChanges/expected/repo/modded-staged.txt
+++ /dev/null
@@ -1 +0,0 @@
-mod
diff --git a/test/integration/discardFileChanges/expected/repo/modded.txt b/test/integration/discardFileChanges/expected/repo/modded.txt
deleted file mode 100644
index 2680cfddb..000000000
--- a/test/integration/discardFileChanges/expected/repo/modded.txt
+++ /dev/null
@@ -1 +0,0 @@
-mod
diff --git a/test/integration/discardFileChanges/expected/repo/renamed.txt b/test/integration/discardFileChanges/expected/repo/renamed.txt
deleted file mode 100644
index 7a22af9d1..000000000
--- a/test/integration/discardFileChanges/expected/repo/renamed.txt
+++ /dev/null
@@ -1 +0,0 @@
-renamed\nhaha
diff --git a/test/integration/discardFileChanges/recording.json b/test/integration/discardFileChanges/recording.json
deleted file mode 100644
index 4b64e16f0..000000000
--- a/test/integration/discardFileChanges/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":966,"Mod":0,"Key":256,"Ch":100},{"Timestamp":1564,"Mod":0,"Key":13,"Ch":13},{"Timestamp":2093,"Mod":0,"Key":256,"Ch":100},{"Timestamp":2621,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3173,"Mod":0,"Key":256,"Ch":100},{"Timestamp":3652,"Mod":0,"Key":13,"Ch":13},{"Timestamp":4165,"Mod":0,"Key":256,"Ch":100},{"Timestamp":4629,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5190,"Mod":0,"Key":256,"Ch":100},{"Timestamp":5686,"Mod":0,"Key":13,"Ch":13},{"Timestamp":6198,"Mod":0,"Key":256,"Ch":100},{"Timestamp":6733,"Mod":0,"Key":13,"Ch":13},{"Timestamp":7254,"Mod":0,"Key":256,"Ch":100},{"Timestamp":7789,"Mod":0,"Key":13,"Ch":13},{"Timestamp":8285,"Mod":0,"Key":256,"Ch":100},{"Timestamp":8773,"Mod":0,"Key":13,"Ch":13},{"Timestamp":9237,"Mod":0,"Key":256,"Ch":100},{"Timestamp":9725,"Mod":0,"Key":13,"Ch":13},{"Timestamp":10181,"Mod":0,"Key":256,"Ch":100},{"Timestamp":10653,"Mod":0,"Key":13,"Ch":13},{"Timestamp":11125,"Mod":0,"Key":256,"Ch":100},{"Timestamp":11621,"Mod":0,"Key":13,"Ch":13},{"Timestamp":12093,"Mod":0,"Key":256,"Ch":100},{"Timestamp":12565,"Mod":0,"Key":13,"Ch":13},{"Timestamp":13037,"Mod":0,"Key":256,"Ch":100},{"Timestamp":13509,"Mod":0,"Key":13,"Ch":13},{"Timestamp":13965,"Mod":0,"Key":256,"Ch":100},{"Timestamp":14461,"Mod":0,"Key":13,"Ch":13},{"Timestamp":14909,"Mod":0,"Key":256,"Ch":100},{"Timestamp":15382,"Mod":0,"Key":13,"Ch":13},{"Timestamp":15853,"Mod":0,"Key":256,"Ch":100},{"Timestamp":16325,"Mod":0,"Key":13,"Ch":13},{"Timestamp":16765,"Mod":0,"Key":256,"Ch":100},{"Timestamp":17222,"Mod":0,"Key":13,"Ch":13},{"Timestamp":17637,"Mod":0,"Key":256,"Ch":100},{"Timestamp":18077,"Mod":0,"Key":13,"Ch":13},{"Timestamp":20190,"Mod":0,"Key":256,"Ch":109},{"Timestamp":20447,"Mod":0,"Key":13,"Ch":13},{"Timestamp":21414,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":127,"Height":23}]}
\ No newline at end of file
diff --git a/test/integration/discardFileChanges/setup.sh b/test/integration/discardFileChanges/setup.sh
deleted file mode 100644
index ac9573e82..000000000
--- a/test/integration/discardFileChanges/setup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/sh
-
-# expecting an error so we're not setting this
-# set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-# common stuff
-echo test > both-deleted.txt
-git checkout -b conflict && git add both-deleted.txt
-echo bothmodded > both-modded.txt && git add both-modded.txt
-echo haha > deleted-them.txt && git add deleted-them.txt
-echo haha2 > deleted-us.txt && git add deleted-us.txt
-echo mod > modded.txt & git add modded.txt
-echo mod > modded-staged.txt & git add modded-staged.txt
-echo del > deleted.txt && git add deleted.txt
-echo del > deleted-staged.txt && git add deleted-staged.txt
-echo change-delete > change-delete.txt && git add change-delete.txt
-echo delete-change > delete-change.txt && git add delete-change.txt
-echo double-modded > double-modded.txt && git add double-modded.txt
-echo "renamed\nhaha" > renamed.txt && git add renamed.txt
-git commit -m one
-
-# stuff on other branch
-git branch conflict_second && git mv both-deleted.txt added-them-changed-us.txt
-git commit -m "both-deleted.txt renamed in added-them-changed-us.txt"
-echo blah > both-added.txt && git add both-added.txt
-echo mod1 > both-modded.txt && git add both-modded.txt
-rm deleted-them.txt && git add deleted-them.txt
-echo modded > deleted-us.txt && git add deleted-us.txt
-git commit -m "two"
-
-# stuff on our branch
-git checkout conflict_second
-git mv both-deleted.txt changed-them-added-us.txt
-git commit -m "both-deleted.txt renamed in changed-them-added-us.txt"
-echo mod2 > both-modded.txt && git add both-modded.txt
-echo blah2 > both-added.txt && git add both-added.txt
-echo modded > deleted-them.txt && git add deleted-them.txt
-rm deleted-us.txt && git add deleted-us.txt
-git commit -m "three"
-git reset --hard conflict_second
-git merge conflict
-
-echo "new" > new.txt
-echo "new staged" > new-staged.txt && git add new-staged.txt
-echo mod2 > modded.txt
-echo mod2 > modded-staged.txt && git add modded-staged.txt
-rm deleted.txt
-rm deleted-staged.txt && git add deleted-staged.txt
-echo change-delete2 > change-delete.txt && git add change-delete.txt
-rm change-delete.txt
-rm delete-change.txt && git add delete-change.txt
-echo "changed" > delete-change.txt
-echo "change1" > double-modded.txt && git add double-modded.txt
-echo "change2" > double-modded.txt
-echo before > added-changed.txt && git add added-changed.txt
-echo after > added-changed.txt
-rm renamed.txt && git add renamed.txt
-echo "renamed\nhaha" > renamed2.txt && git add renamed2.txt
diff --git a/test/integration/discardFileChanges/test.json b/test/integration/discardFileChanges/test.json
deleted file mode 100644
index 8b82a5184..000000000
--- a/test/integration/discardFileChanges/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "description": "discard file changes for various kinds of situations (merge conflicts, etc). Skipped because it's failing on CI for some reason", "speed": 5, "skip": true }