From 6422b399e73967f012c29b05c9a26fc9e852711a Mon Sep 17 00:00:00 2001
From: lkearn <liam@sproutlabs.com.au>
Date: Tue, 9 Aug 2022 17:58:43 +1000
Subject: [PATCH 01/44] Feat: Add emacs character navigation, because I'm weird
 like that :)

---
 pkg/gui/editors.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkg/gui/editors.go b/pkg/gui/editors.go
index 6f40c6d58..777d897d8 100644
--- a/pkg/gui/editors.go
+++ b/pkg/gui/editors.go
@@ -22,9 +22,9 @@ func (gui *Gui) handleEditorKeypress(textArea *gocui.TextArea, key gocui.Key, ch
 		textArea.MoveCursorDown()
 	case key == gocui.KeyArrowUp:
 		textArea.MoveCursorUp()
-	case key == gocui.KeyArrowLeft:
+	case key == gocui.KeyArrowLeft || key == gocui.KeyCtrlB:
 		textArea.MoveCursorLeft()
-	case key == gocui.KeyArrowRight:
+	case key == gocui.KeyArrowRight || key == gocui.KeyCtrlF:
 		textArea.MoveCursorRight()
 	case key == newlineKey:
 		if allowMultiline {

From 47f84b6aea493d3dcfe4f72b9c584b8225171f5c Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 18:51:24 +1000
Subject: [PATCH 02/44] better assertions

---
 pkg/integration/components/assert.go | 8 ++++++++
 pkg/integration/components/input.go  | 3 +++
 2 files changed, 11 insertions(+)

diff --git a/pkg/integration/components/assert.go b/pkg/integration/components/assert.go
index ae363eb8d..7316eafe4 100644
--- a/pkg/integration/components/assert.go
+++ b/pkg/integration/components/assert.go
@@ -78,6 +78,14 @@ func (self *Assert) CommitCount(expectedCount int) {
 	})
 }
 
+func (self *Assert) AtLeastOneCommit() {
+	self.assertWithRetries(func() (bool, string) {
+		actualCount := len(self.gui.Model().Commits)
+
+		return actualCount > 0, "Expected at least one commit present"
+	})
+}
+
 func (self *Assert) MatchHeadCommitMessage(matcher *matcher) {
 	self.assertWithRetries(func() (bool, string) {
 		return len(self.gui.Model().Commits) > 0, "Expected at least one commit to be present"
diff --git a/pkg/integration/components/input.go b/pkg/integration/components/input.go
index 63e902613..2f0666ebc 100644
--- a/pkg/integration/components/input.go
+++ b/pkg/integration/components/input.go
@@ -147,17 +147,20 @@ func (self *Input) NavigateToListItemContainingText(text string) {
 	if matchCount == 1 {
 		selectedLineIdx := view.SelectedLineIdx()
 		if selectedLineIdx == matchIndex {
+			self.assert.MatchSelectedLine(Contains(text))
 			return
 		}
 		if selectedLineIdx < matchIndex {
 			for i := selectedLineIdx; i < matchIndex; i++ {
 				self.NextItem()
 			}
+			self.assert.MatchSelectedLine(Contains(text))
 			return
 		} else {
 			for i := selectedLineIdx; i > matchIndex; i-- {
 				self.PreviousItem()
 			}
+			self.assert.MatchSelectedLine(Contains(text))
 			return
 		}
 	}

From 79620fc6cfa712dd03adfd7d4b46339bbfc1575a Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 18:51:34 +1000
Subject: [PATCH 03/44] don't quit integration test tui upon error

---
 pkg/integration/clients/cli.go | 4 ++--
 pkg/integration/clients/tui.go | 6 ++++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/pkg/integration/clients/cli.go b/pkg/integration/clients/cli.go
index eedb82984..17c379c85 100644
--- a/pkg/integration/clients/cli.go
+++ b/pkg/integration/clients/cli.go
@@ -33,7 +33,7 @@ func RunCLI(testNames []string, slow bool) {
 		getTestsToRun(testNames),
 		log.Printf,
 		runCmdInTerminal,
-		runAndPrintError,
+		runAndPrintFatalError,
 		getModeFromEnv(),
 		keyPressDelay,
 	)
@@ -42,7 +42,7 @@ func RunCLI(testNames []string, slow bool) {
 	}
 }
 
-func runAndPrintError(test *components.IntegrationTest, f func() error) {
+func runAndPrintFatalError(test *components.IntegrationTest, f func() error) {
 	if err := f(); err != nil {
 		log.Fatalf(err.Error())
 	}
diff --git a/pkg/integration/clients/tui.go b/pkg/integration/clients/tui.go
index 9348cd1f3..96ffed8b0 100644
--- a/pkg/integration/clients/tui.go
+++ b/pkg/integration/clients/tui.go
@@ -380,3 +380,9 @@ func runTuiTest(test *components.IntegrationTest, mode components.Mode, keyPress
 		log.Println(err.Error())
 	}
 }
+
+func runAndPrintError(test *components.IntegrationTest, f func() error) {
+	if err := f(); err != nil {
+		log.Println(err.Error())
+	}
+}

From 010f430d1f429a084f888c2440a650d2ad2524e1 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 19:34:02 +1000
Subject: [PATCH 04/44] add bisect integration test

---
 pkg/gui/gui_driver.go                         |   8 ++
 pkg/integration/components/assert.go          |  24 ++++-
 pkg/integration/tests/bisect/basic.go         |  86 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   2 +
 pkg/integration/types/types.go                |   1 +
 .../repo/.git_keep/BISECT_ANCESTORS_OK        |   0
 .../repo/.git_keep/BISECT_EXPECTED_REV        |   1 -
 .../bisect/expected/repo/.git_keep/BISECT_LOG |  16 ----
 .../expected/repo/.git_keep/BISECT_NAMES      |   1 -
 .../expected/repo/.git_keep/BISECT_START      |   1 -
 .../expected/repo/.git_keep/BISECT_TERMS      |   2 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 -
 .../bisect/expected/repo/.git_keep/HEAD       |   1 -
 .../bisect/expected/repo/.git_keep/index      | Bin 137 -> 0 bytes
 .../bisect/expected/repo/.git_keep/logs/HEAD  |  24 -----
 .../repo/.git_keep/logs/refs/heads/master     |  20 ----
 .../repo/.git_keep/logs/refs/heads/test       |   1 -
 .../00/5ca78c7fb8157683fa61158235b250d2316004 | Bin 118 -> 0 bytes
 .../00/750edc07d6415dcc07ae0351e9397b0222b7ba | Bin 17 -> 0 bytes
 .../05/4bdf969fdcf1f90f1998666f628d40f72fde4f |   2 -
 .../07/552205114379b7c1abd7cb39575cb7a30a2e8c | Bin 49 -> 0 bytes
 .../0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f | Bin 17 -> 0 bytes
 .../11/0046b8d92b877def6cda61639cf8f37bc2829c | Bin 49 -> 0 bytes
 .../12/e46e3c37d1a43a26b909a346ecd2d97677c641 | Bin 49 -> 0 bytes
 .../1b/01733c2b372c7b5544c7f2293c3b7341824112 | Bin 49 -> 0 bytes
 .../1e/8b314962144c26d5e0e50fd29d2ca327864913 | Bin 17 -> 0 bytes
 .../20/9e3ef4b6247ce746048d5711befda46206d235 | Bin 18 -> 0 bytes
 .../26/7465454f74736bbe5b493c7f69dd3d024e26e5 | Bin 147 -> 0 bytes
 .../32/e7b0308424a817ed5aa5bba94b06b72a1b8ce5 | Bin 148 -> 0 bytes
 .../39/983ea412adebe6c5a3d4451a7673cf0962c472 |   2 -
 .../3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0 | Bin 18 -> 0 bytes
 .../3e/02ce90348f3386128ebb2972515fb1a3788818 | Bin 49 -> 0 bytes
 .../3f/f8b0f3820fd2eb3da53a5b803f94caf30dc2ab | Bin 49 -> 0 bytes
 .../43/78c740dfa0de7a973216b54b99c45a3c03f83c | Bin 49 -> 0 bytes
 .../45/a4fb75db864000d01701c0f7a51864bd4daabf | Bin 17 -> 0 bytes
 .../47/8a007451b33c7a234c60f0d13b164561b29094 | Bin 148 -> 0 bytes
 .../48/082f72f087ce7e6fa75b9c41d7387daecd447b | Bin 18 -> 0 bytes
 .../4b/65d66c089cd4f6bfa69dff2d7ba4c27337cd23 | Bin 49 -> 0 bytes
 .../54/3c0ef66d928051f16f8b9d7d33d6c4ea1f4e4f | Bin 49 -> 0 bytes
 .../5f/9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 | Bin 148 -> 0 bytes
 .../60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2 | Bin 18 -> 0 bytes
 .../66/19c0a1a3eb6449eb15ce6cd0916fec0e410c10 |   1 -
 .../67/fbfb3b74c2381ad1e058949231f2b4f0c8921f | Bin 149 -> 0 bytes
 .../78/d41b2abbd2f52c1ebf2f496268a915d59eb27b |   2 -
 .../7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69 | Bin 17 -> 0 bytes
 .../7f/8f011eb73d6043d2e6db9d2c101195ae2801f2 | Bin 17 -> 0 bytes
 .../80/eeef1a7c49b376f3373ea26c6ba44d69d90d9c | Bin 49 -> 0 bytes
 .../82/d721eb037f7045056023d0904989781ce1f526 | Bin 146 -> 0 bytes
 .../83/51c19397f4fcd5238d10034fa7fa384f14d580 | Bin 18 -> 0 bytes
 .../91/36f315e5952043f1e7ecdc0d28c208eaeaed71 | Bin 49 -> 0 bytes
 .../96/202a92c1d3bde1b20d6f3dec8e742d09732b4d | Bin 147 -> 0 bytes
 .../98/d9bcb75a685dfbfd60f611c309410152935b3d | Bin 18 -> 0 bytes
 .../ae/95e9aa3b8881aedb7a526c86ec5d60f371ca6c | Bin 49 -> 0 bytes
 .../af/f6316148f1524977997c486bcfe624c9094c4e | Bin 49 -> 0 bytes
 .../b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e | Bin 18 -> 0 bytes
 .../b4/de3947675361a7770d29b8982c407b0ec6b2a0 | Bin 18 -> 0 bytes
 .../b5/31696093a6482eca9ad4bcab63407172225b93 |   1 -
 .../b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3 | Bin 18 -> 0 bytes
 .../b8/626c4cff2849624fb67f87cd0ad72b163671ad | Bin 17 -> 0 bytes
 .../b9/7844c9437a4ab69c8165cadd97bc597b43135b | Bin 147 -> 0 bytes
 .../ba/8e7277a0ee7cdf84cd5c6138057adb85947a90 | Bin 49 -> 0 bytes
 .../bc/21c8fabc28201fab6c60503168ecda25ad8626 | Bin 148 -> 0 bytes
 .../d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d | Bin 17 -> 0 bytes
 .../d1/f7a85555fe6f10dd44754d35459ae741cb107c | Bin 149 -> 0 bytes
 .../d5/42aa84743f8ba1380358d4009408f03dbfb247 | Bin 49 -> 0 bytes
 .../d6/b24041cf04154f8f902651969675021f4d93a5 | Bin 18 -> 0 bytes
 .../d9/328d9b2c9536fdf01641dd03f4a254d2c86601 | Bin 148 -> 0 bytes
 .../d9/cc608eedd5d2cc63c262272b7a0f6ab6aed5dd | Bin 49 -> 0 bytes
 .../db/b21289ee21b2ff0f3de2bc7d00038b30c4e353 | Bin 148 -> 0 bytes
 .../e5/9bbaffe94b06acaadab4245f30ff3e11c66e5b | Bin 148 -> 0 bytes
 .../e9/27f0f9467e772eea36f24053c9b534303b106a | Bin 148 -> 0 bytes
 .../e9/d2f825e793bc9ac2be698348dbe669bad34cad |   4 -
 .../ea/684d3f868c358400465f2ec16a640c319ea6a3 | Bin 49 -> 0 bytes
 .../eb/e59a71e9750e75fb983f241687cdf7f0c8ce94 | Bin 148 -> 0 bytes
 .../ec/635144f60048986bc560c5576355344005e6e7 | Bin 17 -> 0 bytes
 .../f2/7c6ae26adb8396d3861976ba268f87ad8afa0b | Bin 49 -> 0 bytes
 .../f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 | Bin 18 -> 0 bytes
 .../expected/repo/.git_keep/refs/bisect/bad   |   1 -
 ...d-39983ea412adebe6c5a3d4451a7673cf0962c472 |   1 -
 ...d-67fbfb3b74c2381ad1e058949231f2b4f0c8921f |   1 -
 ...d-e927f0f9467e772eea36f24053c9b534303b106a |   1 -
 ...d-e9d2f825e793bc9ac2be698348dbe669bad34cad |   1 -
 ...p-bc21c8fabc28201fab6c60503168ecda25ad8626 |   1 -
 ...p-d1f7a85555fe6f10dd44754d35459ae741cb107c |   1 -
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../expected/repo/.git_keep/refs/heads/test   |   1 -
 test/integration/bisect/expected/repo/file    |   1 -
 test/integration/bisect/recording.json        |   1 -
 test/integration/bisect/setup.sh              |  17 ----
 test/integration/bisect/test.json             |   5 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../basic}/expected/repo/.git_keep/FETCH_HEAD |   0
 .../bisect/basic/expected/repo/.git_keep/HEAD |   1 +
 .../basic}/expected/repo/.git_keep/config     |   2 +
 .../expected/repo/.git_keep/description       |   0
 .../basic/expected/repo/.git_keep/index       | Bin 0 -> 866 bytes
 .../expected/repo/.git_keep/info/exclude      |   0
 .../basic/expected/repo/.git_keep/logs/HEAD   |  13 +++
 .../repo/.git_keep/logs/refs/heads/master     |  10 ++
 .../06/47fe4b7302efbfb235b8f0681b592cc3389d36 | Bin 0 -> 30 bytes
 .../08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c | Bin 0 -> 212 bytes
 .../0c/e746de5bee98147a370a19b4568b448fdedfcc | Bin 0 -> 147 bytes
 .../0f/77bf7bd7dd91550c927549af82d5b7c6f8a0d7 |   4 +
 .../17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c | Bin 0 -> 30 bytes
 .../18/197bb6052becf371aca9ab58d8352cebd3bc29 |   2 +
 .../30/ad007c4cb09b175810e069b1b2b02ab0140857 | Bin 0 -> 30 bytes
 .../31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8 | Bin 0 -> 186 bytes
 .../35/da65f29bc0b48aa80bd3a02cff623cf4355fd3 | Bin 0 -> 133 bytes
 .../37/6048ba8da4b619088a7f4a5df3f528fde41f1a |   2 +
 .../3b/f868a389d0073e715e848f0ee33d71064539ca | Bin 0 -> 30 bytes
 .../47/d78ad7a27fc7fe483389512ebf7ea34c5514bc | Bin 0 -> 30 bytes
 .../48/3fcff024ff52df164dddea9ab5032370d14228 | Bin 0 -> 148 bytes
 .../50/d561270fcfcdc9afc85f6136f937c529accaaa | Bin 0 -> 30 bytes
 .../55/3197193920043fb04f3e39e825916990955204 | Bin 0 -> 55 bytes
 .../67/0ea6605e6780007c543b3d034bcf49c898290d | Bin 0 -> 147 bytes
 .../68/5d0baa299ec29ff2c7a1ca9268abdd374adef2 | Bin 0 -> 147 bytes
 .../8d/49129429cacbb6694f0290b3219e91a6f364cd | Bin 0 -> 30 bytes
 .../a0/2c4b36b68df7081152282cf1aabcab7b24e69b | Bin 0 -> 81 bytes
 .../a8/3ada2a0a285982aaa96baeddb70135532ed004 | Bin 0 -> 149 bytes
 .../a8/9b19d40efb59f1f77b5a6b59ed1a9898545d0d |   2 +
 .../b3/ae51762cc5929b5c4f6b65e8ad14954144fe82 |   1 +
 .../bf/2b038a7c59d4db31a492793086fafec802ec2f | Bin 0 -> 30 bytes
 .../c2/55cf4ef7fd5661a9d68b717243a978e42b05ac | Bin 0 -> 30 bytes
 .../cf/b438e7991d830d830d58744b99cff451a9d07e | Bin 0 -> 265 bytes
 .../d4/308139592744ccc7fa9ab0931812da9fdfcc1d | Bin 0 -> 148 bytes
 .../e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1 | Bin 0 -> 160 bytes
 .../e6/db1f58c2bb5ead41049a8ef3910360eead21e2 | Bin 0 -> 108 bytes
 .../f2/c01a881661486f147e47f5be82914c5d0c0030 | Bin 0 -> 30 bytes
 .../f3/f9cf9d8f02f35f955b868d277913fc45d724db | Bin 0 -> 148 bytes
 .../expected/repo/.git_keep/packed-refs       |   0
 .../expected/repo/.git_keep/refs/heads/master |   1 +
 .../bisect/basic/expected/repo/file01.txt     |   1 +
 .../bisect/basic/expected/repo/file02.txt     |   1 +
 .../bisect/basic/expected/repo/file03.txt     |   1 +
 .../bisect/basic/expected/repo/file04.txt     |   1 +
 .../bisect/basic/expected/repo/file05.txt     |   1 +
 .../bisect/basic/expected/repo/file06.txt     |   1 +
 .../bisect/basic/expected/repo/file07.txt     |   1 +
 .../bisect/basic/expected/repo/file08.txt     |   1 +
 .../bisect/basic/expected/repo/file09.txt     |   1 +
 .../bisect/basic/expected/repo/file10.txt     |   1 +
 141 files changed, 169 insertions(+), 114 deletions(-)
 create mode 100644 pkg/integration/tests/bisect/basic.go
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_ANCESTORS_OK
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_EXPECTED_REV
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_LOG
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_NAMES
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_START
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/BISECT_TERMS
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/index
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/test
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/00/5ca78c7fb8157683fa61158235b250d2316004
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/05/4bdf969fdcf1f90f1998666f628d40f72fde4f
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/07/552205114379b7c1abd7cb39575cb7a30a2e8c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/11/0046b8d92b877def6cda61639cf8f37bc2829c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/12/e46e3c37d1a43a26b909a346ecd2d97677c641
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/1b/01733c2b372c7b5544c7f2293c3b7341824112
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/26/7465454f74736bbe5b493c7f69dd3d024e26e5
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/32/e7b0308424a817ed5aa5bba94b06b72a1b8ce5
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/39/983ea412adebe6c5a3d4451a7673cf0962c472
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/3e/02ce90348f3386128ebb2972515fb1a3788818
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/3f/f8b0f3820fd2eb3da53a5b803f94caf30dc2ab
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/43/78c740dfa0de7a973216b54b99c45a3c03f83c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/47/8a007451b33c7a234c60f0d13b164561b29094
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/4b/65d66c089cd4f6bfa69dff2d7ba4c27337cd23
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/54/3c0ef66d928051f16f8b9d7d33d6c4ea1f4e4f
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/5f/9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/66/19c0a1a3eb6449eb15ce6cd0916fec0e410c10
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/67/fbfb3b74c2381ad1e058949231f2b4f0c8921f
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/78/d41b2abbd2f52c1ebf2f496268a915d59eb27b
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/80/eeef1a7c49b376f3373ea26c6ba44d69d90d9c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/82/d721eb037f7045056023d0904989781ce1f526
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/91/36f315e5952043f1e7ecdc0d28c208eaeaed71
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/96/202a92c1d3bde1b20d6f3dec8e742d09732b4d
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/98/d9bcb75a685dfbfd60f611c309410152935b3d
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/ae/95e9aa3b8881aedb7a526c86ec5d60f371ca6c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/af/f6316148f1524977997c486bcfe624c9094c4e
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b5/31696093a6482eca9ad4bcab63407172225b93
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/b9/7844c9437a4ab69c8165cadd97bc597b43135b
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/ba/8e7277a0ee7cdf84cd5c6138057adb85947a90
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/bc/21c8fabc28201fab6c60503168ecda25ad8626
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d1/f7a85555fe6f10dd44754d35459ae741cb107c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d5/42aa84743f8ba1380358d4009408f03dbfb247
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d9/328d9b2c9536fdf01641dd03f4a254d2c86601
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/d9/cc608eedd5d2cc63c262272b7a0f6ab6aed5dd
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/db/b21289ee21b2ff0f3de2bc7d00038b30c4e353
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/e5/9bbaffe94b06acaadab4245f30ff3e11c66e5b
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/e9/27f0f9467e772eea36f24053c9b534303b106a
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/e9/d2f825e793bc9ac2be698348dbe669bad34cad
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/ea/684d3f868c358400465f2ec16a640c319ea6a3
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/eb/e59a71e9750e75fb983f241687cdf7f0c8ce94
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/f2/7c6ae26adb8396d3861976ba268f87ad8afa0b
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/bad
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-39983ea412adebe6c5a3d4451a7673cf0962c472
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-67fbfb3b74c2381ad1e058949231f2b4f0c8921f
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e927f0f9467e772eea36f24053c9b534303b106a
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e9d2f825e793bc9ac2be698348dbe669bad34cad
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-bc21c8fabc28201fab6c60503168ecda25ad8626
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-d1f7a85555fe6f10dd44754d35459ae741cb107c
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/bisect/expected/repo/.git_keep/refs/heads/test
 delete mode 100644 test/integration/bisect/expected/repo/file
 delete mode 100644 test/integration/bisect/recording.json
 delete mode 100644 test/integration/bisect/setup.sh
 delete mode 100644 test/integration/bisect/test.json
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/COMMIT_EDITMSG
 rename test/{integration/bisect => integration_new/bisect/basic}/expected/repo/.git_keep/FETCH_HEAD (100%)
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/HEAD
 rename test/{integration/bisect => integration_new/bisect/basic}/expected/repo/.git_keep/config (87%)
 rename test/{integration/bisect => integration_new/bisect/basic}/expected/repo/.git_keep/description (100%)
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/index
 rename test/{integration/bisect => integration_new/bisect/basic}/expected/repo/.git_keep/info/exclude (100%)
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/logs/refs/heads/master
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0c/e746de5bee98147a370a19b4568b448fdedfcc
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0f/77bf7bd7dd91550c927549af82d5b7c6f8a0d7
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/18/197bb6052becf371aca9ab58d8352cebd3bc29
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/48/3fcff024ff52df164dddea9ab5032370d14228
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/67/0ea6605e6780007c543b3d034bcf49c898290d
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/68/5d0baa299ec29ff2c7a1ca9268abdd374adef2
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/3ada2a0a285982aaa96baeddb70135532ed004
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/9b19d40efb59f1f77b5a6b59ed1a9898545d0d
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/d4/308139592744ccc7fa9ab0931812da9fdfcc1d
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f3/f9cf9d8f02f35f955b868d277913fc45d724db
 rename test/{integration/bisect => integration_new/bisect/basic}/expected/repo/.git_keep/packed-refs (100%)
 create mode 100644 test/integration_new/bisect/basic/expected/repo/.git_keep/refs/heads/master
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file01.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file02.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file03.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file04.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file05.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file06.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file07.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file08.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file09.txt
 create mode 100644 test/integration_new/bisect/basic/expected/repo/file10.txt

diff --git a/pkg/gui/gui_driver.go b/pkg/gui/gui_driver.go
index 7df2b95ba..919ad5416 100644
--- a/pkg/gui/gui_driver.go
+++ b/pkg/gui/gui_driver.go
@@ -79,3 +79,11 @@ func (self *GuiDriver) MainView() *gocui.View {
 func (self *GuiDriver) SecondaryView() *gocui.View {
 	return self.gui.secondaryView()
 }
+
+func (self *GuiDriver) View(viewName string) *gocui.View {
+	view, err := self.gui.g.View(viewName)
+	if err != nil {
+		panic(err)
+	}
+	return view
+}
diff --git a/pkg/integration/components/assert.go b/pkg/integration/components/assert.go
index 7316eafe4..4b56a76e7 100644
--- a/pkg/integration/components/assert.go
+++ b/pkg/integration/components/assert.go
@@ -46,7 +46,13 @@ func (self *matcher) context(prefix string) *matcher {
 
 func Contains(target string) *matcher {
 	return &matcher{testFn: func(value string) (bool, string) {
-		return strings.Contains(value, target), fmt.Sprintf("Expected '%s' to contain '%s'", value, target)
+		return strings.Contains(value, target), fmt.Sprintf("Expected '%s' to be found in '%s'", target, value)
+	}}
+}
+
+func NotContains(target string) *matcher {
+	return &matcher{testFn: func(value string) (bool, string) {
+		return !strings.Contains(value, target), fmt.Sprintf("Expected '%s' to NOT be found in '%s'", target, value)
 	}}
 }
 
@@ -164,6 +170,22 @@ func (self *Assert) MatchCurrentViewTitle(matcher *matcher) {
 	)
 }
 
+func (self *Assert) MatchViewContent(viewName string, matcher *matcher) {
+	self.matchString(matcher, fmt.Sprintf("Unexpected content in view '%s'.", viewName),
+		func() string {
+			return self.gui.View(viewName).Buffer()
+		},
+	)
+}
+
+func (self *Assert) MatchCurrentViewContent(matcher *matcher) {
+	self.matchString(matcher, "Unexpected content in current view.",
+		func() string {
+			return self.gui.CurrentContext().GetView().Buffer()
+		},
+	)
+}
+
 func (self *Assert) MatchMainViewContent(matcher *matcher) {
 	self.matchString(matcher, "Unexpected main view content.",
 		func() string {
diff --git a/pkg/integration/tests/bisect/basic.go b/pkg/integration/tests/bisect/basic.go
new file mode 100644
index 000000000..0c9494b82
--- /dev/null
+++ b/pkg/integration/tests/bisect/basic.go
@@ -0,0 +1,86 @@
+package bisect
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var Basic = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Start a git bisect to find a bad commit",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupRepo: func(shell *Shell) {
+		shell.
+			CreateNCommits(10)
+	},
+	SetupConfig: func(cfg *config.AppConfig) {},
+	Run: func(
+		shell *Shell,
+		input *Input,
+		assert *Assert,
+		keys config.KeybindingConfig,
+	) {
+		viewBisectOptions := func() {
+			input.PressKeys(keys.Commits.ViewBisectOptions)
+			assert.InMenu()
+		}
+		markCommitAsBad := func() {
+			viewBisectOptions()
+			assert.MatchSelectedLine(Contains("bad"))
+
+			input.Confirm()
+		}
+
+		markCommitAsGood := func() {
+			viewBisectOptions()
+			assert.MatchSelectedLine(Contains("bad"))
+			input.NextItem()
+			assert.MatchSelectedLine(Contains("good"))
+
+			input.Confirm()
+		}
+
+		assert.AtLeastOneCommit()
+
+		input.SwitchToCommitsWindow()
+
+		assert.MatchSelectedLine(Contains("commit 10"))
+
+		input.NavigateToListItemContainingText("commit 09")
+
+		markCommitAsBad()
+
+		assert.MatchViewContent("information", Contains("bisecting"))
+
+		assert.CurrentViewName("commits")
+		assert.MatchSelectedLine(Contains("<-- bad"))
+
+		input.NavigateToListItemContainingText("commit 02")
+
+		markCommitAsGood()
+
+		// lazygit will land us in the comit between our good and bad commits.
+		assert.CurrentViewName("commits")
+		assert.MatchSelectedLine(Contains("commit 05"))
+		assert.MatchSelectedLine(Contains("<-- current"))
+
+		markCommitAsBad()
+
+		assert.CurrentViewName("commits")
+		assert.MatchSelectedLine(Contains("commit 04"))
+		assert.MatchSelectedLine(Contains("<-- current"))
+
+		markCommitAsGood()
+
+		assert.InAlert()
+		assert.MatchCurrentViewContent(Contains("Bisect complete!"))
+		// commit 5 is the culprit because we marked 4 as good and 5 as bad.
+		assert.MatchCurrentViewContent(Contains("commit 05"))
+		assert.MatchCurrentViewContent(Contains("Do you want to reset"))
+		input.Confirm()
+
+		assert.CurrentViewName("commits")
+		assert.MatchCurrentViewContent(Contains("commit 04"))
+		assert.MatchViewContent("information", NotContains("bisecting"))
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 587ac8e30..5668fcbba 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -9,6 +9,7 @@ import (
 	"github.com/jesseduffield/generics/set"
 	"github.com/jesseduffield/generics/slices"
 	"github.com/jesseduffield/lazygit/pkg/integration/components"
+	"github.com/jesseduffield/lazygit/pkg/integration/tests/bisect"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/branch"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/commit"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands"
@@ -27,6 +28,7 @@ var tests = []*components.IntegrationTest{
 	custom_commands.Basic,
 	custom_commands.MultiplePrompts,
 	custom_commands.MenuFromCommand,
+	bisect.Basic,
 }
 
 func GetTests() []*components.IntegrationTest {
diff --git a/pkg/integration/types/types.go b/pkg/integration/types/types.go
index b5ee2ca68..4bc8569f7 100644
--- a/pkg/integration/types/types.go
+++ b/pkg/integration/types/types.go
@@ -34,4 +34,5 @@ type GuiDriver interface {
 	// the other view that sometimes appears to the right of the side panel
 	// e.g. when we're showing both staged and unstaged changes
 	SecondaryView() *gocui.View
+	View(viewName string) *gocui.View
 }
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_ANCESTORS_OK b/test/integration/bisect/expected/repo/.git_keep/BISECT_ANCESTORS_OK
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_EXPECTED_REV b/test/integration/bisect/expected/repo/.git_keep/BISECT_EXPECTED_REV
deleted file mode 100644
index aeb0e94fb..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/BISECT_EXPECTED_REV
+++ /dev/null
@@ -1 +0,0 @@
-e927f0f9467e772eea36f24053c9b534303b106a
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_LOG b/test/integration/bisect/expected/repo/.git_keep/BISECT_LOG
deleted file mode 100644
index db4a771e2..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/BISECT_LOG
+++ /dev/null
@@ -1,16 +0,0 @@
-git bisect start
-# bad: [054bdf969fdcf1f90f1998666f628d40f72fde4f] commit 19
-git bisect bad 054bdf969fdcf1f90f1998666f628d40f72fde4f
-# good: [39983ea412adebe6c5a3d4451a7673cf0962c472] commit 9
-git bisect good 39983ea412adebe6c5a3d4451a7673cf0962c472
-# good: [e9d2f825e793bc9ac2be698348dbe669bad34cad] commit 14
-git bisect good e9d2f825e793bc9ac2be698348dbe669bad34cad
-# skip: [d1f7a85555fe6f10dd44754d35459ae741cb107c] commit 15
-git bisect skip d1f7a85555fe6f10dd44754d35459ae741cb107c
-# skip: [bc21c8fabc28201fab6c60503168ecda25ad8626] commit 17
-git bisect skip bc21c8fabc28201fab6c60503168ecda25ad8626
-# good: [67fbfb3b74c2381ad1e058949231f2b4f0c8921f] commit 16
-git bisect good 67fbfb3b74c2381ad1e058949231f2b4f0c8921f
-# good: [e927f0f9467e772eea36f24053c9b534303b106a] commit 18
-git bisect good e927f0f9467e772eea36f24053c9b534303b106a
-# first bad commit: [054bdf969fdcf1f90f1998666f628d40f72fde4f] commit 19
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_NAMES b/test/integration/bisect/expected/repo/.git_keep/BISECT_NAMES
deleted file mode 100644
index 8b1378917..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/BISECT_NAMES
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_START b/test/integration/bisect/expected/repo/.git_keep/BISECT_START
deleted file mode 100644
index 1f7391f92..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/BISECT_START
+++ /dev/null
@@ -1 +0,0 @@
-master
diff --git a/test/integration/bisect/expected/repo/.git_keep/BISECT_TERMS b/test/integration/bisect/expected/repo/.git_keep/BISECT_TERMS
deleted file mode 100644
index 25dd30b14..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/BISECT_TERMS
+++ /dev/null
@@ -1,2 +0,0 @@
-bad
-good
diff --git a/test/integration/bisect/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/bisect/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index e6cf6d392..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-commit 20
diff --git a/test/integration/bisect/expected/repo/.git_keep/HEAD b/test/integration/bisect/expected/repo/.git_keep/HEAD
deleted file mode 100644
index cea9d05ed..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/test
diff --git a/test/integration/bisect/expected/repo/.git_keep/index b/test/integration/bisect/expected/repo/.git_keep/index
deleted file mode 100644
index 2ad3e517ba8dcf0981429c77789bbd541b438fcb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 137
zcmZ?q402{*U|<4b#>9^-Go-SZ4})ll|7>R&85mfZG+x*<Ff=X!N`D2a5dmUmg?V;g
zwyD%ScVp=d7u@%ENfO&7QwEl_%$!u9ED(eQxw--=Nd`j&11|5>YdIWqu6*0SZ0>*E
h>LrJY&Ce=Z?wGJ3i~Sw%i;2??|G)WbwrK^s5dd%eE-U~5

diff --git a/test/integration/bisect/expected/repo/.git_keep/logs/HEAD b/test/integration/bisect/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index 8f4ef5553..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,24 +0,0 @@
-0000000000000000000000000000000000000000 005ca78c7fb8157683fa61158235b250d2316004 CI <CI@example.com> 1643185278 +1100	commit (initial): commit 1
-005ca78c7fb8157683fa61158235b250d2316004 d9328d9b2c9536fdf01641dd03f4a254d2c86601 CI <CI@example.com> 1643185278 +1100	commit: commit 2
-d9328d9b2c9536fdf01641dd03f4a254d2c86601 e59bbaffe94b06acaadab4245f30ff3e11c66e5b CI <CI@example.com> 1643185278 +1100	commit: commit 3
-e59bbaffe94b06acaadab4245f30ff3e11c66e5b 32e7b0308424a817ed5aa5bba94b06b72a1b8ce5 CI <CI@example.com> 1643185278 +1100	commit: commit 4
-32e7b0308424a817ed5aa5bba94b06b72a1b8ce5 96202a92c1d3bde1b20d6f3dec8e742d09732b4d CI <CI@example.com> 1643185278 +1100	commit: commit 5
-96202a92c1d3bde1b20d6f3dec8e742d09732b4d 82d721eb037f7045056023d0904989781ce1f526 CI <CI@example.com> 1643185278 +1100	commit: commit 6
-82d721eb037f7045056023d0904989781ce1f526 b97844c9437a4ab69c8165cadd97bc597b43135b CI <CI@example.com> 1643185278 +1100	commit: commit 7
-b97844c9437a4ab69c8165cadd97bc597b43135b ebe59a71e9750e75fb983f241687cdf7f0c8ce94 CI <CI@example.com> 1643185278 +1100	commit: commit 8
-ebe59a71e9750e75fb983f241687cdf7f0c8ce94 39983ea412adebe6c5a3d4451a7673cf0962c472 CI <CI@example.com> 1643185278 +1100	commit: commit 9
-39983ea412adebe6c5a3d4451a7673cf0962c472 dbb21289ee21b2ff0f3de2bc7d00038b30c4e353 CI <CI@example.com> 1643185278 +1100	commit: commit 10
-dbb21289ee21b2ff0f3de2bc7d00038b30c4e353 5f9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 CI <CI@example.com> 1643185278 +1100	commit: commit 11
-5f9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 267465454f74736bbe5b493c7f69dd3d024e26e5 CI <CI@example.com> 1643185278 +1100	commit: commit 12
-267465454f74736bbe5b493c7f69dd3d024e26e5 478a007451b33c7a234c60f0d13b164561b29094 CI <CI@example.com> 1643185278 +1100	commit: commit 13
-478a007451b33c7a234c60f0d13b164561b29094 e9d2f825e793bc9ac2be698348dbe669bad34cad CI <CI@example.com> 1643185278 +1100	commit: commit 14
-e9d2f825e793bc9ac2be698348dbe669bad34cad d1f7a85555fe6f10dd44754d35459ae741cb107c CI <CI@example.com> 1643185278 +1100	commit: commit 15
-d1f7a85555fe6f10dd44754d35459ae741cb107c 67fbfb3b74c2381ad1e058949231f2b4f0c8921f CI <CI@example.com> 1643185278 +1100	commit: commit 16
-67fbfb3b74c2381ad1e058949231f2b4f0c8921f bc21c8fabc28201fab6c60503168ecda25ad8626 CI <CI@example.com> 1643185278 +1100	commit: commit 17
-bc21c8fabc28201fab6c60503168ecda25ad8626 e927f0f9467e772eea36f24053c9b534303b106a CI <CI@example.com> 1643185278 +1100	commit: commit 18
-e927f0f9467e772eea36f24053c9b534303b106a 054bdf969fdcf1f90f1998666f628d40f72fde4f CI <CI@example.com> 1643185278 +1100	commit: commit 19
-054bdf969fdcf1f90f1998666f628d40f72fde4f 78d41b2abbd2f52c1ebf2f496268a915d59eb27b CI <CI@example.com> 1643185278 +1100	commit: commit 20
-78d41b2abbd2f52c1ebf2f496268a915d59eb27b e9d2f825e793bc9ac2be698348dbe669bad34cad CI <CI@example.com> 1643185283 +1100	checkout: moving from master to e9d2f825e793bc9ac2be698348dbe669bad34cad
-e9d2f825e793bc9ac2be698348dbe669bad34cad 67fbfb3b74c2381ad1e058949231f2b4f0c8921f CI <CI@example.com> 1643185286 +1100	checkout: moving from e9d2f825e793bc9ac2be698348dbe669bad34cad to 67fbfb3b74c2381ad1e058949231f2b4f0c8921f
-67fbfb3b74c2381ad1e058949231f2b4f0c8921f e927f0f9467e772eea36f24053c9b534303b106a CI <CI@example.com> 1643185295 +1100	checkout: moving from 67fbfb3b74c2381ad1e058949231f2b4f0c8921f to e927f0f9467e772eea36f24053c9b534303b106a
-e927f0f9467e772eea36f24053c9b534303b106a 78d41b2abbd2f52c1ebf2f496268a915d59eb27b CI <CI@example.com> 1643185301 +1100	checkout: moving from e927f0f9467e772eea36f24053c9b534303b106a to test
diff --git a/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 61c607364..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1,20 +0,0 @@
-0000000000000000000000000000000000000000 005ca78c7fb8157683fa61158235b250d2316004 CI <CI@example.com> 1643185278 +1100	commit (initial): commit 1
-005ca78c7fb8157683fa61158235b250d2316004 d9328d9b2c9536fdf01641dd03f4a254d2c86601 CI <CI@example.com> 1643185278 +1100	commit: commit 2
-d9328d9b2c9536fdf01641dd03f4a254d2c86601 e59bbaffe94b06acaadab4245f30ff3e11c66e5b CI <CI@example.com> 1643185278 +1100	commit: commit 3
-e59bbaffe94b06acaadab4245f30ff3e11c66e5b 32e7b0308424a817ed5aa5bba94b06b72a1b8ce5 CI <CI@example.com> 1643185278 +1100	commit: commit 4
-32e7b0308424a817ed5aa5bba94b06b72a1b8ce5 96202a92c1d3bde1b20d6f3dec8e742d09732b4d CI <CI@example.com> 1643185278 +1100	commit: commit 5
-96202a92c1d3bde1b20d6f3dec8e742d09732b4d 82d721eb037f7045056023d0904989781ce1f526 CI <CI@example.com> 1643185278 +1100	commit: commit 6
-82d721eb037f7045056023d0904989781ce1f526 b97844c9437a4ab69c8165cadd97bc597b43135b CI <CI@example.com> 1643185278 +1100	commit: commit 7
-b97844c9437a4ab69c8165cadd97bc597b43135b ebe59a71e9750e75fb983f241687cdf7f0c8ce94 CI <CI@example.com> 1643185278 +1100	commit: commit 8
-ebe59a71e9750e75fb983f241687cdf7f0c8ce94 39983ea412adebe6c5a3d4451a7673cf0962c472 CI <CI@example.com> 1643185278 +1100	commit: commit 9
-39983ea412adebe6c5a3d4451a7673cf0962c472 dbb21289ee21b2ff0f3de2bc7d00038b30c4e353 CI <CI@example.com> 1643185278 +1100	commit: commit 10
-dbb21289ee21b2ff0f3de2bc7d00038b30c4e353 5f9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 CI <CI@example.com> 1643185278 +1100	commit: commit 11
-5f9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 267465454f74736bbe5b493c7f69dd3d024e26e5 CI <CI@example.com> 1643185278 +1100	commit: commit 12
-267465454f74736bbe5b493c7f69dd3d024e26e5 478a007451b33c7a234c60f0d13b164561b29094 CI <CI@example.com> 1643185278 +1100	commit: commit 13
-478a007451b33c7a234c60f0d13b164561b29094 e9d2f825e793bc9ac2be698348dbe669bad34cad CI <CI@example.com> 1643185278 +1100	commit: commit 14
-e9d2f825e793bc9ac2be698348dbe669bad34cad d1f7a85555fe6f10dd44754d35459ae741cb107c CI <CI@example.com> 1643185278 +1100	commit: commit 15
-d1f7a85555fe6f10dd44754d35459ae741cb107c 67fbfb3b74c2381ad1e058949231f2b4f0c8921f CI <CI@example.com> 1643185278 +1100	commit: commit 16
-67fbfb3b74c2381ad1e058949231f2b4f0c8921f bc21c8fabc28201fab6c60503168ecda25ad8626 CI <CI@example.com> 1643185278 +1100	commit: commit 17
-bc21c8fabc28201fab6c60503168ecda25ad8626 e927f0f9467e772eea36f24053c9b534303b106a CI <CI@example.com> 1643185278 +1100	commit: commit 18
-e927f0f9467e772eea36f24053c9b534303b106a 054bdf969fdcf1f90f1998666f628d40f72fde4f CI <CI@example.com> 1643185278 +1100	commit: commit 19
-054bdf969fdcf1f90f1998666f628d40f72fde4f 78d41b2abbd2f52c1ebf2f496268a915d59eb27b CI <CI@example.com> 1643185278 +1100	commit: commit 20
diff --git a/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/test b/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/test
deleted file mode 100644
index a2526105f..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/logs/refs/heads/test
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 78d41b2abbd2f52c1ebf2f496268a915d59eb27b CI <CI@example.com> 1643185301 +1100	branch: Created from master
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/00/5ca78c7fb8157683fa61158235b250d2316004 b/test/integration/bisect/expected/repo/.git_keep/objects/00/5ca78c7fb8157683fa61158235b250d2316004
deleted file mode 100644
index a22627c8d8fb87e35cc74ee98e0a06e006ff545c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 118
zcmV-+0Ez#20gcT;3IZ_<KvCB{MfQR;?U-ahM3~haBW+U@ER~^x$9EPU!0qS3&%L$B
z0G#+RHZ!P!GpPmAk|fSlq7cqZNdrk0)*@QfC#Uam?;9*DT$c4_A8oIvopNtiK$;@T
YIk3PH(R;VoeKPD%{_}wD3wV4jH6Ro=sQ>@~

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba b/test/integration/bisect/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba
deleted file mode 100644
index d3c45d51ea5d755dabd6e35ce0322533b264abdd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;29GG9|w~@05+rq>Hq)$

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/05/4bdf969fdcf1f90f1998666f628d40f72fde4f b/test/integration/bisect/expected/repo/.git_keep/objects/05/4bdf969fdcf1f90f1998666f628d40f72fde4f
deleted file mode 100644
index dd18604e8..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/05/4bdf969fdcf1f90f1998666f628d40f72fde4f
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K
-1D]���?���0�9F�tP0�0D��f��v�{PU��(�C�U!��*��%�h��-K��ca��G�@f˻�:h�P�&냆��y�l�II7'VPn�>����u�i��4_�����SY��[��8D8!�юQ]���8a��:E
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/07/552205114379b7c1abd7cb39575cb7a30a2e8c b/test/integration/bisect/expected/repo/.git_keep/objects/07/552205114379b7c1abd7cb39575cb7a30a2e8c
deleted file mode 100644
index 2ea04996709d3243767594f3bd3e31a3a703ec02..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^@r8x!1C*D((3(Tl}}3KBDL03|N5lHps`A@
F006BP688WA

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f b/test/integration/bisect/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f
deleted file mode 100644
index da246e1fe4dd7506e33985df613ec74645cf32b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;1Lr89~+Y%05*XH;{X5v

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/11/0046b8d92b877def6cda61639cf8f37bc2829c b/test/integration/bisect/expected/repo/.git_keep/objects/11/0046b8d92b877def6cda61639cf8f37bc2829c
deleted file mode 100644
index ad217ecf465dc56683950a7e26798e5dd53f02ff..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5bw*+F`EM(FZrraI-p48TtR#hJmP{@;gTz99
FApo{05&ZxF

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/12/e46e3c37d1a43a26b909a346ecd2d97677c641 b/test/integration/bisect/expected/repo/.git_keep/objects/12/e46e3c37d1a43a26b909a346ecd2d97677c641
deleted file mode 100644
index 700547c7a04e5483468be0b904ca17113c64683f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5HG|K_qVm^t`|zpNtTX;j|G(*j_|97l41z29
FeE^-M60-mR

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/1b/01733c2b372c7b5544c7f2293c3b7341824112 b/test/integration/bisect/expected/repo/.git_keep/objects/1b/01733c2b372c7b5544c7f2293c3b7341824112
deleted file mode 100644
index 11276c468be906b5461d014ec3315907a099f768..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgW$@t8FZ$4at}cIh^c=_Q7Pafnx>N%I
H0F@5y*~=AL

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913 b/test/integration/bisect/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913
deleted file mode 100644
index f1722ae0044d12235bc5ca37b7e8d52b3303d02d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;4u>eA0Lwu05+rq@Bjb+

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235 b/test/integration/bisect/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235
deleted file mode 100644
index 12e1f82f122993c9598b583241cad99aa966231d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~})JgFru1JODkq1=9ck

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/26/7465454f74736bbe5b493c7f69dd3d024e26e5 b/test/integration/bisect/expected/repo/.git_keep/objects/26/7465454f74736bbe5b493c7f69dd3d024e26e5
deleted file mode 100644
index edae3689b69f1ae3ac24c4cc81ba12867e93f314..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gcX03c@fDKw;NCMfQSpev(N*MChu=NX7{Y#+DMn<J*M?aQpZcPnXsn
z-9ZY6zL_~FBM6aVAwiYmJ+n$hOr%tV7$PzN4r|`*)t#@2l9(@Q23avvwQ!5XH%6mS
zgsrmXIOKP~FPocYcb?{}eR5l$cG9I?90Vqa9woXXz&H+j-KV<!$$#GMS6}9MIyXUn
BM8E(5

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/32/e7b0308424a817ed5aa5bba94b06b72a1b8ce5 b/test/integration/bisect/expected/repo/.git_keep/objects/32/e7b0308424a817ed5aa5bba94b06b72a1b8ce5
deleted file mode 100644
index f220ca5b80a65ef08f08e1ee8ad2fbf09af71d3c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0&iB$H_aB0^U^#!Q@`U~DN7Jic9c0JopF_+@GB
z(E)Qh^vw)3MdZvrM`0R+70GfVEutLB4>*JnlIG}E+3eN9QdX5(Et7hdB61U@K&eJw
zYc#~dY)PHG`+eD9n&CXnSNlj?pLQxsy8tpp98(xZI3jxQ_PS4X`;-4Xkoy8q{5u)~
C^+TWl

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/39/983ea412adebe6c5a3d4451a7673cf0962c472 b/test/integration/bisect/expected/repo/.git_keep/objects/39/983ea412adebe6c5a3d4451a7673cf0962c472
deleted file mode 100644
index 63c4d53b2..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/39/983ea412adebe6c5a3d4451a7673cf0962c472
+++ /dev/null
@@ -1,2 +0,0 @@
-x��M
-1�a�=E��4��$ "�j����C�o�����[��P���պ�b}��=O�XsvB.b��'fF6[���A�FI�*�� ¾��S�U����&��}�a^�</W���=�T�v��G����֚�����1_��9�
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0 b/test/integration/bisect/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0
deleted file mode 100644
index ecdb2d612f7d882a44c9abe5dc8d59f9032ac286..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>V9Nt027x(DX#hd^25A5Q

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/3e/02ce90348f3386128ebb2972515fb1a3788818 b/test/integration/bisect/expected/repo/.git_keep/objects/3e/02ce90348f3386128ebb2972515fb1a3788818
deleted file mode 100644
index ee5a4ea606656779d24a668ce90cf0bff87334ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWq6Yu=<<!hV@CGTgrnifp(YNj&z=JS
H0}~F3#xfJO

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/3f/f8b0f3820fd2eb3da53a5b803f94caf30dc2ab b/test/integration/bisect/expected/repo/.git_keep/objects/3f/f8b0f3820fd2eb3da53a5b803f94caf30dc2ab
deleted file mode 100644
index 39d2a914c015fabd3034039a3831ed5f588c7eaa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgW!Sd-#+-}?r_x?#%?j+)Ic&Qvf5&0~
HA%qa&&6X6V

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/43/78c740dfa0de7a973216b54b99c45a3c03f83c b/test/integration/bisect/expected/repo/.git_keep/objects/43/78c740dfa0de7a973216b54b99c45a3c03f83c
deleted file mode 100644
index e2d7fffb2870635abb5e726ae39b2453491215ec..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5bwgs<iik}fYHA-odEV}9HQltj{Cf-o!^Z+X
FM*yub6IB2J

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf b/test/integration/bisect/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf
deleted file mode 100644
index fdf2bc81d1e32f103ffac8e4afe9c1a2ff38c60a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb|y!viJ;J|QL(06Luoa{vGU

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/47/8a007451b33c7a234c60f0d13b164561b29094 b/test/integration/bisect/expected/repo/.git_keep/objects/47/8a007451b33c7a234c60f0d13b164561b29094
deleted file mode 100644
index 1e2ee9643cb6426e8129e7660e2d941f5f41bb19..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW*3IZ_@Kw;~gVtPT6%w%Q*BEnW4BR>-qjJqrmJic3a0Nck`yt4HE
z7~mow#-<9BRn_K_6p9&z8={~l&xLa$svK*yH5Rj`O<w~%3vr-8O-PV)){rS;k+#c<
z)p}CT8cceR`?A4&gY$g5>L>N}si(5^3pgfpQ}8mu(K&0)UiYb?fAXIPhvo}aLOPY5
C@kJ{D

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b b/test/integration/bisect/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b
deleted file mode 100644
index 23ff2840ff2459a64132f323f24859beb43d2125..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~m7VgTMr)1OPqU1=#=q

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/4b/65d66c089cd4f6bfa69dff2d7ba4c27337cd23 b/test/integration/bisect/expected/repo/.git_keep/objects/4b/65d66c089cd4f6bfa69dff2d7ba4c27337cd23
deleted file mode 100644
index 3d5e2f0a3a803710a98d667696a364ca49ac6c01..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5HDE^i_te>5XN%3J-77d)TR&Z8W2_M?1H%Qr
FcmS;*5^Vqg

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/54/3c0ef66d928051f16f8b9d7d33d6c4ea1f4e4f b/test/integration/bisect/expected/repo/.git_keep/objects/54/3c0ef66d928051f16f8b9d7d33d6c4ea1f4e4f
deleted file mode 100644
index b8e566a28e95559d5a9d4f14bbbf9deccb500d4a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^+wV8OSZNag_V};pY=&v@m;MsZl=q?@Mkt3
FGXSLT5$^y1

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/5f/9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8 b/test/integration/bisect/expected/repo/.git_keep/objects/5f/9397e5bcee1ac2a3fe6d834d42e36b74ef4ca8
deleted file mode 100644
index 2fe3c0d43e74831bbab6ebb3511c8497af892879..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaAJ3c@fDKwak)vlnD0lcWiV2wi!Md}dHEwv-4S-!43W+sAwG>eBmT
z0Htskn+SNv6-7g6$wu^~6f~C9rpDYtb&^S)I5lhD<Tap`V#&rNVyReFRBmERof;x?
zER1`@o=tv_`?A4&gY$g5$|v{rDW|&h3s7)O(c3A)kqFW3be|gXr~dPS$b12pOFJQ!
Czem~t

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2 b/test/integration/bisect/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2
deleted file mode 100644
index d94cbe67d82850de2f8527e7aa60dbd605b2259b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~m_tgTOSVWB@(}1?2z$

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/66/19c0a1a3eb6449eb15ce6cd0916fec0e410c10 b/test/integration/bisect/expected/repo/.git_keep/objects/66/19c0a1a3eb6449eb15ce6cd0916fec0e410c10
deleted file mode 100644
index 67a41cc9f..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/66/19c0a1a3eb6449eb15ce6cd0916fec0e410c10
+++ /dev/null
@@ -1 +0,0 @@
-x+)JMU06b040031QH��Ie��6�L�Q���)���:���<���
 
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/67/fbfb3b74c2381ad1e058949231f2b4f0c8921f b/test/integration/bisect/expected/repo/.git_keep/objects/67/fbfb3b74c2381ad1e058949231f2b4f0c8921f
deleted file mode 100644
index 66023ddfa8144a7229c7e225a1f29a2b16d25d0d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 149
zcmV;G0BZku0gaA93IZ_<MP2t4-3yX5?X&|T!mK<-+9oJiXBaAYe7o=fzUAlfd1Y<w
z(Jju?q3<G=R8t0}<Up&FOqBz1$O%YiUswrhah%P@yS%!ssF70`s7#7btM@VZO2LPj
zC3-9wAr`~$eqVRH-0XR|UFE}Vd&;S-?P78Ageka~>=6;bjCDkH`BVS-<Hvjf%!WHw
DY*tE=

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/78/d41b2abbd2f52c1ebf2f496268a915d59eb27b b/test/integration/bisect/expected/repo/.git_keep/objects/78/d41b2abbd2f52c1ebf2f496268a915d59eb27b
deleted file mode 100644
index 74386cac6..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/78/d41b2abbd2f52c1ebf2f496268a915d59eb27b
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-1@Q�=E��4m'm@D���h��C��,<���[�����L�����$D�&���fbQuK�E�c�͚��`�PD�X�**[E�DDJ.I��Jj�{ܗ
���۵}r_��T�~��1M.&8"Zk��O��'�yp�|�;�
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69 b/test/integration/bisect/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69
deleted file mode 100644
index 637482d7a82554db2176cef4841bccc3141df169..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;3*RW9}klu05+=x?*IS*

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2 b/test/integration/bisect/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2
deleted file mode 100644
index 60454ab43e0c116e11fe1c78bd1bd18ca16bd18e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;5icmp8%6F05-=2_W%F@

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/80/eeef1a7c49b376f3373ea26c6ba44d69d90d9c b/test/integration/bisect/expected/repo/.git_keep/objects/80/eeef1a7c49b376f3373ea26c6ba44d69d90d9c
deleted file mode 100644
index 7f09ffe72ac0917db36c2cfca714d5dcb19d2ff8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^~R3tNwdY+4^PV1uJDmN=`#2K*O29W42&gw
FPXViQ66pW{

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/82/d721eb037f7045056023d0904989781ce1f526 b/test/integration/bisect/expected/repo/.git_keep/objects/82/d721eb037f7045056023d0904989781ce1f526
deleted file mode 100644
index 85c68ea1fe28feab9be24b6ca55e96c932f9d50e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 146
zcmV;D0B!$x0gaA93c@fD06pgwdlzJPlWrR*BJ|W}B%3V?#+DMn=i7r1@H))E=vwQe
z0mbgrb~6y6sF)~u%MwDgOr4r&!AP>0q6I=FbX(f()gTHZr^rgh=VFu@i!8pF4%P=g
zvfgtJ#ie(<uRBaLjMIFxPpaF~F1pq$kOWUd$Nd0jB1Cu4W2)Jo`p*Y(UomVturWtP
AJ^%m!

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580 b/test/integration/bisect/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580
deleted file mode 100644
index 12805e9602f07af94a24ad47b987f6eebc8aad35..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~mtlgTNG~Bmh0*1>OJv

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/91/36f315e5952043f1e7ecdc0d28c208eaeaed71 b/test/integration/bisect/expected/repo/.git_keep/objects/91/36f315e5952043f1e7ecdc0d28c208eaeaed71
deleted file mode 100644
index 5108746ca8d15f9559dc5be603d372e2062d8257..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWw^G<!SOtcsDJ+iwZLi9N}1$+Cocs6
H_^}N_(p40y

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/96/202a92c1d3bde1b20d6f3dec8e742d09732b4d b/test/integration/bisect/expected/repo/.git_keep/objects/96/202a92c1d3bde1b20d6f3dec8e742d09732b4d
deleted file mode 100644
index 059fc9c25c8ea1f5ce20b145c9250e3c6d1ef2c9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gcW<3c^4PKvCCoirEX2%p^_<B0^U^M$$=9u(p&DJic9c0JopF_~SCq
zj~21xL)+YAWlE|-h4Lh(m<2LRC4i1VCdkz$OH{(Do4;Dj$%{b-p+qWJys|2rX-5WU
zD@oC0bPoD%_hpOy5HJ03^N-H!(@*0vUn8C=qi`w`kB9(aulrQ<Kl#r`4qvb7IrB$<
BMVJ5p

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

literal 18
Zcmb<m^geacKgb}>z~ng-gTO4NQ~*9A1?>O;

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/ae/95e9aa3b8881aedb7a526c86ec5d60f371ca6c b/test/integration/bisect/expected/repo/.git_keep/objects/ae/95e9aa3b8881aedb7a526c86ec5d60f371ca6c
deleted file mode 100644
index 175cab4ccbe8abaf0cd9fa1558e4d6e99e2e2beb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWvK6Gl-q8b;C$)X?YTMvf>YONFn$66
H`1cLO)e04Z

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/af/f6316148f1524977997c486bcfe624c9094c4e b/test/integration/bisect/expected/repo/.git_keep/objects/af/f6316148f1524977997c486bcfe624c9094c4e
deleted file mode 100644
index 7e3df8fbf75f23ee822e874de412c92e609bce20..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWnd`fyTg9XG4>4mI_AKameov3+jju~
H?J5lh!p9Tg

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e b/test/integration/bisect/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e
deleted file mode 100644
index 268d0f4596bcf2600c8598a88037be18713815f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~mVdgTN%FL;yYi1>gVx

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0 b/test/integration/bisect/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0
deleted file mode 100644
index 6d65f13b4ba310fca2adfb687ac6239597dddfa1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~l)NgFqisJODl81=s)p

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b5/31696093a6482eca9ad4bcab63407172225b93 b/test/integration/bisect/expected/repo/.git_keep/objects/b5/31696093a6482eca9ad4bcab63407172225b93
deleted file mode 100644
index 268e52a98..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/b5/31696093a6482eca9ad4bcab63407172225b93
+++ /dev/null
@@ -1 +0,0 @@
-x+)JMU06b040031QH��Ieؑ���_�3�[}�Y���bf�k�
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3 b/test/integration/bisect/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3
deleted file mode 100644
index 02dc6889120b0c2a240806b626b6a255b325ac62..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~nI#gTM@?6aYQ{1?B(%

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad b/test/integration/bisect/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad
deleted file mode 100644
index 0761b6105a0c6d0e83d26edd1b1dddb94e8d9fdc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;2{$O9~YAW05*sO=l}o!

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/b9/7844c9437a4ab69c8165cadd97bc597b43135b b/test/integration/bisect/expected/repo/.git_keep/objects/b9/7844c9437a4ab69c8165cadd97bc597b43135b
deleted file mode 100644
index 25e0f33f890cdf139eb5e5443880003e5926ac5f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaA93c@fD06pgwdlzIkX|fv-5qk0&+hmJ^v86=t`S#!gybi-KWohlv
zfpR?b%?#9Xw5%E?5h1lYu|}VYBrCBdoC8zQRNShYy*h}m?8zn!JTndvV?rM)W*o9)
z7Ai*b9&q~Z_hp0e2Iuj1wU4&-X{WNZ3s4#YN%SmmBtmpM-KV<!ssDUn_XYdqIq%vl
BMPC2_

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/ba/8e7277a0ee7cdf84cd5c6138057adb85947a90 b/test/integration/bisect/expected/repo/.git_keep/objects/ba/8e7277a0ee7cdf84cd5c6138057adb85947a90
deleted file mode 100644
index c9ed3ff6bcc41646145806713f12a0d0dc56ef20..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWpG{cyYzOO1H%Pz#slA%N~G-dU9}$o
H3G5G2y6Y3z

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/bc/21c8fabc28201fab6c60503168ecda25ad8626 b/test/integration/bisect/expected/repo/.git_keep/objects/bc/21c8fabc28201fab6c60503168ecda25ad8626
deleted file mode 100644
index 8751f191563adfe2179ba3c2e4286986a7890427..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaA93c@fD06pgwdlw|TNs|qT2tD-~$!3FswWUPx`Bv}&UWb7hS?2lP
z0aG~iO%)KW^`UT0R5-?}ElAA)gG<u5xmbjll9)Ab`s@&5E3LQ^y^v$f71a)$d?JU9
zif>jp5jK-w{kCi{PH-NltG@HRKJ+BZd;tvJArBN8j^Do7=|0u<PyOcuM)LtcpgM*)
C;zYXu

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d b/test/integration/bisect/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d
deleted file mode 100644
index 8dab6a9eaf1fff6a519dfb7bec1a5bdb56ff845d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;0Y509}AN%05*sO;s5{u

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d1/f7a85555fe6f10dd44754d35459ae741cb107c b/test/integration/bisect/expected/repo/.git_keep/objects/d1/f7a85555fe6f10dd44754d35459ae741cb107c
deleted file mode 100644
index 017c9bf7eaaad332c8c08b5633943ace4900dce8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 149
zcmV;G0BZku0gcW<3c@fDg<;n@#q0&iWRh_LB0^U^#x$9tU~MT8Jib|Y0C$g{Z}G~y
zERP15`OtPVFlC9AW??CmBzhk?&A|$?a`c5TccSDr-R;%Dat*VDWams%$y&l>oQ0y)
zJ~&TWDHg3x-|fEcFpO{+#+!X~*`9VP>v9F;NGK_s1&)Z`yI%XLW`FXZ2Tbk@ab7zc
D5c)=r

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d5/42aa84743f8ba1380358d4009408f03dbfb247 b/test/integration/bisect/expected/repo/.git_keep/objects/d5/42aa84743f8ba1380358d4009408f03dbfb247
deleted file mode 100644
index 776eafd0bff72ea3bbfa37f482cfdf5acc34f259..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWvILMzv*7~8LbKx`;$j~?Y^!Nxs?e3
H8K@8?%N7&M

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5 b/test/integration/bisect/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5
deleted file mode 100644
index 1ece9675cc1bf1b0364aa64b41e4b1e260ab79ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>V9OIG27!4@=>S3-25<lX

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d9/328d9b2c9536fdf01641dd03f4a254d2c86601 b/test/integration/bisect/expected/repo/.git_keep/objects/d9/328d9b2c9536fdf01641dd03f4a254d2c86601
deleted file mode 100644
index a2c2b4a5cc1143cf6be0f6542f6ab8939602b55f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaA93c@fDMP26<*$Xl==}aPs2wn9UlVpm5wWUPx_-5e&+<o4Ai(l4d
zc{Gn_KD6D;*K;WX$*fkc)ORQ(M3Hh-m_@UwbyMA@yS<tR;G!{=IOl{MC52f9krM^Z
z#84@q01Qsw?Y{1Qocv{+ZuZe-d)le2%hjU{0TWY9{)h<RI_;;L{h9xIPwopuYdTqA
C1W3F9

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/d9/cc608eedd5d2cc63c262272b7a0f6ab6aed5dd b/test/integration/bisect/expected/repo/.git_keep/objects/d9/cc608eedd5d2cc63c262272b7a0f6ab6aed5dd
deleted file mode 100644
index dcf2f12d5820464bcee04e58f285014994d72f13..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgW#IY!p`-23%9S$PgWt59obW&WRA)W_
H9g7gx_xBdd

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/db/b21289ee21b2ff0f3de2bc7d00038b30c4e353 b/test/integration/bisect/expected/repo/.git_keep/objects/db/b21289ee21b2ff0f3de2bc7d00038b30c4e353
deleted file mode 100644
index e4e6a90b7acdc3d9250f4aba0efafb0a17922bbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0&iB$-SCB0^U^#$-C8U~MT8Jic9c0JopF_`1yV
zqXX7_=$jdMCJMn5Vv1ZFD@vPKTdc&SjU{>sR@AMs*{egWwM3JIK_+XKl_X9n5ejFH
zdh<00O&pxO`+eD97~wpOSNq7kKJBE-d;!cUVxhnVj)>m7z3x-p{^UOo=-n6NgE|5W
CKt+%M

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/e5/9bbaffe94b06acaadab4245f30ff3e11c66e5b b/test/integration/bisect/expected/repo/.git_keep/objects/e5/9bbaffe94b06acaadab4245f30ff3e11c66e5b
deleted file mode 100644
index e69a0bf1702455e2aeba72e46c91242c7636d862..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaAJ3c@fDKwak)vlk?jOg;l5LRURToJ>$Kwv-4S-!43W+sAwGWa<4e
z0684SrV6FC=rJPYhQSf1#GHh3yh+pONZ2w7saeaWuK|_4%aw0VIQZCVvlt0$wZ2ht
zfvS@nqeWBR<GyS#&2XOPtA0vfpL&v|Utljh=HOC>Bciotr~A~<KlPsv-h2U@&N-e+
CuScW+

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/e9/27f0f9467e772eea36f24053c9b534303b106a b/test/integration/bisect/expected/repo/.git_keep/objects/e9/27f0f9467e772eea36f24053c9b534303b106a
deleted file mode 100644
index b3ab8fa488d54af22d5148d6b2dd74b23830cc19..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaAJ3IZ_@1zqP9*$dL0ZwEw#S$T|}P7eyk8HNZR-z+?Ut5+1Yc(S(k
z=oU*l^j*~kpGk6nx-eADT(WnV<{0KuBt-TCejzVr<6U3f&f-vL;j!cZ2P8=l!DAwo
z$}V!H<dWfczpuNUZuUIguKMA&J@q7OyI4%YBSn|V9uWb|u;WzMKl5L2k<1rZK{~?J
C-9>N!

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/e9/d2f825e793bc9ac2be698348dbe669bad34cad b/test/integration/bisect/expected/repo/.git_keep/objects/e9/d2f825e793bc9ac2be698348dbe669bad34cad
deleted file mode 100644
index be6b5b0fa..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/objects/e9/d2f825e793bc9ac2be698348dbe669bad34cad
+++ /dev/null
@@ -1,4 +0,0 @@
-x��M
-�@�a�s���LҤ��#�#
-�-e��,<�ۗ��/��>�$���
-K�D�ј,H��d�c�!O*�I�f{y5`�{�#QR�I��g��ƒ`}����}�a^�</��=�)����C���޻^��V��?��{�9
\ No newline at end of file
diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/ea/684d3f868c358400465f2ec16a640c319ea6a3 b/test/integration/bisect/expected/repo/.git_keep/objects/ea/684d3f868c358400465f2ec16a640c319ea6a3
deleted file mode 100644
index fa152b466e61bfb1bddd90ba332d1573ede50788..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmV-10M7q-0V^p=O;s>9VlXr?Ff%bxNXyJgWk|TZ>C2L{@nYt$7buu^|BE{vcjprT
H7-JCG%A^!2

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/eb/e59a71e9750e75fb983f241687cdf7f0c8ce94 b/test/integration/bisect/expected/repo/.git_keep/objects/eb/e59a71e9750e75fb983f241687cdf7f0c8ce94
deleted file mode 100644
index b995a9db560e19f0c6194ac4499cd883d5f1d0b3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcWv3IZ_@g<<QQBE2BVCX<<fh_KZjV=@_0Fz&KM@c5?i05-4q`HClN
zYmaVyhC|;~ZDCTJ5ZS4s)Eh;qAjt=EfLsefj>y@Wjdy)@TQX9Nl4C%QTv8VD3509S
zSOmtz-~$xH?|xr*J1_P;FIW9=+n#!owOy=F!w^hJ_UOHHX4G-2>!1AREtxMi-#V85
Cn@7C>

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7 b/test/integration/bisect/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7
deleted file mode 100644
index 0207e4b4bda9947f005801b14769db56d4b4e592..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb|y!xJV3J`pBU06M@0dH?_b

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/f2/7c6ae26adb8396d3861976ba268f87ad8afa0b b/test/integration/bisect/expected/repo/.git_keep/objects/f2/7c6ae26adb8396d3861976ba268f87ad8afa0b
deleted file mode 100644
index 1bb91768c4520f1dcc85e21a945532d28015006b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5b;kjtkNL4*w#7@i9~FONc5CBQ-HLVk41#m{
F0|B>G69)hQ

diff --git a/test/integration/bisect/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 b/test/integration/bisect/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2
deleted file mode 100644
index 674e37f3f65cd9ec8edc356497f730f3b356e4b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~liFgFp{c8~{DQ1<?Qi

diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/bad b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/bad
deleted file mode 100644
index 7394d82df..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/bad
+++ /dev/null
@@ -1 +0,0 @@
-054bdf969fdcf1f90f1998666f628d40f72fde4f
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-39983ea412adebe6c5a3d4451a7673cf0962c472 b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-39983ea412adebe6c5a3d4451a7673cf0962c472
deleted file mode 100644
index 6f59b6df1..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-39983ea412adebe6c5a3d4451a7673cf0962c472
+++ /dev/null
@@ -1 +0,0 @@
-39983ea412adebe6c5a3d4451a7673cf0962c472
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-67fbfb3b74c2381ad1e058949231f2b4f0c8921f b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-67fbfb3b74c2381ad1e058949231f2b4f0c8921f
deleted file mode 100644
index 3be7f3d16..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-67fbfb3b74c2381ad1e058949231f2b4f0c8921f
+++ /dev/null
@@ -1 +0,0 @@
-67fbfb3b74c2381ad1e058949231f2b4f0c8921f
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e927f0f9467e772eea36f24053c9b534303b106a b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e927f0f9467e772eea36f24053c9b534303b106a
deleted file mode 100644
index aeb0e94fb..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e927f0f9467e772eea36f24053c9b534303b106a
+++ /dev/null
@@ -1 +0,0 @@
-e927f0f9467e772eea36f24053c9b534303b106a
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e9d2f825e793bc9ac2be698348dbe669bad34cad b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e9d2f825e793bc9ac2be698348dbe669bad34cad
deleted file mode 100644
index 07ab39a86..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/good-e9d2f825e793bc9ac2be698348dbe669bad34cad
+++ /dev/null
@@ -1 +0,0 @@
-e9d2f825e793bc9ac2be698348dbe669bad34cad
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-bc21c8fabc28201fab6c60503168ecda25ad8626 b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-bc21c8fabc28201fab6c60503168ecda25ad8626
deleted file mode 100644
index 4c1452285..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-bc21c8fabc28201fab6c60503168ecda25ad8626
+++ /dev/null
@@ -1 +0,0 @@
-bc21c8fabc28201fab6c60503168ecda25ad8626
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-d1f7a85555fe6f10dd44754d35459ae741cb107c b/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-d1f7a85555fe6f10dd44754d35459ae741cb107c
deleted file mode 100644
index 5010f334f..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/bisect/skip-d1f7a85555fe6f10dd44754d35459ae741cb107c
+++ /dev/null
@@ -1 +0,0 @@
-d1f7a85555fe6f10dd44754d35459ae741cb107c
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/heads/master b/test/integration/bisect/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index 914b1ab9d..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-78d41b2abbd2f52c1ebf2f496268a915d59eb27b
diff --git a/test/integration/bisect/expected/repo/.git_keep/refs/heads/test b/test/integration/bisect/expected/repo/.git_keep/refs/heads/test
deleted file mode 100644
index 914b1ab9d..000000000
--- a/test/integration/bisect/expected/repo/.git_keep/refs/heads/test
+++ /dev/null
@@ -1 +0,0 @@
-78d41b2abbd2f52c1ebf2f496268a915d59eb27b
diff --git a/test/integration/bisect/expected/repo/file b/test/integration/bisect/expected/repo/file
deleted file mode 100644
index 209e3ef4b..000000000
--- a/test/integration/bisect/expected/repo/file
+++ /dev/null
@@ -1 +0,0 @@
-20
diff --git a/test/integration/bisect/recording.json b/test/integration/bisect/recording.json
deleted file mode 100644
index a4c4a31c1..000000000
--- a/test/integration/bisect/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":595,"Mod":0,"Key":259,"Ch":0},{"Timestamp":731,"Mod":0,"Key":259,"Ch":0},{"Timestamp":964,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1235,"Mod":0,"Key":256,"Ch":98},{"Timestamp":1515,"Mod":0,"Key":13,"Ch":13},{"Timestamp":1954,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2131,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2298,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2442,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2618,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2794,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2971,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3122,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3306,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3490,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3690,"Mod":0,"Key":256,"Ch":98},{"Timestamp":4226,"Mod":0,"Key":258,"Ch":0},{"Timestamp":4706,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5721,"Mod":0,"Key":256,"Ch":98},{"Timestamp":7034,"Mod":0,"Key":258,"Ch":0},{"Timestamp":7355,"Mod":0,"Key":13,"Ch":13},{"Timestamp":8499,"Mod":0,"Key":258,"Ch":0},{"Timestamp":9010,"Mod":0,"Key":256,"Ch":98},{"Timestamp":9362,"Mod":0,"Key":258,"Ch":0},{"Timestamp":9587,"Mod":0,"Key":258,"Ch":0},{"Timestamp":9826,"Mod":0,"Key":258,"Ch":0},{"Timestamp":10178,"Mod":0,"Key":257,"Ch":0},{"Timestamp":10666,"Mod":0,"Key":13,"Ch":13},{"Timestamp":11714,"Mod":0,"Key":257,"Ch":0},{"Timestamp":12042,"Mod":0,"Key":257,"Ch":0},{"Timestamp":12466,"Mod":0,"Key":256,"Ch":98},{"Timestamp":12962,"Mod":0,"Key":258,"Ch":0},{"Timestamp":13130,"Mod":0,"Key":258,"Ch":0},{"Timestamp":13554,"Mod":0,"Key":13,"Ch":13},{"Timestamp":14434,"Mod":0,"Key":258,"Ch":0},{"Timestamp":14850,"Mod":0,"Key":256,"Ch":98},{"Timestamp":15523,"Mod":0,"Key":258,"Ch":0},{"Timestamp":16074,"Mod":0,"Key":13,"Ch":13},{"Timestamp":16642,"Mod":0,"Key":256,"Ch":98},{"Timestamp":17754,"Mod":0,"Key":258,"Ch":0},{"Timestamp":18139,"Mod":0,"Key":13,"Ch":13},{"Timestamp":19889,"Mod":0,"Key":27,"Ch":0},{"Timestamp":20603,"Mod":0,"Key":260,"Ch":0},{"Timestamp":21754,"Mod":0,"Key":256,"Ch":110},{"Timestamp":21938,"Mod":0,"Key":256,"Ch":116},{"Timestamp":21978,"Mod":0,"Key":256,"Ch":101},{"Timestamp":22139,"Mod":0,"Key":256,"Ch":115},{"Timestamp":22178,"Mod":0,"Key":256,"Ch":116},{"Timestamp":22386,"Mod":0,"Key":13,"Ch":13},{"Timestamp":23090,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/bisect/setup.sh b/test/integration/bisect/setup.sh
deleted file mode 100644
index 6aa3bf7df..000000000
--- a/test/integration/bisect/setup.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-for i in {1..20}
-do
-  echo "$i" > file
-  git add .
-  git commit -m "commit $i"
-done
diff --git a/test/integration/bisect/test.json b/test/integration/bisect/test.json
deleted file mode 100644
index 58263936d..000000000
--- a/test/integration/bisect/test.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "description": "Basic git bisect usage",
-  "speed": 5,
-  "skip": true
-}
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/bisect/basic/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..7444ad06a
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+commit 10
diff --git a/test/integration/bisect/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/bisect/basic/expected/repo/.git_keep/FETCH_HEAD
similarity index 100%
rename from test/integration/bisect/expected/repo/.git_keep/FETCH_HEAD
rename to test/integration_new/bisect/basic/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/HEAD b/test/integration_new/bisect/basic/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/test/integration/bisect/expected/repo/.git_keep/config b/test/integration_new/bisect/basic/expected/repo/.git_keep/config
similarity index 87%
rename from test/integration/bisect/expected/repo/.git_keep/config
rename to test/integration_new/bisect/basic/expected/repo/.git_keep/config
index 8ae104545..8a748ce32 100644
--- a/test/integration/bisect/expected/repo/.git_keep/config
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/config
@@ -8,3 +8,5 @@
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration/bisect/expected/repo/.git_keep/description b/test/integration_new/bisect/basic/expected/repo/.git_keep/description
similarity index 100%
rename from test/integration/bisect/expected/repo/.git_keep/description
rename to test/integration_new/bisect/basic/expected/repo/.git_keep/description
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/index b/test/integration_new/bisect/basic/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..d7cd698470e6e19b1e1ca68ffc52885ce0709504
GIT binary patch
literal 866
zcmZ?q402{*U|<4bu4HDPqkPv_U5C+(3=FKypF~+07#f!_Ffe`vsu2NVKKJWg*B8|v
z|L0-c8K}3vZn00O$Q}l+w9K4T14F%%iV~n2FaVh&VD-TtMnlb$K{t=h{hxO+)BF9K
zOm}?9kdD+jY%$jiYMv3gd4lUXeuK;d(NOdB(9N^{k+Hb*0=r#dTuVRSW7|SDSIbjS
z^Ni8W6V~zh12PXpL(OwQH}BH{sSdG3k9?6j_pke!Ci=wkFc?71GeI-&I8*U9OQ3mR
z8fxAnbn^~{p7;CyH!N}GweG?q=am&tv{~0c%`?R?uY3Y8*gPN&HSaOHdE%X=#|~Xx
zaXEjo`TKjTG#HXLzOR9rXNF;3)$7+_^MEweyeH`98LVZf@!2q2JVM|>=EhAMv^I!v
zghS0U$1tzX!v$;}kcOJ~6y3c2+RR-wkymaTE}2wm(Dv)!38pvtQ1dJ>%xj$C1vU>z
zL(O}JZeGCEM0Ni2XHTv_5ua%G)BLFBnp3Nw=2>Ex*QyN(KOhY??>V}8y`Dl-G*6x0
zmg&zlVYA}AiOW8xoQ0TYXn<^9NRX>5FkwqE7#b)TaG57~?CM>zO_HOl-YfR=SB<|<
c<fX0)ol%#VDEJ_F=EE+p)6L5(^j6vf0Lz^Iv;Y7A

literal 0
HcmV?d00001

diff --git a/test/integration/bisect/expected/repo/.git_keep/info/exclude b/test/integration_new/bisect/basic/expected/repo/.git_keep/info/exclude
similarity index 100%
rename from test/integration/bisect/expected/repo/.git_keep/info/exclude
rename to test/integration_new/bisect/basic/expected/repo/.git_keep/info/exclude
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/HEAD b/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..b7b69aa41
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,13 @@
+0000000000000000000000000000000000000000 18197bb6052becf371aca9ab58d8352cebd3bc29 CI <CI@example.com> 1661160645 +1000	commit (initial): commit 01
+18197bb6052becf371aca9ab58d8352cebd3bc29 0ce746de5bee98147a370a19b4568b448fdedfcc CI <CI@example.com> 1661160645 +1000	commit: commit 02
+0ce746de5bee98147a370a19b4568b448fdedfcc d4308139592744ccc7fa9ab0931812da9fdfcc1d CI <CI@example.com> 1661160645 +1000	commit: commit 03
+d4308139592744ccc7fa9ab0931812da9fdfcc1d 0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 CI <CI@example.com> 1661160645 +1000	commit: commit 04
+0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 685d0baa299ec29ff2c7a1ca9268abdd374adef2 CI <CI@example.com> 1661160645 +1000	commit: commit 05
+685d0baa299ec29ff2c7a1ca9268abdd374adef2 483fcff024ff52df164dddea9ab5032370d14228 CI <CI@example.com> 1661160645 +1000	commit: commit 06
+483fcff024ff52df164dddea9ab5032370d14228 f3f9cf9d8f02f35f955b868d277913fc45d724db CI <CI@example.com> 1661160645 +1000	commit: commit 07
+f3f9cf9d8f02f35f955b868d277913fc45d724db a83ada2a0a285982aaa96baeddb70135532ed004 CI <CI@example.com> 1661160645 +1000	commit: commit 08
+a83ada2a0a285982aaa96baeddb70135532ed004 a89b19d40efb59f1f77b5a6b59ed1a9898545d0d CI <CI@example.com> 1661160645 +1000	commit: commit 09
+a89b19d40efb59f1f77b5a6b59ed1a9898545d0d 670ea6605e6780007c543b3d034bcf49c898290d CI <CI@example.com> 1661160645 +1000	commit: commit 10
+670ea6605e6780007c543b3d034bcf49c898290d 685d0baa299ec29ff2c7a1ca9268abdd374adef2 CI <CI@example.com> 1661160646 +1000	checkout: moving from master to 685d0baa299ec29ff2c7a1ca9268abdd374adef2
+685d0baa299ec29ff2c7a1ca9268abdd374adef2 0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 CI <CI@example.com> 1661160646 +1000	checkout: moving from 685d0baa299ec29ff2c7a1ca9268abdd374adef2 to 0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7
+0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 670ea6605e6780007c543b3d034bcf49c898290d CI <CI@example.com> 1661160647 +1000	checkout: moving from 0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 to master
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..86cbc642d
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1,10 @@
+0000000000000000000000000000000000000000 18197bb6052becf371aca9ab58d8352cebd3bc29 CI <CI@example.com> 1661160645 +1000	commit (initial): commit 01
+18197bb6052becf371aca9ab58d8352cebd3bc29 0ce746de5bee98147a370a19b4568b448fdedfcc CI <CI@example.com> 1661160645 +1000	commit: commit 02
+0ce746de5bee98147a370a19b4568b448fdedfcc d4308139592744ccc7fa9ab0931812da9fdfcc1d CI <CI@example.com> 1661160645 +1000	commit: commit 03
+d4308139592744ccc7fa9ab0931812da9fdfcc1d 0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 CI <CI@example.com> 1661160645 +1000	commit: commit 04
+0f77bf7bd7dd91550c927549af82d5b7c6f8a0d7 685d0baa299ec29ff2c7a1ca9268abdd374adef2 CI <CI@example.com> 1661160645 +1000	commit: commit 05
+685d0baa299ec29ff2c7a1ca9268abdd374adef2 483fcff024ff52df164dddea9ab5032370d14228 CI <CI@example.com> 1661160645 +1000	commit: commit 06
+483fcff024ff52df164dddea9ab5032370d14228 f3f9cf9d8f02f35f955b868d277913fc45d724db CI <CI@example.com> 1661160645 +1000	commit: commit 07
+f3f9cf9d8f02f35f955b868d277913fc45d724db a83ada2a0a285982aaa96baeddb70135532ed004 CI <CI@example.com> 1661160645 +1000	commit: commit 08
+a83ada2a0a285982aaa96baeddb70135532ed004 a89b19d40efb59f1f77b5a6b59ed1a9898545d0d CI <CI@example.com> 1661160645 +1000	commit: commit 09
+a89b19d40efb59f1f77b5a6b59ed1a9898545d0d 670ea6605e6780007c543b3d034bcf49c898290d CI <CI@example.com> 1661160645 +1000	commit: commit 10
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36
new file mode 100644
index 0000000000000000000000000000000000000000..a8a2b586df771ca14cecde7807a27ce30a6b580c
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8>+k8|g>J<n=0GWZ>5cLD&o#S2XU

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c
new file mode 100644
index 0000000000000000000000000000000000000000..f3e747107bb9d87ddf233fb1249f6677eb244de5
GIT binary patch
literal 212
zcmV;_04x7^0V^p=O;s>5Gh;9`FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
z6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDElnvMO`1DucBQH9i|=i$@4N$lSPT
OgVqKSj&J}0IcDi5lxa!;

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0c/e746de5bee98147a370a19b4568b448fdedfcc b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0c/e746de5bee98147a370a19b4568b448fdedfcc
new file mode 100644
index 0000000000000000000000000000000000000000..c5d3bb6b19ec6abf5b0948158f33cb15ab9001fa
GIT binary patch
literal 147
zcmV;E0Brww0gaA93c@fD06pgwxeJorG@ArOgr0oH?skiUv86=t`S#!gybd!ky0rG_
z9x5IBX68Ad4iZVIOmhweAR!ji8JI;`vfyA;#jU*AYYz+5EJ7inn9eZ+D_53OrV<mX
z$rMGgI)3;2vib4m&*SZCA8zZ@PP(*<2O<CpG$en75Q5w3KGp3{{pb6D?hCL*J6~RS
BMfCsx

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0f/77bf7bd7dd91550c927549af82d5b7c6f8a0d7 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0f/77bf7bd7dd91550c927549af82d5b7c6f8a0d7
new file mode 100644
index 000000000..08a230736
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/0f/77bf7bd7dd91550c927549af82d5b7c6f8a0d7
@@ -0,0 +1,4 @@
+x��A
+1@Q�=E��$M[[f5�H��C��,<���[|]z�c��	�ٔ��"saA����{�
+�U��Pc$N>ٳs�zn�$cb�d��V�*#�q_6�f�L�~���zҥ_�B 
+��#!���>5�������;@
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c
new file mode 100644
index 0000000000000000000000000000000000000000..933e877a004be087db3ad361d41a016285123f23
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?nk8|g>J<n=0GWfk_cLM;qLko5Q

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/18/197bb6052becf371aca9ab58d8352cebd3bc29 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/18/197bb6052becf371aca9ab58d8352cebd3bc29
new file mode 100644
index 000000000..0c5f11730
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/18/197bb6052becf371aca9ab58d8352cebd3bc29
@@ -0,0 +1,2 @@
+x��M
+�@@a�s��I&?6P��U�QK���H���E����[j)�$ݩm���Wr��(��QV��:�;�jFI�=���8
����������™1�u��������+
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857
new file mode 100644
index 0000000000000000000000000000000000000000..9d7077433af455660d7eaba15a6156e4ea83b0cb
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?%k8|g>J<n=0GWdOAcLxBumkWdd

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8
new file mode 100644
index 0000000000000000000000000000000000000000..dc002385b950b9b8a85d84ba3da3955db702074b
GIT binary patch
literal 186
zcmV;r07d_J0V^p=O;s>5vS2VYFfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
o6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDEln0K+a>>qpLC$N&HU

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3
new file mode 100644
index 0000000000000000000000000000000000000000..350af2800533c3104a701dce1729c5212dcef1f0
GIT binary patch
literal 133
zcmV;00DAv;0V^p=O;s>7HDWL{FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
n3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZZ^CcZiEHDN%H

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
new file mode 100644
index 000000000..e8c48561b
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
@@ -0,0 +1,2 @@
+x+)JMU0�0`040031QH��I50�+�(ap��u}Q��Ɲ�z������AVeV���ϻ����M�;>dHG���k������G����v�q-�|�m�\-O!�2��t@�C,�#_���뾦�>�<ȪL�������7,q���"�O�Y� �2��,=v��������[�����}
�*s�*��5>f�G<�ܸi���pdU`U����j"��6\2�Ҡ�׿Lo��UY�U\MT�?����f?͏j�9�
+I��XU����S��e�3Mج8o��)g�I��
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca
new file mode 100644
index 0000000000000000000000000000000000000000..07b07e91fc3473d2d2b21397ee9c3197bcd0bbe6
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?1k8|g>J<n=0GWcC!cLo5t84Ftg

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc
new file mode 100644
index 0000000000000000000000000000000000000000..c562d38cc74cf217a96352f3dc336a387371e749
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8>sk8|g>J<n=0GWhLdcLV^q#S29M

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/48/3fcff024ff52df164dddea9ab5032370d14228 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/48/3fcff024ff52df164dddea9ab5032370d14228
new file mode 100644
index 0000000000000000000000000000000000000000..018de21ed12e4e7bd2cbb8abb2aa0b312fffa0ff
GIT binary patch
literal 148
zcmV;F0Biqv0gcW*3IZ_@Kw;~gVtPR``I*gth_IE%m?RSvjJqrmJic3a0Nck`yt4HE
z7=TQNv8jSb7u2>ETZrhXHOJJLlltP-*(v*qnIxH2Hhm4C6syf5j#-Q2-IqzQ2s=uW
zYxPr*s?8aBkNdL0e1r3RyXr^!`qWcd`UQ{(kt~G>N3_<Oz3x*(|KvXpmdqEOC_7yx
CXiEnG

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa
new file mode 100644
index 0000000000000000000000000000000000000000..f11f051fc4d081c513a9e04677e32e65caf944af
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPty${9_P+$d!E&1WbkKW_XGgGDGL?=

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204
new file mode 100644
index 0000000000000000000000000000000000000000..ac90c394afbc05bf205db7dcf331d28a569142fd
GIT binary patch
literal 55
zcmV-70LcG%0V^p=O;s?qU@$Z=Ff%bxNXyJgH89jGsVHG^zut9yQT_3M9>$%4di(1Z
N`-F<@0RUnl5mQh97fApB

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/67/0ea6605e6780007c543b3d034bcf49c898290d b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/67/0ea6605e6780007c543b3d034bcf49c898290d
new file mode 100644
index 0000000000000000000000000000000000000000..3ba98094c97fad577b670838dffab1a5fa893167
GIT binary patch
literal 147
zcmV;E0Brww0gaA93c@fD06pgwdlzKaCYue22tD-~n`VQ8v86=t`S#!gybZ$~W?ou*
zbfCnCzL~)g8NFncqCPVv6wz3{hEj(b&Qgncs-$k!&0ZZ;Ql?ZqTFoI<sxjuEyt5V3
zBuRn~1&h;nzb_k%6I{mWW*=?q(@yi!u0YI0jO+s(2@&0H_o;4w=D!{Y-4~8sI}G}_
BLnr_M

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/68/5d0baa299ec29ff2c7a1ca9268abdd374adef2 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/68/5d0baa299ec29ff2c7a1ca9268abdd374adef2
new file mode 100644
index 0000000000000000000000000000000000000000..6c9b79171733a1cca36851cb102c73b349aafe73
GIT binary patch
literal 147
zcmV;E0Brww0gaAJ3c@fDKwak)vlnD0?PMA#B6QVb<TF9R*is^Re6#QXZXb`wOIxjv
z2ISqT9jc&~yiCd=lrjk0m{p@2IFWOriGAYO8JRsC`f7khBo>KTa`wcG$y?#khcemB
zQIacDz$_-b+kHD=Sz%t*n|?ywpL$7Ky+ThDIdmh#nGn%*+NYZSssDUHHec|$JD^6@
BMg;%>

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd
new file mode 100644
index 0000000000000000000000000000000000000000..8d434f2041605e3a4058a78bd8bb3d5a1ad5f503
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg9csk8|g>J<n=0GWhLhcLV^q%nL>U

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b
new file mode 100644
index 0000000000000000000000000000000000000000..85866acd897b150150557b0a331c827562ca4fa7
GIT binary patch
literal 81
zcmV-X0IvUd0V^p=O;s>AV=y!@Ff%bxNXyJgH89jGsVHG^zut9yQT_3M9>$%4di(1Z
n`-F<@K~`l1R>kK2&%2oE{r*j+J3eGcN9r85m}>?A;$I(9i#8>|

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/3ada2a0a285982aaa96baeddb70135532ed004 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/3ada2a0a285982aaa96baeddb70135532ed004
new file mode 100644
index 0000000000000000000000000000000000000000..da4e3e339e95a2fd020b4c4e3afa98a569702309
GIT binary patch
literal 149
zcmV;G0BZku0gcW*3IZ_@Kw;~gVtPR`NoJCOh_IE%$j=N4uDdJ|Jic3a0Nck`ytd5q
zV*qA8j7<cpFG3jEwMN<HN-Zc?CP}4Z$P_RHmE_D?HhB$DueoXNNv%^)nu%)S)Lo1j
zy|zF-y3ngB?{Qx?m~L>MZddt~d40;ME%ODC8Idgqf+JdM&0hDZA%F6p2b;_nP8&Ls
DRWC!Q

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/9b19d40efb59f1f77b5a6b59ed1a9898545d0d b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/9b19d40efb59f1f77b5a6b59ed1a9898545d0d
new file mode 100644
index 000000000..9d4aa4be5
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/a8/9b19d40efb59f1f77b5a6b59ed1a9898545d0d
@@ -0,0 +1,2 @@
+x��K
+�0@]��d&���c�LQ����"���<���e����o�P��]��L-;�r�0�i�&5�l�� �I+(6�VD8��JBr!8�
�y�۲�0�y���y}�.�(F���8"���S]��= �d�:�
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
new file mode 100644
index 000000000..7eacc86e0
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
@@ -0,0 +1 @@
+x+)JMU060a040031QH��I50�+�(ap��u}Q��Ɲ�z������AVeV���ϻ����M�;>dHG���k������G����v�q-�|�m�\-O!�2��t@�C,�#_���뾦�>�<ȪL�������7,q���"�O�Y� �2��,=v��������[�����}
�*s�*��5>f�G<�ܸi���pdU`U����j"��6\2�Ҡ�׿Lo�4�v5
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f
new file mode 100644
index 0000000000000000000000000000000000000000..17f75bca502e6b34e2f231b56e520976da3a5221
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPty$n9_P+$d!E&1WbpgT?g0S6(F_Lw

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac
new file mode 100644
index 0000000000000000000000000000000000000000..6ac1f71b1ac5591558972d0ca7dba18052afb32b
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?Xk8|g>J<n=0GWb1WcLe~sLkn&I

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e
new file mode 100644
index 0000000000000000000000000000000000000000..f184b6b997d3abbf26741a2a27476f2e32ffbe5c
GIT binary patch
literal 265
zcmV+k0rviQ0V^p=O;s>9F=8+@FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
z6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDElnvMO`1DucBQH9i|=i$@4N$lSPT
zgVqKSj&NjE7GPETwVAtWBCp&wTr#QBpzYVc6HIUPkyTlORRvs4ROdf`_T>5#@rh<X
P&5vrXIkgG^y`zQc0`Y}{

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/d4/308139592744ccc7fa9ab0931812da9fdfcc1d b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/d4/308139592744ccc7fa9ab0931812da9fdfcc1d
new file mode 100644
index 0000000000000000000000000000000000000000..27a1e4ef2f5bdef0d86f86cf4c2acb8aa87ba32e
GIT binary patch
literal 148
zcmV;F0Biqv0gcX03c@fDhGEw^#q0%{X_9FIB0^UlBR^kIu(p&49^WoJfZLa6@s?$t
zADtxXp>F^|YnJ9i8FKbW)d{<p0-BA&RvCL61cO=AhF2#p7@b!548$OAOm^fXF*~mz
zI~Q6-ZKas>?)PP*=|<=2cEu;n>l3H4%oh?>5oL9rj>61lulrQTpZw>Et@#4$-aD(l
CYeonF

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1
new file mode 100644
index 0000000000000000000000000000000000000000..37f59fe0fb0228d08de7eb36a278ec52c722aec2
GIT binary patch
literal 160
zcmV;R0AK%j0V^p=O;s?oG+;0^FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
O6;HHT*8l*@%}K*azEJT1

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2
new file mode 100644
index 0000000000000000000000000000000000000000..8bcfafeb644d88961fada612e53598966fbe73ed
GIT binary patch
literal 108
zcmV-y0F(cC0V^p=O;s>7G+{6_FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
O3)x&PPXPdnMJ)ztA2U4w

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030 b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030
new file mode 100644
index 0000000000000000000000000000000000000000..7e30b2e352ac316b3082ec42a9aabada4e057a17
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?Hk8|g>J<n=0GWgwOcL4yn?+ai6

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f3/f9cf9d8f02f35f955b868d277913fc45d724db b/test/integration_new/bisect/basic/expected/repo/.git_keep/objects/f3/f9cf9d8f02f35f955b868d277913fc45d724db
new file mode 100644
index 0000000000000000000000000000000000000000..14633d8d179de3187ee703e6839db47e97b4aff3
GIT binary patch
literal 148
zcmV;F0Biqv0gcW*3IZ_@Kw;~gVtPSl@*fZpw%TLFnG6cXU6u$Q-z_|V?c*yRFTFno
zP>F}JwFa0Aa?-3d3o(VH)^i9o-crggIwy{W3!AlW?KQw>r>u(Bs|G7d(Thl{rQQNM
z>k<liYqP2EabGr=W;jptwS8(|pY6m;zW~KZ6fyb$M?yri*L`ZVKl#rCCi4YuuR6zE
C@Io{I

literal 0
HcmV?d00001

diff --git a/test/integration/bisect/expected/repo/.git_keep/packed-refs b/test/integration_new/bisect/basic/expected/repo/.git_keep/packed-refs
similarity index 100%
rename from test/integration/bisect/expected/repo/.git_keep/packed-refs
rename to test/integration_new/bisect/basic/expected/repo/.git_keep/packed-refs
diff --git a/test/integration_new/bisect/basic/expected/repo/.git_keep/refs/heads/master b/test/integration_new/bisect/basic/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..0081272f7
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+670ea6605e6780007c543b3d034bcf49c898290d
diff --git a/test/integration_new/bisect/basic/expected/repo/file01.txt b/test/integration_new/bisect/basic/expected/repo/file01.txt
new file mode 100644
index 000000000..47d78ad7a
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file01.txt
@@ -0,0 +1 @@
+file01 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file02.txt b/test/integration_new/bisect/basic/expected/repo/file02.txt
new file mode 100644
index 000000000..0647fe4b7
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file02.txt
@@ -0,0 +1 @@
+file02 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file03.txt b/test/integration_new/bisect/basic/expected/repo/file03.txt
new file mode 100644
index 000000000..3bf868a38
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file03.txt
@@ -0,0 +1 @@
+file03 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file04.txt b/test/integration_new/bisect/basic/expected/repo/file04.txt
new file mode 100644
index 000000000..f2c01a881
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file04.txt
@@ -0,0 +1 @@
+file04 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file05.txt b/test/integration_new/bisect/basic/expected/repo/file05.txt
new file mode 100644
index 000000000..c255cf4ef
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file05.txt
@@ -0,0 +1 @@
+file05 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file06.txt b/test/integration_new/bisect/basic/expected/repo/file06.txt
new file mode 100644
index 000000000..178975c6c
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file06.txt
@@ -0,0 +1 @@
+file06 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file07.txt b/test/integration_new/bisect/basic/expected/repo/file07.txt
new file mode 100644
index 000000000..30ad007c4
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file07.txt
@@ -0,0 +1 @@
+file07 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file08.txt b/test/integration_new/bisect/basic/expected/repo/file08.txt
new file mode 100644
index 000000000..bf2b038a7
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file08.txt
@@ -0,0 +1 @@
+file08 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file09.txt b/test/integration_new/bisect/basic/expected/repo/file09.txt
new file mode 100644
index 000000000..50d561270
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file09.txt
@@ -0,0 +1 @@
+file09 content
\ No newline at end of file
diff --git a/test/integration_new/bisect/basic/expected/repo/file10.txt b/test/integration_new/bisect/basic/expected/repo/file10.txt
new file mode 100644
index 000000000..8d4912942
--- /dev/null
+++ b/test/integration_new/bisect/basic/expected/repo/file10.txt
@@ -0,0 +1 @@
+file10 content
\ No newline at end of file

From 8cdfc6758fd7e57d8a592f470f9c38f04a8372d0 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 19:52:05 +1000
Subject: [PATCH 05/44] add another bisect integration test

---
 pkg/integration/components/shell.go           |   4 +
 .../tests/bisect/from_other_branch.go         |  69 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   1 +
 .../repo/.git_keep/BISECT_ANCESTORS_OK        |   0
 .../repo/.git_keep/BISECT_EXPECTED_REV        |   1 -
 .../expected/repo/.git_keep/BISECT_LOG        |  12 ---
 .../expected/repo/.git_keep/BISECT_NAMES      |   1 -
 .../expected/repo/.git_keep/BISECT_START      |   1 -
 .../expected/repo/.git_keep/BISECT_TERMS      |   2 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 -
 .../expected/repo/.git_keep/HEAD              |   1 -
 .../expected/repo/.git_keep/index             | Bin 137 -> 0 bytes
 .../expected/repo/.git_keep/logs/HEAD         |  28 -------
 .../repo/.git_keep/logs/refs/heads/master     |   1 -
 .../repo/.git_keep/logs/refs/heads/other      |  21 ------
 .../repo/.git_keep/logs/refs/heads/test       |   1 -
 .../00/750edc07d6415dcc07ae0351e9397b0222b7ba | Bin 17 -> 0 bytes
 .../03/ecdaa424af1fdaeab1bd1852319652b9518f11 | Bin 76 -> 0 bytes
 .../04/a577be2858b8024716876aefe6b665a98e1e4f | Bin 76 -> 0 bytes
 .../05/57fc43da38567eae00831e9b385fd2cad22643 | Bin 76 -> 0 bytes
 .../0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f | Bin 17 -> 0 bytes
 .../0d/1bbe8d012c8c070167a006a4898b525cfbd930 | Bin 76 -> 0 bytes
 .../0f/373801691c466240bd131d28b2168712b045ba |   3 -
 .../10/e171beacb963e4f8a4dc1d80fd291c135902bb | Bin 148 -> 0 bytes
 .../11/e4fd4011c9ed3800bb33b85580dd1d09f6aefd | Bin 147 -> 0 bytes
 .../15/d4c5b8608fe472fd224333e60d44ea826cc80e | Bin 147 -> 0 bytes
 .../1a/35564b85e24c96e647b477aaf8d35dcf0de84d | Bin 147 -> 0 bytes
 .../1a/b342c03b4226cca1c751dba71fa2df0e7d82ee | Bin 148 -> 0 bytes
 .../1e/8b314962144c26d5e0e50fd29d2ca327864913 | Bin 17 -> 0 bytes
 .../20/9e3ef4b6247ce746048d5711befda46206d235 | Bin 18 -> 0 bytes
 .../26/661287266e53bda69d8daa3aac1f714650f13c | Bin 76 -> 0 bytes
 .../30/68d0d730547aaa5b86dbfe638db83133ae1421 | Bin 146 -> 0 bytes
 .../31/df6c951dc82b75b11bc48836e780134a16e6ad | Bin 76 -> 0 bytes
 .../33/3ff293caf2d3216edf22e3f1df64d43a7e1311 | Bin 149 -> 0 bytes
 .../36/903784186b1b8b4a150dc656eccd49f94e114e | Bin 121 -> 0 bytes
 .../38/242e5215bc35b3e418c1d6d63fd0291001e10b |   2 -
 .../3a/05ed1ca9671bc362c7197eb09bddff040c9110 | Bin 76 -> 0 bytes
 .../3b/e94d6b1b1b3b63db9e412b2e788d08979bc176 | Bin 76 -> 0 bytes
 .../3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0 | Bin 18 -> 0 bytes
 .../3f/bb9e626d4b7d30e58346b3eefaa342b15ab776 | Bin 147 -> 0 bytes
 .../3f/d9ad29c185eac6106cfa005a3aa594e21b9e06 | Bin 147 -> 0 bytes
 .../43/99b07bd31d1f58a0ff10b5434d5ff4f36e38fb | Bin 76 -> 0 bytes
 .../45/a4fb75db864000d01701c0f7a51864bd4daabf | Bin 17 -> 0 bytes
 .../48/082f72f087ce7e6fa75b9c41d7387daecd447b | Bin 18 -> 0 bytes
 .../4a/9e01012c736e5e0998b7184d9a54e8c610ed02 | Bin 77 -> 0 bytes
 .../54/93d27d38b9902cf28b1035c644bf470df76060 | Bin 147 -> 0 bytes
 .../60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2 | Bin 18 -> 0 bytes
 .../6f/a769bf11bd9dc4ff4e85f4951950b0bc34326f |   3 -
 .../74/cd0e856d938eb6b665284c5485c00f87e20dc5 | Bin 51 -> 0 bytes
 .../7c/fd51ebd06287effcfdab241235305cb6439d40 | Bin 76 -> 0 bytes
 .../7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69 | Bin 17 -> 0 bytes
 .../7f/8f011eb73d6043d2e6db9d2c101195ae2801f2 | Bin 17 -> 0 bytes
 .../83/51c19397f4fcd5238d10034fa7fa384f14d580 | Bin 18 -> 0 bytes
 .../88/8633a131a49f1b8981d70c13d666defed6ba15 | Bin 77 -> 0 bytes
 .../8b/0156bd25a1ecd82ef7c4c53e9d6d312bb6d403 | Bin 76 -> 0 bytes
 .../90/dfebd90b0a89766c39928f22901b8c02b51fda |   1 -
 .../98/d9bcb75a685dfbfd60f611c309410152935b3d | Bin 18 -> 0 bytes
 .../9c/836a5c3f513818d300b410f8cb3a2e3bbd42a1 | Bin 148 -> 0 bytes
 .../9d/33ec0915534bf6401be9412203697791e40a04 |   1 -
 .../b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e | Bin 18 -> 0 bytes
 .../b2/970eba9fd8dba8655094dc38fb4ee50b9bf23e | Bin 148 -> 0 bytes
 .../b4/de3947675361a7770d29b8982c407b0ec6b2a0 | Bin 18 -> 0 bytes
 .../b6/14152a335aabd8b5daa2c6abccc9425eb14177 |   2 -
 .../b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3 | Bin 18 -> 0 bytes
 .../b8/626c4cff2849624fb67f87cd0ad72b163671ad | Bin 17 -> 0 bytes
 .../cd/c58c0f95a2313ded9185e102bc35253f6a1bed | Bin 76 -> 0 bytes
 .../d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d | Bin 17 -> 0 bytes
 .../d2/7a997859219951ecc95c351174c70ea0cf9d37 |   3 -
 .../d3/6e09d97bf2c1527118bde353ad64b157f8b269 |   1 -
 .../d4/e982570808a24722649e852a92bda5cf54c9dd | Bin 76 -> 0 bytes
 .../d6/b24041cf04154f8f902651969675021f4d93a5 | Bin 18 -> 0 bytes
 .../d8/4e0684b1038552d5c8d86e67398d634f77ad3b | Bin 148 -> 0 bytes
 .../da/8dacb2a073ebc2adeddceb3cc2b39b6c95c858 | Bin 76 -> 0 bytes
 .../db/76c03074879025735b647b825786a7b3fcfe7c | Bin 76 -> 0 bytes
 .../e5/59f83c6e8dd11680de70b487725e37ff2e283f |   3 -
 .../e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 | Bin 15 -> 0 bytes
 .../ec/635144f60048986bc560c5576355344005e6e7 | Bin 17 -> 0 bytes
 .../f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 | Bin 18 -> 0 bytes
 .../ff/231021500c7beb87de0d6d5edc29b6f9c000b1 | Bin 147 -> 0 bytes
 .../expected/repo/.git_keep/refs/bisect/bad   |   1 -
 ...d-38242e5215bc35b3e418c1d6d63fd0291001e10b |   1 -
 ...d-3fbb9e626d4b7d30e58346b3eefaa342b15ab776 |   1 -
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../expected/repo/.git_keep/refs/heads/other  |   1 -
 .../expected/repo/.git_keep/refs/heads/test   |   1 -
 .../expected/repo/myfile                      |   0
 .../bisectFromOtherBranch/recording.json      |   1 -
 .../bisectFromOtherBranch/setup.sh            |  27 -------
 .../bisectFromOtherBranch/test.json           |   4 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../expected/repo/.git_keep/HEAD              |   1 +
 .../expected/repo/.git_keep/config            |   2 +
 .../expected/repo/.git_keep/description       |   0
 .../expected/repo/.git_keep/index             | Bin 0 -> 65 bytes
 .../expected/repo/.git_keep/info/exclude      |   0
 .../expected/repo/.git_keep/logs/HEAD         |  15 ++++
 .../repo/.git_keep/logs/refs/heads/master     |   1 +
 .../repo/.git_keep/logs/refs/heads/other      |  11 +++
 .../06/47fe4b7302efbfb235b8f0681b592cc3389d36 | Bin 0 -> 30 bytes
 .../08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c | Bin 0 -> 212 bytes
 .../0d/4e099996a7c3dc58120cfe1ec34973b309d0e0 | Bin 0 -> 148 bytes
 .../17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c | Bin 0 -> 30 bytes
 .../30/ad007c4cb09b175810e069b1b2b02ab0140857 | Bin 0 -> 30 bytes
 .../31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8 | Bin 0 -> 186 bytes
 .../35/da65f29bc0b48aa80bd3a02cff623cf4355fd3 | Bin 0 -> 133 bytes
 .../37/6048ba8da4b619088a7f4a5df3f528fde41f1a |   2 +
 .../3a/899150d167edb02f0ef2ab43bf446d23d90310 | Bin 0 -> 146 bytes
 .../3b/f868a389d0073e715e848f0ee33d71064539ca | Bin 0 -> 30 bytes
 .../41/bffcc8f25d268518574e91483a55e66124574c | Bin 0 -> 148 bytes
 .../47/d78ad7a27fc7fe483389512ebf7ea34c5514bc | Bin 0 -> 30 bytes
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../50/d561270fcfcdc9afc85f6136f937c529accaaa | Bin 0 -> 30 bytes
 .../55/3197193920043fb04f3e39e825916990955204 | Bin 0 -> 55 bytes
 .../5c/9b8a0a95c49c1674753ad827246ce05965e7fe |   6 ++
 .../5f/80f6e6bd2410efe5b5f613adc5b4fcf50e930d |   3 +
 .../7f/8a9a8381ae3fe82a0c43385d3a5bb25cf90699 | Bin 0 -> 148 bytes
 .../8d/49129429cacbb6694f0290b3219e91a6f364cd | Bin 0 -> 30 bytes
 .../9c/dece2525ed2b34f940b168a2f628984468a8c6 | Bin 0 -> 148 bytes
 .../a0/2c4b36b68df7081152282cf1aabcab7b24e69b | Bin 0 -> 81 bytes
 .../b3/ae51762cc5929b5c4f6b65e8ad14954144fe82 |   1 +
 .../bf/2b038a7c59d4db31a492793086fafec802ec2f | Bin 0 -> 30 bytes
 .../c2/55cf4ef7fd5661a9d68b717243a978e42b05ac | Bin 0 -> 30 bytes
 .../cf/b438e7991d830d830d58744b99cff451a9d07e | Bin 0 -> 265 bytes
 .../d4/779d400f252d1de4e76ef79e3b4d554fffadb5 | Bin 0 -> 148 bytes
 .../df/f71e43e297a66eb7ec85b7b95ece827751cdbd | Bin 0 -> 148 bytes
 .../e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1 | Bin 0 -> 160 bytes
 .../e4/fca3fab85b7a477a2de101e917fe43538e0302 | Bin 0 -> 148 bytes
 .../e6/db1f58c2bb5ead41049a8ef3910360eead21e2 | Bin 0 -> 108 bytes
 .../e7/39ef9112312917b4fc678e40e2372cc8fda25f | Bin 0 -> 147 bytes
 .../f2/c01a881661486f147e47f5be82914c5d0c0030 | Bin 0 -> 30 bytes
 .../expected/repo/.git_keep/packed-refs       |   0
 .../expected/repo/.git_keep/refs/heads/master |   1 +
 .../expected/repo/.git_keep/refs/heads/other  |   1 +
 134 files changed, 119 insertions(+), 127 deletions(-)
 create mode 100644 pkg/integration/tests/bisect/from_other_branch.go
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_ANCESTORS_OK
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_EXPECTED_REV
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_LOG
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_NAMES
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_START
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_TERMS
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/index
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/other
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/test
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/03/ecdaa424af1fdaeab1bd1852319652b9518f11
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/04/a577be2858b8024716876aefe6b665a98e1e4f
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/05/57fc43da38567eae00831e9b385fd2cad22643
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0d/1bbe8d012c8c070167a006a4898b525cfbd930
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0f/373801691c466240bd131d28b2168712b045ba
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/10/e171beacb963e4f8a4dc1d80fd291c135902bb
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/11/e4fd4011c9ed3800bb33b85580dd1d09f6aefd
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/15/d4c5b8608fe472fd224333e60d44ea826cc80e
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/35564b85e24c96e647b477aaf8d35dcf0de84d
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/b342c03b4226cca1c751dba71fa2df0e7d82ee
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/26/661287266e53bda69d8daa3aac1f714650f13c
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/30/68d0d730547aaa5b86dbfe638db83133ae1421
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/31/df6c951dc82b75b11bc48836e780134a16e6ad
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/33/3ff293caf2d3216edf22e3f1df64d43a7e1311
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/36/903784186b1b8b4a150dc656eccd49f94e114e
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/38/242e5215bc35b3e418c1d6d63fd0291001e10b
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3a/05ed1ca9671bc362c7197eb09bddff040c9110
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3b/e94d6b1b1b3b63db9e412b2e788d08979bc176
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/bb9e626d4b7d30e58346b3eefaa342b15ab776
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/d9ad29c185eac6106cfa005a3aa594e21b9e06
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/43/99b07bd31d1f58a0ff10b5434d5ff4f36e38fb
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/4a/9e01012c736e5e0998b7184d9a54e8c610ed02
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/54/93d27d38b9902cf28b1035c644bf470df76060
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/6f/a769bf11bd9dc4ff4e85f4951950b0bc34326f
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/74/cd0e856d938eb6b665284c5485c00f87e20dc5
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7c/fd51ebd06287effcfdab241235305cb6439d40
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/88/8633a131a49f1b8981d70c13d666defed6ba15
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/8b/0156bd25a1ecd82ef7c4c53e9d6d312bb6d403
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/90/dfebd90b0a89766c39928f22901b8c02b51fda
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/98/d9bcb75a685dfbfd60f611c309410152935b3d
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9c/836a5c3f513818d300b410f8cb3a2e3bbd42a1
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9d/33ec0915534bf6401be9412203697791e40a04
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b2/970eba9fd8dba8655094dc38fb4ee50b9bf23e
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/14152a335aabd8b5daa2c6abccc9425eb14177
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/cd/c58c0f95a2313ded9185e102bc35253f6a1bed
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d2/7a997859219951ecc95c351174c70ea0cf9d37
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d3/6e09d97bf2c1527118bde353ad64b157f8b269
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d4/e982570808a24722649e852a92bda5cf54c9dd
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d8/4e0684b1038552d5c8d86e67398d634f77ad3b
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/da/8dacb2a073ebc2adeddceb3cc2b39b6c95c858
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/db/76c03074879025735b647b825786a7b3fcfe7c
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e5/59f83c6e8dd11680de70b487725e37ff2e283f
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ff/231021500c7beb87de0d6d5edc29b6f9c000b1
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/bad
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-38242e5215bc35b3e418c1d6d63fd0291001e10b
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-3fbb9e626d4b7d30e58346b3eefaa342b15ab776
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/other
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/test
 delete mode 100644 test/integration/bisectFromOtherBranch/expected/repo/myfile
 delete mode 100644 test/integration/bisectFromOtherBranch/recording.json
 delete mode 100644 test/integration/bisectFromOtherBranch/setup.sh
 delete mode 100644 test/integration/bisectFromOtherBranch/test.json
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/COMMIT_EDITMSG
 rename test/{integration/bisectFromOtherBranch => integration_new/bisect/from_other_branch}/expected/repo/.git_keep/FETCH_HEAD (100%)
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/HEAD
 rename test/{integration/bisectFromOtherBranch => integration_new/bisect/from_other_branch}/expected/repo/.git_keep/config (87%)
 rename test/{integration/bisectFromOtherBranch => integration_new/bisect/from_other_branch}/expected/repo/.git_keep/description (100%)
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/index
 rename test/{integration/bisectFromOtherBranch => integration_new/bisect/from_other_branch}/expected/repo/.git_keep/info/exclude (100%)
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/master
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/other
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/0d/4e099996a7c3dc58120cfe1ec34973b309d0e0
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3a/899150d167edb02f0ef2ab43bf446d23d90310
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/41/bffcc8f25d268518574e91483a55e66124574c
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5c/9b8a0a95c49c1674753ad827246ce05965e7fe
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5f/80f6e6bd2410efe5b5f613adc5b4fcf50e930d
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/7f/8a9a8381ae3fe82a0c43385d3a5bb25cf90699
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/9c/dece2525ed2b34f940b168a2f628984468a8c6
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/d4/779d400f252d1de4e76ef79e3b4d554fffadb5
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/df/f71e43e297a66eb7ec85b7b95ece827751cdbd
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e4/fca3fab85b7a477a2de101e917fe43538e0302
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e7/39ef9112312917b4fc678e40e2372cc8fda25f
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030
 rename test/{integration/bisectFromOtherBranch => integration_new/bisect/from_other_branch}/expected/repo/.git_keep/packed-refs (100%)
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/master
 create mode 100644 test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/other

diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index ee57cf401..7b7a68543 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -44,6 +44,10 @@ func (s *Shell) NewBranch(name string) *Shell {
 	return s.RunCommand("git checkout -b " + name)
 }
 
+func (s *Shell) Checkout(name string) *Shell {
+	return s.RunCommand("git checkout " + name)
+}
+
 func (s *Shell) GitAdd(path string) *Shell {
 	return s.RunCommand(fmt.Sprintf("git add \"%s\"", path))
 }
diff --git a/pkg/integration/tests/bisect/from_other_branch.go b/pkg/integration/tests/bisect/from_other_branch.go
new file mode 100644
index 000000000..4ef9a4d73
--- /dev/null
+++ b/pkg/integration/tests/bisect/from_other_branch.go
@@ -0,0 +1,69 @@
+package bisect
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var FromOtherBranch = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Opening lazygit when bisect has been started from another branch. There's an issue where we don't reselect the current branch if we mark the current branch as bad so this test side-steps that problem",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupRepo: func(shell *Shell) {
+		shell.
+			EmptyCommit("only commit on master"). // this'll ensure we have a master branch
+			NewBranch("other").
+			CreateNCommits(10).
+			Checkout("master").
+			RunCommand("git bisect start other~2 other~5")
+	},
+	SetupConfig: func(cfg *config.AppConfig) {},
+	Run: func(
+		shell *Shell,
+		input *Input,
+		assert *Assert,
+		keys config.KeybindingConfig,
+	) {
+		viewBisectOptions := func() {
+			input.PressKeys(keys.Commits.ViewBisectOptions)
+			assert.InMenu()
+		}
+
+		markCommitAsGood := func() {
+			viewBisectOptions()
+			assert.MatchSelectedLine(Contains("bad"))
+			input.NextItem()
+			assert.MatchSelectedLine(Contains("good"))
+
+			input.Confirm()
+		}
+
+		assert.MatchViewContent("information", Contains("bisecting"))
+
+		assert.AtLeastOneCommit()
+
+		input.SwitchToCommitsWindow()
+
+		assert.MatchSelectedLine(Contains("<-- bad"))
+		assert.MatchSelectedLine(Contains("commit 08"))
+
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("<-- current"))
+		assert.MatchSelectedLine(Contains("commit 07"))
+
+		markCommitAsGood()
+
+		assert.InAlert()
+		assert.MatchCurrentViewContent(Contains("Bisect complete!"))
+		assert.MatchCurrentViewContent(Contains("commit 08"))
+		assert.MatchCurrentViewContent(Contains("Do you want to reset"))
+		input.Confirm()
+
+		assert.MatchViewContent("information", NotContains("bisecting"))
+
+		// back in master branch which just had the one commit
+		assert.CurrentViewName("commits")
+		assert.CommitCount(1)
+		assert.MatchSelectedLine(Contains("only commit on master"))
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 5668fcbba..6fcd8249f 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -29,6 +29,7 @@ var tests = []*components.IntegrationTest{
 	custom_commands.MultiplePrompts,
 	custom_commands.MenuFromCommand,
 	bisect.Basic,
+	bisect.FromOtherBranch,
 }
 
 func GetTests() []*components.IntegrationTest {
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_ANCESTORS_OK b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_ANCESTORS_OK
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_EXPECTED_REV b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_EXPECTED_REV
deleted file mode 100644
index df35eff7a..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_EXPECTED_REV
+++ /dev/null
@@ -1 +0,0 @@
-10e171beacb963e4f8a4dc1d80fd291c135902bb
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_LOG b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_LOG
deleted file mode 100644
index 6a5f8b695..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_LOG
+++ /dev/null
@@ -1,12 +0,0 @@
-# bad: [0f373801691c466240bd131d28b2168712b045ba] commit 18
-# good: [38242e5215bc35b3e418c1d6d63fd0291001e10b] commit 7
-git bisect start 'other~2' 'other~13'
-# bad: [d27a997859219951ecc95c351174c70ea0cf9d37] commit 12
-git bisect bad d27a997859219951ecc95c351174c70ea0cf9d37
-# good: [3fbb9e626d4b7d30e58346b3eefaa342b15ab776] commit 9
-git bisect good 3fbb9e626d4b7d30e58346b3eefaa342b15ab776
-# bad: [d84e0684b1038552d5c8d86e67398d634f77ad3b] commit 11
-git bisect bad d84e0684b1038552d5c8d86e67398d634f77ad3b
-# bad: [10e171beacb963e4f8a4dc1d80fd291c135902bb] commit 10
-git bisect bad 10e171beacb963e4f8a4dc1d80fd291c135902bb
-# first bad commit: [10e171beacb963e4f8a4dc1d80fd291c135902bb] commit 10
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_NAMES b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_NAMES
deleted file mode 100644
index 8b1378917..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_NAMES
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_START b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_START
deleted file mode 100644
index 1f7391f92..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_START
+++ /dev/null
@@ -1 +0,0 @@
-master
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_TERMS b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_TERMS
deleted file mode 100644
index 25dd30b14..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/BISECT_TERMS
+++ /dev/null
@@ -1,2 +0,0 @@
-bad
-good
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index e6cf6d392..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-commit 20
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/HEAD b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/HEAD
deleted file mode 100644
index cea9d05ed..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/test
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/index b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/index
deleted file mode 100644
index c469e6ea5f4096d9bb1a8b5449f62143b0a46ac9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 137
zcmZ?q402{*U|<4b#>5ZLS4fBT1%YVEUmwI785mfZG-~fMFf=X!N`D2a5dmU`XLBFT
z-gNPrvv;@Vy7H(Sho1BVPh?=rtxU_zNd?J=1i88bDM<!H1p}^<vwW?&ll!)9OV#iR
iX+6N-{)qSJn&rDD>{_{FqnAHp<Fo5wd&BmXl>-20U^7tw

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/HEAD b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index 31a81bf7a..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,28 +0,0 @@
-0000000000000000000000000000000000000000 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177881 +1100	commit (initial): first commit
-36903784186b1b8b4a150dc656eccd49f94e114e 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177881 +1100	checkout: moving from master to other
-36903784186b1b8b4a150dc656eccd49f94e114e 1ab342c03b4226cca1c751dba71fa2df0e7d82ee CI <CI@example.com> 1643177881 +1100	commit: commit 1
-1ab342c03b4226cca1c751dba71fa2df0e7d82ee 15d4c5b8608fe472fd224333e60d44ea826cc80e CI <CI@example.com> 1643177881 +1100	commit: commit 2
-15d4c5b8608fe472fd224333e60d44ea826cc80e b614152a335aabd8b5daa2c6abccc9425eb14177 CI <CI@example.com> 1643177881 +1100	commit: commit 3
-b614152a335aabd8b5daa2c6abccc9425eb14177 1a35564b85e24c96e647b477aaf8d35dcf0de84d CI <CI@example.com> 1643177881 +1100	commit: commit 4
-1a35564b85e24c96e647b477aaf8d35dcf0de84d 11e4fd4011c9ed3800bb33b85580dd1d09f6aefd CI <CI@example.com> 1643177881 +1100	commit: commit 5
-11e4fd4011c9ed3800bb33b85580dd1d09f6aefd 3068d0d730547aaa5b86dbfe638db83133ae1421 CI <CI@example.com> 1643177881 +1100	commit: commit 6
-3068d0d730547aaa5b86dbfe638db83133ae1421 38242e5215bc35b3e418c1d6d63fd0291001e10b CI <CI@example.com> 1643177881 +1100	commit: commit 7
-38242e5215bc35b3e418c1d6d63fd0291001e10b ff231021500c7beb87de0d6d5edc29b6f9c000b1 CI <CI@example.com> 1643177881 +1100	commit: commit 8
-ff231021500c7beb87de0d6d5edc29b6f9c000b1 3fbb9e626d4b7d30e58346b3eefaa342b15ab776 CI <CI@example.com> 1643177881 +1100	commit: commit 9
-3fbb9e626d4b7d30e58346b3eefaa342b15ab776 10e171beacb963e4f8a4dc1d80fd291c135902bb CI <CI@example.com> 1643177881 +1100	commit: commit 10
-10e171beacb963e4f8a4dc1d80fd291c135902bb d84e0684b1038552d5c8d86e67398d634f77ad3b CI <CI@example.com> 1643177882 +1100	commit: commit 11
-d84e0684b1038552d5c8d86e67398d634f77ad3b d27a997859219951ecc95c351174c70ea0cf9d37 CI <CI@example.com> 1643177882 +1100	commit: commit 12
-d27a997859219951ecc95c351174c70ea0cf9d37 3fd9ad29c185eac6106cfa005a3aa594e21b9e06 CI <CI@example.com> 1643177882 +1100	commit: commit 13
-3fd9ad29c185eac6106cfa005a3aa594e21b9e06 b2970eba9fd8dba8655094dc38fb4ee50b9bf23e CI <CI@example.com> 1643177882 +1100	commit: commit 14
-b2970eba9fd8dba8655094dc38fb4ee50b9bf23e 6fa769bf11bd9dc4ff4e85f4951950b0bc34326f CI <CI@example.com> 1643177882 +1100	commit: commit 15
-6fa769bf11bd9dc4ff4e85f4951950b0bc34326f 9c836a5c3f513818d300b410f8cb3a2e3bbd42a1 CI <CI@example.com> 1643177882 +1100	commit: commit 16
-9c836a5c3f513818d300b410f8cb3a2e3bbd42a1 5493d27d38b9902cf28b1035c644bf470df76060 CI <CI@example.com> 1643177882 +1100	commit: commit 17
-5493d27d38b9902cf28b1035c644bf470df76060 0f373801691c466240bd131d28b2168712b045ba CI <CI@example.com> 1643177882 +1100	commit: commit 18
-0f373801691c466240bd131d28b2168712b045ba 333ff293caf2d3216edf22e3f1df64d43a7e1311 CI <CI@example.com> 1643177882 +1100	commit: commit 19
-333ff293caf2d3216edf22e3f1df64d43a7e1311 e559f83c6e8dd11680de70b487725e37ff2e283f CI <CI@example.com> 1643177882 +1100	commit: commit 20
-e559f83c6e8dd11680de70b487725e37ff2e283f 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177882 +1100	checkout: moving from other to master
-36903784186b1b8b4a150dc656eccd49f94e114e d27a997859219951ecc95c351174c70ea0cf9d37 CI <CI@example.com> 1643177882 +1100	checkout: moving from master to d27a997859219951ecc95c351174c70ea0cf9d37
-d27a997859219951ecc95c351174c70ea0cf9d37 3fbb9e626d4b7d30e58346b3eefaa342b15ab776 CI <CI@example.com> 1643177885 +1100	checkout: moving from d27a997859219951ecc95c351174c70ea0cf9d37 to 3fbb9e626d4b7d30e58346b3eefaa342b15ab776
-3fbb9e626d4b7d30e58346b3eefaa342b15ab776 d84e0684b1038552d5c8d86e67398d634f77ad3b CI <CI@example.com> 1643177886 +1100	checkout: moving from 3fbb9e626d4b7d30e58346b3eefaa342b15ab776 to d84e0684b1038552d5c8d86e67398d634f77ad3b
-d84e0684b1038552d5c8d86e67398d634f77ad3b 10e171beacb963e4f8a4dc1d80fd291c135902bb CI <CI@example.com> 1643177888 +1100	checkout: moving from d84e0684b1038552d5c8d86e67398d634f77ad3b to 10e171beacb963e4f8a4dc1d80fd291c135902bb
-10e171beacb963e4f8a4dc1d80fd291c135902bb 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177893 +1100	checkout: moving from 10e171beacb963e4f8a4dc1d80fd291c135902bb to test
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 4aff8c25b..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177881 +1100	commit (initial): first commit
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/other b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/other
deleted file mode 100644
index db03baa43..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/other
+++ /dev/null
@@ -1,21 +0,0 @@
-0000000000000000000000000000000000000000 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177881 +1100	branch: Created from HEAD
-36903784186b1b8b4a150dc656eccd49f94e114e 1ab342c03b4226cca1c751dba71fa2df0e7d82ee CI <CI@example.com> 1643177881 +1100	commit: commit 1
-1ab342c03b4226cca1c751dba71fa2df0e7d82ee 15d4c5b8608fe472fd224333e60d44ea826cc80e CI <CI@example.com> 1643177881 +1100	commit: commit 2
-15d4c5b8608fe472fd224333e60d44ea826cc80e b614152a335aabd8b5daa2c6abccc9425eb14177 CI <CI@example.com> 1643177881 +1100	commit: commit 3
-b614152a335aabd8b5daa2c6abccc9425eb14177 1a35564b85e24c96e647b477aaf8d35dcf0de84d CI <CI@example.com> 1643177881 +1100	commit: commit 4
-1a35564b85e24c96e647b477aaf8d35dcf0de84d 11e4fd4011c9ed3800bb33b85580dd1d09f6aefd CI <CI@example.com> 1643177881 +1100	commit: commit 5
-11e4fd4011c9ed3800bb33b85580dd1d09f6aefd 3068d0d730547aaa5b86dbfe638db83133ae1421 CI <CI@example.com> 1643177881 +1100	commit: commit 6
-3068d0d730547aaa5b86dbfe638db83133ae1421 38242e5215bc35b3e418c1d6d63fd0291001e10b CI <CI@example.com> 1643177881 +1100	commit: commit 7
-38242e5215bc35b3e418c1d6d63fd0291001e10b ff231021500c7beb87de0d6d5edc29b6f9c000b1 CI <CI@example.com> 1643177881 +1100	commit: commit 8
-ff231021500c7beb87de0d6d5edc29b6f9c000b1 3fbb9e626d4b7d30e58346b3eefaa342b15ab776 CI <CI@example.com> 1643177881 +1100	commit: commit 9
-3fbb9e626d4b7d30e58346b3eefaa342b15ab776 10e171beacb963e4f8a4dc1d80fd291c135902bb CI <CI@example.com> 1643177881 +1100	commit: commit 10
-10e171beacb963e4f8a4dc1d80fd291c135902bb d84e0684b1038552d5c8d86e67398d634f77ad3b CI <CI@example.com> 1643177882 +1100	commit: commit 11
-d84e0684b1038552d5c8d86e67398d634f77ad3b d27a997859219951ecc95c351174c70ea0cf9d37 CI <CI@example.com> 1643177882 +1100	commit: commit 12
-d27a997859219951ecc95c351174c70ea0cf9d37 3fd9ad29c185eac6106cfa005a3aa594e21b9e06 CI <CI@example.com> 1643177882 +1100	commit: commit 13
-3fd9ad29c185eac6106cfa005a3aa594e21b9e06 b2970eba9fd8dba8655094dc38fb4ee50b9bf23e CI <CI@example.com> 1643177882 +1100	commit: commit 14
-b2970eba9fd8dba8655094dc38fb4ee50b9bf23e 6fa769bf11bd9dc4ff4e85f4951950b0bc34326f CI <CI@example.com> 1643177882 +1100	commit: commit 15
-6fa769bf11bd9dc4ff4e85f4951950b0bc34326f 9c836a5c3f513818d300b410f8cb3a2e3bbd42a1 CI <CI@example.com> 1643177882 +1100	commit: commit 16
-9c836a5c3f513818d300b410f8cb3a2e3bbd42a1 5493d27d38b9902cf28b1035c644bf470df76060 CI <CI@example.com> 1643177882 +1100	commit: commit 17
-5493d27d38b9902cf28b1035c644bf470df76060 0f373801691c466240bd131d28b2168712b045ba CI <CI@example.com> 1643177882 +1100	commit: commit 18
-0f373801691c466240bd131d28b2168712b045ba 333ff293caf2d3216edf22e3f1df64d43a7e1311 CI <CI@example.com> 1643177882 +1100	commit: commit 19
-333ff293caf2d3216edf22e3f1df64d43a7e1311 e559f83c6e8dd11680de70b487725e37ff2e283f CI <CI@example.com> 1643177882 +1100	commit: commit 20
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/test b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/test
deleted file mode 100644
index 7ae7f188f..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/logs/refs/heads/test
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 36903784186b1b8b4a150dc656eccd49f94e114e CI <CI@example.com> 1643177893 +1100	branch: Created from master
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba
deleted file mode 100644
index d3c45d51ea5d755dabd6e35ce0322533b264abdd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;29GG9|w~@05+rq>Hq)$

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/03/ecdaa424af1fdaeab1bd1852319652b9518f11 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/03/ecdaa424af1fdaeab1bd1852319652b9518f11
deleted file mode 100644
index 355004b9ecfdaf84db14c525047e90a089f0b6f3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgW!RCF<MUs`Gs%BjefwFi>)K*wg=?Ym
ixs_lQ&*nawz3JjLXYX#!b>&ev4n64!o(KTWJRSQQ*(7BE

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/04/a577be2858b8024716876aefe6b665a98e1e4f b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/04/a577be2858b8024716876aefe6b665a98e1e4f
deleted file mode 100644
index da9396d18b519565de1b74100a8adf4f949ce5cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgW!Q4h(mg#mad|nf=8hRU4%K|eHZ6e4
i=T?GMJe&Jy_NI&1oV~j>*Of=zIP|0^cp?DCt{vx}dm_C6

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/05/57fc43da38567eae00831e9b385fd2cad22643 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/05/57fc43da38567eae00831e9b385fd2cad22643
deleted file mode 100644
index 0ff3d683a82f9318d89e942addbc0a4ea1421b59..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWl)%B_hp+(&2u-F-f+Qvf0rb&T{4Br
i=T?GMJe&Jy_NI&1oV~j>*Of=zIP|0^cp?DT3?4(k?;>&l

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0c/fbf08886fca9a91cb753ec8734c84fcbe52c9f
deleted file mode 100644
index da246e1fe4dd7506e33985df613ec74645cf32b5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;1Lr89~+Y%05*XH;{X5v

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0d/1bbe8d012c8c070167a006a4898b525cfbd930 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0d/1bbe8d012c8c070167a006a4898b525cfbd930
deleted file mode 100644
index be2aa43869953cc0862e265f93e5bfc49c1d3d85..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWvILMzv*7~8LbKx`;$j~?Y^!Nxs?f(
i&#eTjcsBRZ>`fQ1IeT|&t}Bnaap*};@I(MCKOhO!ydil2

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0f/373801691c466240bd131d28b2168712b045ba b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0f/373801691c466240bd131d28b2168712b045ba
deleted file mode 100644
index 97cb55d14..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/0f/373801691c466240bd131d28b2168712b045ba
+++ /dev/null
@@ -1,3 +0,0 @@
-x��K
-�0@]��d&�IE��z��cK������z�x����(�i쵂ff���Τ"K("F$S�d�a#��&{}
p6��}1!ň:7�q��M�z,�32*y���ü�4/����=�%��
-�֐�!h8!��S����z�����9�
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/10/e171beacb963e4f8a4dc1d80fd291c135902bb b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/10/e171beacb963e4f8a4dc1d80fd291c135902bb
deleted file mode 100644
index 72e97d56143e3b7e5880862fcf3c3e69ada1a0ad..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW*3IZ_@Kw;~gVtPSl@-s<5MA&MNF-b-gjJqrmJic3a0Nck`yt?%M
z7(kg1V^ak$S&@)zjgB=a=A25T<Xe{DHB~0mhSsdI>1%+ym6DY$H(z3Ns3AGe#i`yz
zoVSI7lo;8_d)$`|rWwxDeASQi^{J=2^a~JsM=_>Ea3n%Bd)=po{>gtH2+bE94LWXo
Ctwpl{

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/11/e4fd4011c9ed3800bb33b85580dd1d09f6aefd b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/11/e4fd4011c9ed3800bb33b85580dd1d09f6aefd
deleted file mode 100644
index 76c433f1ee70ab6fa6f7fbb7461c21b127efd642..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaA93c@fD06pgwxeKz}WRndP5qjz~HpvzRV@rwP^X<V0cpYY7%G%na
zTTFE7yQ+nXIV)Gdp>Tl+7@`0K@tio*KxN4_IWU{-`Z_{!M8Rh!9ehbagOAzAD6(*M
zRLcTY*;ga)eqVPx&32sTn|`EiPra12T`dOhFh*vyXG8#V&||9WpZd?YWWM?;I&aP_
BM3Vpj

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/15/d4c5b8608fe472fd224333e60d44ea826cc80e b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/15/d4c5b8608fe472fd224333e60d44ea826cc80e
deleted file mode 100644
index 1bbb2bb68baeea545c2b6438086218dcf99532dc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaA93c@fD06pgwxeKzp*(41V5qjz~HpvzRV@rwP^X<V0cpYY7%G%na
zTTK4ccU7CJb6Oyw_m1-t7%*#MBmx&wj0u%NfXybmzK&3`V=CY>6NOR)OY~T?L|laG
z0vhW;sz%=ZzV3FK?KsUh{YcxMdMRtWS`6$k#$iBvMg%YiJ*K+;ssDUS<_nhbIq1o>
BM1KGP

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/35564b85e24c96e647b477aaf8d35dcf0de84d b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/35564b85e24c96e647b477aaf8d35dcf0de84d
deleted file mode 100644
index 90434de85801ddcbcc680506cea4f2893956265a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gcW<3c@fDg<;n@#q0&?B$+gUB0^U^#!NCr!PrtFczm<)0B#@OgFkPz
zJ{n-6Q#({)aGDFVx1LvA3o8ps!ARC&3S=b_#ud@*eCVrz1oTLjog-!`QK-Ld4lFt6
z<SnUmFph@b?Y<o_FEGu^O+Q@sr(W__uYke3PGUqjBMyV<YmaLBC;xfy<_m{+J1cM5
BLTUg2

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/b342c03b4226cca1c751dba71fa2df0e7d82ee b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1a/b342c03b4226cca1c751dba71fa2df0e7d82ee
deleted file mode 100644
index 89ad61ab401e4c7f4e0819dd5d5d287dee1b7eda..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW}3c@fHMq$TU#hnY1ze#QqC?a&!W#n;-g0ZDUaQSxN0-PSc!6|EN
zk4}j0)OQi8hDFC3eO`tFH+UfAD#n>q*=9JuggkImTiWH-$#B%h2aCWNIb@sQbS>;y
zN~tz3(F$NirFXxtJ54i<(|nUpYTHvTWo=giTLbSy0G$D?)lrYBE`Rc$C#WyP{5kIM
C=S6J*

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/1e/8b314962144c26d5e0e50fd29d2ca327864913
deleted file mode 100644
index f1722ae0044d12235bc5ca37b7e8d52b3303d02d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;4u>eA0Lwu05+rq@Bjb+

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/20/9e3ef4b6247ce746048d5711befda46206d235
deleted file mode 100644
index 12e1f82f122993c9598b583241cad99aa966231d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~})JgFru1JODkq1=9ck

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/26/661287266e53bda69d8daa3aac1f714650f13c b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/26/661287266e53bda69d8daa3aac1f714650f13c
deleted file mode 100644
index 77e40c5af43f6756eb8ffde9e1c9a273347feea9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWw2pZs93T{CMNLmN!y8qHL|OB_gsL=
i=T?GMJe&Jy_NI&1oV~j>*Of=zIP|0^cp?D9zaAybd?RQ8

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/30/68d0d730547aaa5b86dbfe638db83133ae1421 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/30/68d0d730547aaa5b86dbfe638db83133ae1421
deleted file mode 100644
index 8d4ae099919d55c7fb868c061a6fe1aca300889b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 146
zcmV;D0B!$x0gaAJ3c@fH0A1%4*$eVs)1)sTB6Q_3-mfTFTS^3vZx<fG?JxtQ%RE0?
z#F`InbC1SktkN+I$wfOhH&d6S+DWQXv}UDDVdc$Vdx+jo)&rtew?qIUDGB9FV1@>D
zD(sU5ez*Iw#qk!;<L&Anp4X?JbeS&^OP_EUh%g=z0m4rAspfy`KR=f61yg@KYFu4H
AV*mgE

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/31/df6c951dc82b75b11bc48836e780134a16e6ad b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/31/df6c951dc82b75b11bc48836e780134a16e6ad
deleted file mode 100644
index 204aace94187223c3a29d2f08a20047216d02fd4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWteeu&-SQ{*x!E>z6l=YbYu*g9Bm7g
i&#eTjcsBRZ>`fQ1IeT|&t}Bnaap*};@I(LxvL5!7;2{41

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/33/3ff293caf2d3216edf22e3f1df64d43a7e1311 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/33/3ff293caf2d3216edf22e3f1df64d43a7e1311
deleted file mode 100644
index 36368d1fc2e774010ea6d3dbf123b88f38f7d511..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 149
zcmV;G0BZku0gaDA3c@fDMP26<*$Xn0NoS@YB6Q_3GHHr}v86=t_-5e&+&w;T@n2qR
zeKe0FAKG4upG`Oefkc%N!XPvlM=|ZFoWy9!OOfohw3k=&u#k`f@`yPyhX^(!;T+Tg
zvI+)+I9PJ&-R|q|r<*@dw`=*Nx;@J&ul3@QBcX_D@JB=d*Vlfkl|S{L-y_@?RDU@4
DnNCNI

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/36/903784186b1b8b4a150dc656eccd49f94e114e b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/36/903784186b1b8b4a150dc656eccd49f94e114e
deleted file mode 100644
index abb03d100e97c328f4234aaa5bd09a96b4c396ef..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 121
zcmV-<0EYi~0ga783c@fD06pgwdlzK4%_b{|2tD-~?PiMwLnNlq=UeatUWXY*OU`Qp
zVmh^I2GMIm6AtOxi_KvUfjjZaURV(qiPm9KcGK3LrNS`6Z5SW6Px<|_i<W!`3cjZp
bMF`GBi0+`rq}iXkTh{t%@T=Sx*a9wVH={TT

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/38/242e5215bc35b3e418c1d6d63fd0291001e10b b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/38/242e5215bc35b3e418c1d6d63fd0291001e10b
deleted file mode 100644
index 5ca009d7c..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/38/242e5215bc35b3e418c1d6d63fd0291001e10b
+++ /dev/null
@@ -1,2 +0,0 @@
-x��M
-�@@a�s���L�'���U����(X[��.<��Ƿxm��G<�C�̀�ǔ��$hM9�TZl��Y	C�Y�'��f��3��B>�""�r�:Y&�ʄDb:y����0�eo��y}ک-�0G�R���޻��S���?�}-�:�
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3a/05ed1ca9671bc362c7197eb09bddff040c9110 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3a/05ed1ca9671bc362c7197eb09bddff040c9110
deleted file mode 100644
index 1ede294e1ab755fe8ca68c45a4a6cc08de9f2940..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWnd`fyTg9XG4>4mI_AKameov3+jl|b
ib1T6rp3QwUd(*{h&feXc>&l~U9D33dJP`nuqa5n!#Utzh

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3b/e94d6b1b1b3b63db9e412b2e788d08979bc176 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3b/e94d6b1b1b3b63db9e412b2e788d08979bc176
deleted file mode 100644
index 00f0e017670c2d0c9ee4a4994d34458de210ee2e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgW!SjaVw)BR!;)_+cuXG2M4kWjRHqIq
ipIZr5@oes+*_$q2bN24mTvr}-<It0y;E4d~d>+Y}TO#}b

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3c/032078a4a21c5c51d3c93d91717c1dabbb8cd0
deleted file mode 100644
index ecdb2d612f7d882a44c9abe5dc8d59f9032ac286..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>V9Nt027x(DX#hd^25A5Q

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/bb9e626d4b7d30e58346b3eefaa342b15ab776 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/bb9e626d4b7d30e58346b3eefaa342b15ab776
deleted file mode 100644
index 34440506906eb68ddfc6af9deaafda1444db49e7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gcW*3IZ_@Kw;~gVtPSl5+^?(B5bwCNG1~$jJqrmJic3a0Nck`JXv~w
z44}k^v8jSo;V9S=XY0sSt%)Klp)KOrvTHt5(Q4Mb>1#l1J3~v1D4}SHp(<8iS*zGo
zd`p6eg-m{r`?A3_!)2Op`pJEL>PeP<1@dP{A;d^<BtkTM-KU2B$$uV_`2uS+I}|V-
BLaYD)

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/d9ad29c185eac6106cfa005a3aa594e21b9e06 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/3f/d9ad29c185eac6106cfa005a3aa594e21b9e06
deleted file mode 100644
index f03b029abc6a828ffe646ed1fb872248a9ee56dd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaAJ3IZ_@1zqP9y%!{%U#CGtnAIF3>9i;qXBZ-Qd}rYSq;`+uQL^;@
z7=WA(V^alRl|xGvcYIC0Rn~y6I;EVO%}iVcDVeow`Wnz26=uqj9WqB$5su;`A_XC<
z#mbGFCsW?zzHBhfaGvI?eo9}TdXlAI08{Wt`@e%DqP1pU_o$(N>OUXQn=czcIyK8!
BK}G-o

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/43/99b07bd31d1f58a0ff10b5434d5ff4f36e38fb b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/43/99b07bd31d1f58a0ff10b5434d5ff4f36e38fb
deleted file mode 100644
index 23915f2bc8f06a0e661308e696ff1e4d23164426..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWoQmOIC=V)KUbA|1(^Mp|FZBGx!M4g
i&#eTjcsBRZ>`fQ1IeT|&t}Bnaap*};@I(LyZXYm*lpt~d

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/45/a4fb75db864000d01701c0f7a51864bd4daabf
deleted file mode 100644
index fdf2bc81d1e32f103ffac8e4afe9c1a2ff38c60a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb|y!viJ;J|QL(06Luoa{vGU

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/48/082f72f087ce7e6fa75b9c41d7387daecd447b
deleted file mode 100644
index 23ff2840ff2459a64132f323f24859beb43d2125..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~m7VgTMr)1OPqU1=#=q

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/4a/9e01012c736e5e0998b7184d9a54e8c610ed02 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/4a/9e01012c736e5e0998b7184d9a54e8c610ed02
deleted file mode 100644
index 3b4ccc564783d5a50463d644e2f8a1a0b27533db..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 77
zcmV-T0J8sh0V^p=O;s>6V=y!@Ff%bxNXyJgW%xStQFqsd8z+xedE|5+St_i1`tl~I
jd~PLJ#k0AOW^cN9&DpzKb6t7VjYCg*f+qq1XEz~Kxd9-k

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/54/93d27d38b9902cf28b1035c644bf470df76060 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/54/93d27d38b9902cf28b1035c644bf470df76060
deleted file mode 100644
index 166e5ee14d061e7625ac31a9e77ebedace8e8755..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaAJ3c@fDKwak)vlk@O$!7{8LRTJRGMS=aY$*{uzFl|#x9`2h)1|dX
z2OQI(Z)QMP=cHrAsyvh&3u4j0Ovy5Pq#&3qNp-7i_UbU|t|ThW5s8s2d0zthnYEA%
zMy1p+2s(N9`?A4wgY$H|+DF>@w39CF0+<3}&ddWG5xsXi-KV<!ng4pg?7kZwI$h&`
BMil@6

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/60/d3b2f4a4cd5f1637eba020358bfe5ecb5edcf2
deleted file mode 100644
index d94cbe67d82850de2f8527e7aa60dbd605b2259b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~m_tgTOSVWB@(}1?2z$

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/6f/a769bf11bd9dc4ff4e85f4951950b0bc34326f b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/6f/a769bf11bd9dc4ff4e85f4951950b0bc34326f
deleted file mode 100644
index 7f9ad8243..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/6f/a769bf11bd9dc4ff4e85f4951950b0bc34326f
+++ /dev/null
@@ -1,3 +0,0 @@
-x��A
-1@Q�=E��$��M@D���h��C��,<���[����9ƦjjS��8�X<���
-p��lּ�kXq�@%s�T%Sx��S�I5��4�����/��o�<߮��}}�,�b1NS"r��`��O
�����`���;w
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/74/cd0e856d938eb6b665284c5485c00f87e20dc5 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/74/cd0e856d938eb6b665284c5485c00f87e20dc5
deleted file mode 100644
index 9888101455ffdc7410b4271ca3dfff619c4272ce..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 51
zcmb<m)YkO!4K*-JG%ztRFg6T4vDWAG8PC)Tv+oz*_=>N$tS--9r`^A+@P()U2NwqC
HeL|uD>30-*

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7c/fd51ebd06287effcfdab241235305cb6439d40 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7c/fd51ebd06287effcfdab241235305cb6439d40
deleted file mode 100644
index 8a6a651cabd069b134e5ccafe1cd4b07f8259801..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgW$@t8FZ$4at}cIh^c=_Q7Pafnx>Q5u
ib1T6rp3QwUd(*{h&feXc>&l~U9D33dJP`ottsc=Iyd_2e

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7e/d6ff82de6bcc2a78243fc9c54d3ef5ac14da69
deleted file mode 100644
index 637482d7a82554db2176cef4841bccc3141df169..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;3*RW9}klu05+=x?*IS*

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/7f/8f011eb73d6043d2e6db9d2c101195ae2801f2
deleted file mode 100644
index 60454ab43e0c116e11fe1c78bd1bd18ca16bd18e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;5icmp8%6F05-=2_W%F@

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/83/51c19397f4fcd5238d10034fa7fa384f14d580
deleted file mode 100644
index 12805e9602f07af94a24ad47b987f6eebc8aad35..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~mtlgTNG~Bmh0*1>OJv

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/88/8633a131a49f1b8981d70c13d666defed6ba15 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/88/8633a131a49f1b8981d70c13d666defed6ba15
deleted file mode 100644
index 1c62650e27ecc52460141bf27de06c658029f918..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 77
zcmV-T0J8sh0V^p=O;s>6V=y!@Ff%bxNXyJgW!Sd-#+-}?r_x?#%?j+)Ic&Qvf5&2|
jd~PLJ#k0AOW^cN9&DpzKb6t7VjYCg*f+qq1O%ou+0U9Dk

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/8b/0156bd25a1ecd82ef7c4c53e9d6d312bb6d403 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/8b/0156bd25a1ecd82ef7c4c53e9d6d312bb6d403
deleted file mode 100644
index f78367c1d2f726b5d815bda15726758235ab9a05..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWvK6Gl-q8b;C$)X?YTMvf>YONFn)r{
i=T?GMJe&Jy_NI&1oV~j>*Of=zIP|0^cp?D0tR1Kjfh6nz

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/90/dfebd90b0a89766c39928f22901b8c02b51fda b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/90/dfebd90b0a89766c39928f22901b8c02b51fda
deleted file mode 100644
index 851fbe7da..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/90/dfebd90b0a89766c39928f22901b8c02b51fda
+++ /dev/null
@@ -1 +0,0 @@
-x+)JMU03c040031QH��IeH���˒��b�(�v��;w�T>�����G�7]���ݭ��<�ơ'=�B� �
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/98/d9bcb75a685dfbfd60f611c309410152935b3d b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/98/d9bcb75a685dfbfd60f611c309410152935b3d
deleted file mode 100644
index f6e750c5d4d0d926ebc13a4aaee8f87c90e064bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~ng-gTO4NQ~*9A1?>O;

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9c/836a5c3f513818d300b410f8cb3a2e3bbd42a1 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9c/836a5c3f513818d300b410f8cb3a2e3bbd42a1
deleted file mode 100644
index 22a928539b7b990e1b7ccec0d6d049e911dabee3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaAJ3c@fDKwak)vlk@OB$Ek<2wi!Md}dHEwv-4S-!43W+sEVa>eBmT
z046$&O$3;koXhAi`=nSnF}7$cx<*7zR2r3x!K`_c*8tKSDHTO5Ew$=Zy>L*U0;XV#
zE!BB9k(&G-_hp0m2Iu*9l~3;LQ%-g17eMk3V`QG-h-j_Z={_~&PyOfb9rFcE4LZI=
CnnqUu

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9d/33ec0915534bf6401be9412203697791e40a04 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9d/33ec0915534bf6401be9412203697791e40a04
deleted file mode 100644
index c6c240e0c..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/9d/33ec0915534bf6401be9412203697791e40a04
+++ /dev/null
@@ -1 +0,0 @@
-x+)JMU03c040031QH��Ie�������ʕ2ۃߴ���?�Tg>T>�����G�7]���ݭ��<�ơ'=�G� �
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b1/bd38b62a0800a4f6a80c34e21c5acffae52c7e
deleted file mode 100644
index 268d0f4596bcf2600c8598a88037be18713815f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~mVdgTN%FL;yYi1>gVx

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b2/970eba9fd8dba8655094dc38fb4ee50b9bf23e b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b2/970eba9fd8dba8655094dc38fb4ee50b9bf23e
deleted file mode 100644
index e9a1d720b63f4d4f80a9c6f29728ec2e6cd380f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0%{=_F|aB0^UlW0K6EU~MT8Jic9c0JopF_;s1*
zM+eIB&^J}^oO8jkG^R!tlAsx337&lmX5Kg|Co681O<x_@T9!8CN-3z+NEoXLVh|Py
z+3P?hD@G^peqT12Zg8G%SN+JmKJ`?W`2rL@(>SIyz>x^i?RB5(`X~Q+An(4F_B$!L
C97Br$

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b4/de3947675361a7770d29b8982c407b0ec6b2a0
deleted file mode 100644
index 6d65f13b4ba310fca2adfb687ac6239597dddfa1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~l)NgFqisJODl81=s)p

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/14152a335aabd8b5daa2c6abccc9425eb14177 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/14152a335aabd8b5daa2c6abccc9425eb14177
deleted file mode 100644
index 7e8fb3f28..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/14152a335aabd8b5daa2c6abccc9425eb14177
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K
-1]��ҝ�D�Yy���A�8��㛅p[T=��?���cє�IE��,L�p��@*��8!���.��jٕ�!6���j�%"�P���g� *��}��r���v�O��SN���Fo	C��qN��t����5�/o:`
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b6/a7d89c68e0ca66e96a9a51892cc33db66fb8a3
deleted file mode 100644
index 02dc6889120b0c2a240806b626b6a255b325ac62..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~nI#gTM@?6aYQ{1?B(%

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/b8/626c4cff2849624fb67f87cd0ad72b163671ad
deleted file mode 100644
index 0761b6105a0c6d0e83d26edd1b1dddb94e8d9fdc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;2{$O9~YAW05*sO=l}o!

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/cd/c58c0f95a2313ded9185e102bc35253f6a1bed b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/cd/c58c0f95a2313ded9185e102bc35253f6a1bed
deleted file mode 100644
index 13147f24bc09a0fcd1cc5fe3258c395be4f1966b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWq6Yu=<<!hV@CGTgrnifp(YNj&z?i&
ib1T6rp3QwUd(*{h&feXc>&l~U9D33dJP`oi;~s7KsU%DQ

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d0/0491fd7e5bb6fa28c517a0bb32b8b506539d4d
deleted file mode 100644
index 8dab6a9eaf1fff6a519dfb7bec1a5bdb56ff845d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb}-;0Y509}AN%05*sO;s5{u

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d2/7a997859219951ecc95c351174c70ea0cf9d37 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d2/7a997859219951ecc95c351174c70ea0cf9d37
deleted file mode 100644
index 1efdcdbe0..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d2/7a997859219951ecc95c351174c70ea0cf9d37
+++ /dev/null
@@ -1,3 +0,0 @@
-x��M
-�0F]��$��)��1��cK������|��W��p
-�~�@,�=JfE�up�ơ��j_rpvb�՞yu`r���ڒ��}!� !ډ8XWcLl�J�~�XV���&����\�֮��c$2pF�Z�uDu�S���F}W�:�
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d3/6e09d97bf2c1527118bde353ad64b157f8b269 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d3/6e09d97bf2c1527118bde353ad64b157f8b269
deleted file mode 100644
index efc598268..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d3/6e09d97bf2c1527118bde353ad64b157f8b269
+++ /dev/null
@@ -1 +0,0 @@
-x+)JMU03c040031QH��Ie��2�o]��_G��6ڱ�-x�/T>�����G�7]���ݭ��<�ơ'=�5
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d4/e982570808a24722649e852a92bda5cf54c9dd b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d4/e982570808a24722649e852a92bda5cf54c9dd
deleted file mode 100644
index 262f6ef1f2c9ad1980ac44ab73c1437b962c2c5c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWpG{cyYzOO1H%Pz#slA%N~G-dU9}%7
ipIZr5@oes+*_$q2bN24mTvr}-<It0y;E4bLeIGWy#Ug_M

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d6/b24041cf04154f8f902651969675021f4d93a5
deleted file mode 100644
index 1ece9675cc1bf1b0364aa64b41e4b1e260ab79ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>V9OIG27!4@=>S3-25<lX

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d8/4e0684b1038552d5c8d86e67398d634f77ad3b b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/d8/4e0684b1038552d5c8d86e67398d634f77ad3b
deleted file mode 100644
index 4a21451f34ebb4cd371b9e8a936be078ae3c7dee..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmV;F0Biqv0gaA93c@fDMP26<*$a|MlbHz=5xVLzCg~IfV@rwP@y)^mxPAY9cx9{g
z(JUl9wL{gqAdx7m=g66z4+O}BqN`#?jFMPE!)kUp^wp0}fgr1toN(v^OIQjl?AFC6
zC@{q2e9lJR?Y<p$n(a8vH~mQ6pL!`<y;{I901>mdX8`9+r#-6apZd?Y0OkumbULXp
CtVjC*

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/da/8dacb2a073ebc2adeddceb3cc2b39b6c95c858 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/da/8dacb2a073ebc2adeddceb3cc2b39b6c95c858
deleted file mode 100644
index 336fa799694e4a7e84711c0ff7f0bebea8087083..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWsvJO^h^@*QM>x!DgULpI*ZlYJcXh1
ixs_lQ&*nawz3JjLXYX#!b>&ev4n64!o(KS(;T;4E&m*t^

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/db/76c03074879025735b647b825786a7b3fcfe7c b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/db/76c03074879025735b647b825786a7b3fcfe7c
deleted file mode 100644
index b19f46c3de80eab61abe2182a0f572eb8de61379..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 76
zcmV-S0JHyi0V^p=O;s>6V=y!@Ff%bxNXyJgWw^G<!SOtcsDJ+iwZLi9N}1$+CohG{
i=T?GMJe&Jy_NI&1oV~j>*Of=zIP|0^cp?C)A{{0Q@gu$f

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e5/59f83c6e8dd11680de70b487725e37ff2e283f b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e5/59f83c6e8dd11680de70b487725e37ff2e283f
deleted file mode 100644
index 44afe2d13..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e5/59f83c6e8dd11680de70b487725e37ff2e283f
+++ /dev/null
@@ -1,3 +0,0 @@
-x��A
-�0E]��$3�&)�]�c2����D��f�\����ʺ,�8�C�U�C��
-�!&�>3�x�l��T��m��3���E�*F�F�lX-�X�"#:y����4�y����e{ꩬ���aJ9�w}�QM��>�w_?R:�
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
deleted file mode 100644
index 711223894375fe1186ac5bfffdc48fb1fa1e65cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15
Wcmb<m^geacKgb|~fq`=a;|BmLO$9Rm

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ec/635144f60048986bc560c5576355344005e6e7
deleted file mode 100644
index 0207e4b4bda9947f005801b14769db56d4b4e592..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17
Ycmb<m^geacKgb|y!xJV3J`pBU06M@0dH?_b

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/f5/99e28b8ab0d8c9c57a486c89c4a5132dcbd3b2
deleted file mode 100644
index 674e37f3f65cd9ec8edc356497f730f3b356e4b1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18
Zcmb<m^geacKgb}>z~liFgFp{c8~{DQ1<?Qi

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ff/231021500c7beb87de0d6d5edc29b6f9c000b1 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/objects/ff/231021500c7beb87de0d6d5edc29b6f9c000b1
deleted file mode 100644
index b02c5baf81af53a5fe205b2e1f6188d6918895c6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gaAJ3c@fDKwak)vlk>Y$s`jH5xVLz@)=Puwv-4S-!43W+sAwG>eBmT
z046?+O%<BgB*f8*l}tVo1)o%ya-z~Q*BkqqS~F|j^fkZ<c~U0iQXLnk9;IRnEx22=
zl+apKw8iB2xGx(_Gn}XSs-N7~r=IH4FMz>2j8O#Ph<jjmx=#)LQ~&uO<_mjkIeE%J
BMMnSt

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/bad b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/bad
deleted file mode 100644
index df35eff7a..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/bad
+++ /dev/null
@@ -1 +0,0 @@
-10e171beacb963e4f8a4dc1d80fd291c135902bb
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-38242e5215bc35b3e418c1d6d63fd0291001e10b b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-38242e5215bc35b3e418c1d6d63fd0291001e10b
deleted file mode 100644
index 365c8ad45..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-38242e5215bc35b3e418c1d6d63fd0291001e10b
+++ /dev/null
@@ -1 +0,0 @@
-38242e5215bc35b3e418c1d6d63fd0291001e10b
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-3fbb9e626d4b7d30e58346b3eefaa342b15ab776 b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-3fbb9e626d4b7d30e58346b3eefaa342b15ab776
deleted file mode 100644
index bfb46ec3b..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/bisect/good-3fbb9e626d4b7d30e58346b3eefaa342b15ab776
+++ /dev/null
@@ -1 +0,0 @@
-3fbb9e626d4b7d30e58346b3eefaa342b15ab776
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/master b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index bcec15ab4..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-36903784186b1b8b4a150dc656eccd49f94e114e
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/other b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/other
deleted file mode 100644
index d6f4abc86..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/other
+++ /dev/null
@@ -1 +0,0 @@
-e559f83c6e8dd11680de70b487725e37ff2e283f
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/test b/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/test
deleted file mode 100644
index bcec15ab4..000000000
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/refs/heads/test
+++ /dev/null
@@ -1 +0,0 @@
-36903784186b1b8b4a150dc656eccd49f94e114e
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/myfile b/test/integration/bisectFromOtherBranch/expected/repo/myfile
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/bisectFromOtherBranch/recording.json b/test/integration/bisectFromOtherBranch/recording.json
deleted file mode 100644
index c38fa7758..000000000
--- a/test/integration/bisectFromOtherBranch/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":661,"Mod":0,"Key":259,"Ch":0},{"Timestamp":925,"Mod":0,"Key":259,"Ch":0},{"Timestamp":1238,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1398,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1535,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1677,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1823,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1941,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2261,"Mod":0,"Key":256,"Ch":98},{"Timestamp":2910,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3564,"Mod":0,"Key":256,"Ch":98},{"Timestamp":3949,"Mod":0,"Key":258,"Ch":0},{"Timestamp":4214,"Mod":0,"Key":13,"Ch":13},{"Timestamp":4869,"Mod":0,"Key":256,"Ch":98},{"Timestamp":5229,"Mod":0,"Key":257,"Ch":0},{"Timestamp":5582,"Mod":0,"Key":13,"Ch":13},{"Timestamp":6590,"Mod":0,"Key":256,"Ch":98},{"Timestamp":7325,"Mod":0,"Key":13,"Ch":13},{"Timestamp":9003,"Mod":0,"Key":27,"Ch":0},{"Timestamp":9341,"Mod":0,"Key":260,"Ch":0},{"Timestamp":10141,"Mod":0,"Key":256,"Ch":110},{"Timestamp":10413,"Mod":0,"Key":256,"Ch":116},{"Timestamp":10452,"Mod":0,"Key":256,"Ch":101},{"Timestamp":10629,"Mod":0,"Key":256,"Ch":115},{"Timestamp":10660,"Mod":0,"Key":256,"Ch":116},{"Timestamp":10854,"Mod":0,"Key":13,"Ch":13},{"Timestamp":11637,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/bisectFromOtherBranch/setup.sh b/test/integration/bisectFromOtherBranch/setup.sh
deleted file mode 100644
index ef9eb932c..000000000
--- a/test/integration/bisectFromOtherBranch/setup.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-touch myfile
-git add myfile
-git commit -m "first commit"
-
-git checkout -b other
-
-for i in {1..20}
-do
-  echo "$i" > file
-  git add .
-  git commit -m "commit $i"
-done
-
-git checkout master
-
-git bisect start other~2 other~13
diff --git a/test/integration/bisectFromOtherBranch/test.json b/test/integration/bisectFromOtherBranch/test.json
deleted file mode 100644
index a5503ac83..000000000
--- a/test/integration/bisectFromOtherBranch/test.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "description": "Opening lazygit when bisect has been started from another branch. There's an issue where we don't reselect the current branch if we mark the current branch as bad so this test side-steps that problem",
-  "speed": 20
-}
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..7444ad06a
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+commit 10
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/FETCH_HEAD
similarity index 100%
rename from test/integration/bisectFromOtherBranch/expected/repo/.git_keep/FETCH_HEAD
rename to test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/HEAD b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/config b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/config
similarity index 87%
rename from test/integration/bisectFromOtherBranch/expected/repo/.git_keep/config
rename to test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/config
index 8ae104545..8a748ce32 100644
--- a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/config
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/config
@@ -8,3 +8,5 @@
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/description b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/description
similarity index 100%
rename from test/integration/bisectFromOtherBranch/expected/repo/.git_keep/description
rename to test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/description
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/index b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..65d675154f23ffb2d0196e017d44a5e7017550f5
GIT binary patch
literal 65
zcmZ?q402{*U|<4bhL9jvS0E+HV4z^Y<=qr}%;|LA&IJiiy?<Pr)babBCri;)`-<AO
Tl}3xATFuWrGP@z+w&EiIWCj?s

literal 0
HcmV?d00001

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/info/exclude b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/info/exclude
similarity index 100%
rename from test/integration/bisectFromOtherBranch/expected/repo/.git_keep/info/exclude
rename to test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/info/exclude
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/HEAD b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..126602da3
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,15 @@
+0000000000000000000000000000000000000000 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161824 +1000	commit (initial): only commit on master
+5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161824 +1000	checkout: moving from master to other
+5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d e739ef9112312917b4fc678e40e2372cc8fda25f CI <CI@example.com> 1661161824 +1000	commit: commit 01
+e739ef9112312917b4fc678e40e2372cc8fda25f 0d4e099996a7c3dc58120cfe1ec34973b309d0e0 CI <CI@example.com> 1661161824 +1000	commit: commit 02
+0d4e099996a7c3dc58120cfe1ec34973b309d0e0 3a899150d167edb02f0ef2ab43bf446d23d90310 CI <CI@example.com> 1661161824 +1000	commit: commit 03
+3a899150d167edb02f0ef2ab43bf446d23d90310 7f8a9a8381ae3fe82a0c43385d3a5bb25cf90699 CI <CI@example.com> 1661161824 +1000	commit: commit 04
+7f8a9a8381ae3fe82a0c43385d3a5bb25cf90699 d4779d400f252d1de4e76ef79e3b4d554fffadb5 CI <CI@example.com> 1661161824 +1000	commit: commit 05
+d4779d400f252d1de4e76ef79e3b4d554fffadb5 41bffcc8f25d268518574e91483a55e66124574c CI <CI@example.com> 1661161824 +1000	commit: commit 06
+41bffcc8f25d268518574e91483a55e66124574c 5c9b8a0a95c49c1674753ad827246ce05965e7fe CI <CI@example.com> 1661161824 +1000	commit: commit 07
+5c9b8a0a95c49c1674753ad827246ce05965e7fe 9cdece2525ed2b34f940b168a2f628984468a8c6 CI <CI@example.com> 1661161824 +1000	commit: commit 08
+9cdece2525ed2b34f940b168a2f628984468a8c6 e4fca3fab85b7a477a2de101e917fe43538e0302 CI <CI@example.com> 1661161824 +1000	commit: commit 09
+e4fca3fab85b7a477a2de101e917fe43538e0302 dff71e43e297a66eb7ec85b7b95ece827751cdbd CI <CI@example.com> 1661161824 +1000	commit: commit 10
+dff71e43e297a66eb7ec85b7b95ece827751cdbd 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161824 +1000	checkout: moving from other to master
+5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d 5c9b8a0a95c49c1674753ad827246ce05965e7fe CI <CI@example.com> 1661161824 +1000	checkout: moving from master to 5c9b8a0a95c49c1674753ad827246ce05965e7fe
+5c9b8a0a95c49c1674753ad827246ce05965e7fe 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161825 +1000	checkout: moving from 5c9b8a0a95c49c1674753ad827246ce05965e7fe to master
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..15063339e
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161824 +1000	commit (initial): only commit on master
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/other b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/other
new file mode 100644
index 000000000..01da9e7bf
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/logs/refs/heads/other
@@ -0,0 +1,11 @@
+0000000000000000000000000000000000000000 5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d CI <CI@example.com> 1661161824 +1000	branch: Created from HEAD
+5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d e739ef9112312917b4fc678e40e2372cc8fda25f CI <CI@example.com> 1661161824 +1000	commit: commit 01
+e739ef9112312917b4fc678e40e2372cc8fda25f 0d4e099996a7c3dc58120cfe1ec34973b309d0e0 CI <CI@example.com> 1661161824 +1000	commit: commit 02
+0d4e099996a7c3dc58120cfe1ec34973b309d0e0 3a899150d167edb02f0ef2ab43bf446d23d90310 CI <CI@example.com> 1661161824 +1000	commit: commit 03
+3a899150d167edb02f0ef2ab43bf446d23d90310 7f8a9a8381ae3fe82a0c43385d3a5bb25cf90699 CI <CI@example.com> 1661161824 +1000	commit: commit 04
+7f8a9a8381ae3fe82a0c43385d3a5bb25cf90699 d4779d400f252d1de4e76ef79e3b4d554fffadb5 CI <CI@example.com> 1661161824 +1000	commit: commit 05
+d4779d400f252d1de4e76ef79e3b4d554fffadb5 41bffcc8f25d268518574e91483a55e66124574c CI <CI@example.com> 1661161824 +1000	commit: commit 06
+41bffcc8f25d268518574e91483a55e66124574c 5c9b8a0a95c49c1674753ad827246ce05965e7fe CI <CI@example.com> 1661161824 +1000	commit: commit 07
+5c9b8a0a95c49c1674753ad827246ce05965e7fe 9cdece2525ed2b34f940b168a2f628984468a8c6 CI <CI@example.com> 1661161824 +1000	commit: commit 08
+9cdece2525ed2b34f940b168a2f628984468a8c6 e4fca3fab85b7a477a2de101e917fe43538e0302 CI <CI@example.com> 1661161824 +1000	commit: commit 09
+e4fca3fab85b7a477a2de101e917fe43538e0302 dff71e43e297a66eb7ec85b7b95ece827751cdbd CI <CI@example.com> 1661161824 +1000	commit: commit 10
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/06/47fe4b7302efbfb235b8f0681b592cc3389d36
new file mode 100644
index 0000000000000000000000000000000000000000..a8a2b586df771ca14cecde7807a27ce30a6b580c
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8>+k8|g>J<n=0GWZ>5cLD&o#S2XU

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/08/90c7f8fa8d1c157f24c55a6b7783633d3cdc9c
new file mode 100644
index 0000000000000000000000000000000000000000..f3e747107bb9d87ddf233fb1249f6677eb244de5
GIT binary patch
literal 212
zcmV;_04x7^0V^p=O;s>5Gh;9`FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
z6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDElnvMO`1DucBQH9i|=i$@4N$lSPT
OgVqKSj&J}0IcDi5lxa!;

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/0d/4e099996a7c3dc58120cfe1ec34973b309d0e0 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/0d/4e099996a7c3dc58120cfe1ec34973b309d0e0
new file mode 100644
index 0000000000000000000000000000000000000000..d3c3d523b38f79c010bcdf4d73b85239a0b01e71
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0&iOwvgLB0^U^#$=qJU~MT8Jic9c0JopF_`1yV
zqXQN`^vw*!lg1jja=x|XGvYv$NgIk(m6|F=<5Jx!o4q<%3dLGMq<~Z~)!39%w&;yQ
zBGue(LPK-%?)PPbaf0(WUF{?D`m~cS^97I@kug(*BYN-MUiYbPfAXIPPwop`5<0P8
CDoBa|

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/17/8975c6c2d5a8d36f9337efdeaa280062b1ef7c
new file mode 100644
index 0000000000000000000000000000000000000000..933e877a004be087db3ad361d41a016285123f23
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?nk8|g>J<n=0GWfk_cLM;qLko5Q

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/30/ad007c4cb09b175810e069b1b2b02ab0140857
new file mode 100644
index 0000000000000000000000000000000000000000..9d7077433af455660d7eaba15a6156e4ea83b0cb
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?%k8|g>J<n=0GWdOAcLxBumkWdd

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/31/24e0ff5f45136ff296f998e3c3e207b3d1b6a8
new file mode 100644
index 0000000000000000000000000000000000000000..dc002385b950b9b8a85d84ba3da3955db702074b
GIT binary patch
literal 186
zcmV;r07d_J0V^p=O;s>5vS2VYFfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
o6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDEln0K+a>>qpLC$N&HU

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/35/da65f29bc0b48aa80bd3a02cff623cf4355fd3
new file mode 100644
index 0000000000000000000000000000000000000000..350af2800533c3104a701dce1729c5212dcef1f0
GIT binary patch
literal 133
zcmV;00DAv;0V^p=O;s>7HDWL{FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
n3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZZ^CcZiEHDN%H

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
new file mode 100644
index 000000000..e8c48561b
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/37/6048ba8da4b619088a7f4a5df3f528fde41f1a
@@ -0,0 +1,2 @@
+x+)JMU0�0`040031QH��I50�+�(ap��u}Q��Ɲ�z������AVeV���ϻ����M�;>dHG���k������G����v�q-�|�m�\-O!�2��t@�C,�#_���뾦�>�<ȪL�������7,q���"�O�Y� �2��,=v��������[�����}
�*s�*��5>f�G<�ܸi���pdU`U����j"��6\2�Ҡ�׿Lo��UY�U\MT�?����f?͏j�9�
+I��XU����S��e�3Mج8o��)g�I��
\ No newline at end of file
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3a/899150d167edb02f0ef2ab43bf446d23d90310 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3a/899150d167edb02f0ef2ab43bf446d23d90310
new file mode 100644
index 0000000000000000000000000000000000000000..0aa17a3368304e87e7fdf8b6c7cd4324cf4fd7f8
GIT binary patch
literal 146
zcmV;D0B!$x0gaAL3c@fH23_YAZ!gGuNtz~5MChu=$j?_4j4dUC$2SWP;4Ft(Ox|jJ
zG?L&>?Ena_Bv}WabxH$bvBEY)kJSWW;~3p(fmVAw@M^@xf<wo}F`JSHFPifTK{hsw
zCK(Qe!79GneLHAgXquNBKC$jkT=G`0B+iLA@!HZ^m|1n(ryBmue?75LUy#x|-}Yug
AtpET3

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/3b/f868a389d0073e715e848f0ee33d71064539ca
new file mode 100644
index 0000000000000000000000000000000000000000..07b07e91fc3473d2d2b21397ee9c3197bcd0bbe6
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?1k8|g>J<n=0GWcC!cLo5t84Ftg

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/41/bffcc8f25d268518574e91483a55e66124574c b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/41/bffcc8f25d268518574e91483a55e66124574c
new file mode 100644
index 0000000000000000000000000000000000000000..dff435fefeb8ee71c1f43b7a84e32efeaf27d201
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0%{NhXs9M1-z9M$*inU~MT8Jic9c0JopF_|r1a
zj}DaO&^J{G<XO=y8b=CZ=CfGNgN7-n$5cb3DrInM+4R++aZ0%{qWS0>HDyhrma>M*
zEk-u8(rR?&-S5i=;|<Q^?W&(LuTMQq%X|S6Arcxq!;uit?RB5(`X~Q+KyhDiG&>9?
CWJcit

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/47/d78ad7a27fc7fe483389512ebf7ea34c5514bc
new file mode 100644
index 0000000000000000000000000000000000000000..c562d38cc74cf217a96352f3dc336a387371e749
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8>sk8|g>J<n=0GWhLdcLV^q#S29M

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/50/d561270fcfcdc9afc85f6136f937c529accaaa
new file mode 100644
index 0000000000000000000000000000000000000000..f11f051fc4d081c513a9e04677e32e65caf944af
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPty${9_P+$d!E&1WbkKW_XGgGDGL?=

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/55/3197193920043fb04f3e39e825916990955204
new file mode 100644
index 0000000000000000000000000000000000000000..ac90c394afbc05bf205db7dcf331d28a569142fd
GIT binary patch
literal 55
zcmV-70LcG%0V^p=O;s?qU@$Z=Ff%bxNXyJgH89jGsVHG^zut9yQT_3M9>$%4di(1Z
N`-F<@0RUnl5mQh97fApB

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5c/9b8a0a95c49c1674753ad827246ce05965e7fe b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5c/9b8a0a95c49c1674753ad827246ce05965e7fe
new file mode 100644
index 000000000..e3947050d
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5c/9b8a0a95c49c1674753ad827246ce05965e7fe
@@ -0,0 +1,6 @@
+x��A
+1@Q�=E��4m�f@D����)
+��
+�.<���[|Y[{t�)��
+�'+�r�\P�RuA�r���>z_���ly�W���ZE�:*.2!S
+:a`��4Fta1������y��'���'Y�p(��.���f�1��O��`���9�
\ No newline at end of file
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5f/80f6e6bd2410efe5b5f613adc5b4fcf50e930d b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5f/80f6e6bd2410efe5b5f613adc5b4fcf50e930d
new file mode 100644
index 000000000..bc33f27d9
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/5f/80f6e6bd2410efe5b5f613adc5b4fcf50e930d
@@ -0,0 +1,3 @@
+x��A
+�0E]��d�C"BW=F�NQ�t�F���n��WM���3�.Tb��ja))#�T�8s
+1.E��˯v��	��t�w��*�jz�g�=��]�=��Ϲ�m��O�@��Њ2$
\ No newline at end of file
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/7f/8a9a8381ae3fe82a0c43385d3a5bb25cf90699 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/7f/8a9a8381ae3fe82a0c43385d3a5bb25cf90699
new file mode 100644
index 0000000000000000000000000000000000000000..0ba0a16ee06cbbb6992f073efcf4888e9b163205
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3IZ_<KvCB{MfZXvO<P+K5oR^VNZSMj>kLB$kMArzfZNYo{JQl1
z7#4Fpj7`K+XdHvOTq+cwm=lyn46dq1M^!zAppDGRo4kf4PB~+MhVd+|fKw24Ts#%^
zJ~l@!10fiGkNdLOX||VXzR8FC`jk^$`qg5Lh!K<X_J{yr_PS3E`IG;=1#iBCt2)gm
C_e4hk

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/8d/49129429cacbb6694f0290b3219e91a6f364cd
new file mode 100644
index 0000000000000000000000000000000000000000..8d434f2041605e3a4058a78bd8bb3d5a1ad5f503
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg9csk8|g>J<n=0GWhLhcLV^q%nL>U

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/9c/dece2525ed2b34f940b168a2f628984468a8c6 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/9c/dece2525ed2b34f940b168a2f628984468a8c6
new file mode 100644
index 0000000000000000000000000000000000000000..cde6830222e5d92bbe4235f80dbd3558dee780a8
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDg<;n@MfQSZ(##|SB0^U^#$=qLU~MT8Jib|Y0Jo3t!LRGG
zJemilL)*=K9mEhaMOEa;6*bLN39ZNt5@UjtW-HNcvfHb9RIWvWaEGiwIb|H=R$`8c
z)B<w<=GmOQ+kM^rIQjE9UF{>w_Oz3(%f$l`06~e#A0dR``r4zK{mFmchvL2x>N+Ga
C9!h=y

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/a0/2c4b36b68df7081152282cf1aabcab7b24e69b
new file mode 100644
index 0000000000000000000000000000000000000000..85866acd897b150150557b0a331c827562ca4fa7
GIT binary patch
literal 81
zcmV-X0IvUd0V^p=O;s>AV=y!@Ff%bxNXyJgH89jGsVHG^zut9yQT_3M9>$%4di(1Z
n`-F<@K~`l1R>kK2&%2oE{r*j+J3eGcN9r85m}>?A;$I(9i#8>|

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
new file mode 100644
index 000000000..7eacc86e0
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/b3/ae51762cc5929b5c4f6b65e8ad14954144fe82
@@ -0,0 +1 @@
+x+)JMU060a040031QH��I50�+�(ap��u}Q��Ɲ�z������AVeV���ϻ����M�;>dHG���k������G����v�q-�|�m�\-O!�2��t@�C,�#_���뾦�>�<ȪL�������7,q���"�O�Y� �2��,=v��������[�����}
�*s�*��5>f�G<�ܸi���pdU`U����j"��6\2�Ҡ�׿Lo�4�v5
\ No newline at end of file
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/bf/2b038a7c59d4db31a492793086fafec802ec2f
new file mode 100644
index 0000000000000000000000000000000000000000..17f75bca502e6b34e2f231b56e520976da3a5221
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPty$n9_P+$d!E&1WbpgT?g0S6(F_Lw

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/c2/55cf4ef7fd5661a9d68b717243a978e42b05ac
new file mode 100644
index 0000000000000000000000000000000000000000..6ac1f71b1ac5591558972d0ca7dba18052afb32b
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?Xk8|g>J<n=0GWb1WcLe~sLkn&I

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/cf/b438e7991d830d830d58744b99cff451a9d07e
new file mode 100644
index 0000000000000000000000000000000000000000..f184b6b997d3abbf26741a2a27476f2e32ffbe5c
GIT binary patch
literal 265
zcmV+k0rviQ0V^p=O;s>9F=8+@FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
z6;HHT*C4Ah1FI76EIoGU>Wa(xlg;1XTcyE}wDElnvMO`1DucBQH9i|=i$@4N$lSPT
zgVqKSj&NjE7GPETwVAtWBCp&wTr#QBpzYVc6HIUPkyTlORRvs4ROdf`_T>5#@rh<X
P&5vrXIkgG^y`zQc0`Y}{

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/d4/779d400f252d1de4e76ef79e3b4d554fffadb5 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/d4/779d400f252d1de4e76ef79e3b4d554fffadb5
new file mode 100644
index 0000000000000000000000000000000000000000..6034204c0e7b77c6a9bf1b2d1e5fea765e82f76f
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDg<;n@#q0&iB%NdeMTD+;jA=SS!PrtFczm<)0B(Oi9xrdT
zJ{n*Or*^1<I!uw3L`w0I+_I`J!BfT%qGn2&mfq0pa_Fl;EG$XbGm846?8N55d#2S(
zmyU8tHl$?a-R|1~(+uM@-}EDOf9fS~^$L9&F(A7E&S<SQz4lX0|KvXpmdqE}Q#)p4
Ck4VY@

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/df/f71e43e297a66eb7ec85b7b95ece827751cdbd b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/df/f71e43e297a66eb7ec85b7b95ece827751cdbd
new file mode 100644
index 0000000000000000000000000000000000000000..8397c76a9c37dc131f7a55360fd30eac091b25d9
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@#q0%{NhZk@M1-z9#-y2`U~MT8Jic9c0JopF_|r1a
zj}A1XL*L9G<b*6mr7D+11Bz&Ftg*JxqL)^Usgb%>H+yw3Zj*+lMPkXyIjgTmNH$Pz
z#vukV4CtM{`+eD9yuo?AUG1au`n1!u%om`Ph!TlsI1(bdz3x-p{^UOogzgK83p(dH
Cgh<Z-

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e2/1978e5aaff3752bdeeb635c1667ec59c5bbde1
new file mode 100644
index 0000000000000000000000000000000000000000..37f59fe0fb0228d08de7eb36a278ec52c722aec2
GIT binary patch
literal 160
zcmV;R0AK%j0V^p=O;s?oG+;0^FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
z3)x&PPa&%^0jv6SK&nG5(Ia1^&i(7YrinhWJPZcNs!YME4uzig`~Ej9apkq{!XoFD
O6;HHT*8l*@%}K*azEJT1

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e4/fca3fab85b7a477a2de101e917fe43538e0302 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e4/fca3fab85b7a477a2de101e917fe43538e0302
new file mode 100644
index 0000000000000000000000000000000000000000..96986d1b23d2ce708570d8324b14416fcc17af4f
GIT binary patch
literal 148
zcmV;F0Biqv0gaAL3c@fDMqTF=vlk?jPSP0=5xVLz@-sof*is^Re2aJh7au$xZ}H`&
zwR;DYaOj&V<eF$;9YwJ4V88P`5+#vbD|w7k?5Jjqn?5^8E}GSO=e4*rP!+NX14mbb
zV_~A5IR_J8{kCi{&2XOPtG;7fA9~75y8woO7?2&o5v{dmxBIECf9Ag)te6ivvpQn1
Cj6&)F

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e6/db1f58c2bb5ead41049a8ef3910360eead21e2
new file mode 100644
index 0000000000000000000000000000000000000000..8bcfafeb644d88961fada612e53598966fbe73ed
GIT binary patch
literal 108
zcmV-y0F(cC0V^p=O;s>7G+{6_FfcPQQAo?oNi{IkE2$`9aKGMleNp}Ke;&r2fqMJv
z7W;&X>_Jv#1Xji7{?EIZ>HYpqraL}lNJr`%wwP;%tjZXy%KAsf;?4`~c7<^*{d|vY
O3)x&PPXPdnMJ)ztA2U4w

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e7/39ef9112312917b4fc678e40e2372cc8fda25f b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/e7/39ef9112312917b4fc678e40e2372cc8fda25f
new file mode 100644
index 0000000000000000000000000000000000000000..205e4506cd441edd5f1745be772c6d24749a8891
GIT binary patch
literal 147
zcmV;E0Brww0gcW<3c@fDKvCB@#q0%{NiwkmB0^U^Mv~5;U~DN7Jic9c0JopF_;qRR
z(Sal#`lbrZf#ggQ#3ROF1)~KGqJw9lB!a^1F}gKx`s%<ope0RZ_K{Fcxv(V)d9GZd
zRbx~MIJ^Ar_ho}|g3CDF^po5A)KgvB6(}X5M1zlTBt&$3-KV<#$$uV@+!t;DIe1D4
BMZ5q2

literal 0
HcmV?d00001

diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030 b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/objects/f2/c01a881661486f147e47f5be82914c5d0c0030
new file mode 100644
index 0000000000000000000000000000000000000000..7e30b2e352ac316b3082ec42a9aabada4e057a17
GIT binary patch
literal 30
mcmb<m^geacKghr&(c|<PPg8?Hk8|g>J<n=0GWgwOcL4yn?+ai6

literal 0
HcmV?d00001

diff --git a/test/integration/bisectFromOtherBranch/expected/repo/.git_keep/packed-refs b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/packed-refs
similarity index 100%
rename from test/integration/bisectFromOtherBranch/expected/repo/.git_keep/packed-refs
rename to test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/packed-refs
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/master b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..ff1c9baaa
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+5f80f6e6bd2410efe5b5f613adc5b4fcf50e930d
diff --git a/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/other b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/other
new file mode 100644
index 000000000..9938cab9e
--- /dev/null
+++ b/test/integration_new/bisect/from_other_branch/expected/repo/.git_keep/refs/heads/other
@@ -0,0 +1 @@
+dff71e43e297a66eb7ec85b7b95ece827751cdbd

From 5d5471c01765fac98ff59f71581bcf7c14adbe49 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 19:53:54 +1000
Subject: [PATCH 06/44] remove already migrated test

---
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 -
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../expected/repo/.git_keep/HEAD              |   1 -
 .../expected/repo/.git_keep/config            |  10 ---------
 .../expected/repo/.git_keep/description       |   1 -
 .../expected/repo/.git_keep/index             | Bin 145 -> 0 bytes
 .../expected/repo/.git_keep/info/exclude      |   7 ------
 .../expected/repo/.git_keep/logs/HEAD         |   6 ------
 .../repo/.git_keep/logs/refs/heads/four       |   1 -
 .../repo/.git_keep/logs/refs/heads/master     |   1 -
 .../repo/.git_keep/logs/refs/heads/one        |   1 -
 .../repo/.git_keep/logs/refs/heads/three      |   1 -
 .../repo/.git_keep/logs/refs/heads/two        |   1 -
 .../b4/9fda1c7a9af6a4f0b6b07a2cb31aecb8c01a6c | Bin 55 -> 0 bytes
 .../e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 | Bin 15 -> 0 bytes
 .../f7/53f4dfc98d148a7e685c46c8d148bcac56707d | Bin 122 -> 0 bytes
 .../expected/repo/.git_keep/refs/heads/four   |   1 -
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../expected/repo/.git_keep/refs/heads/one    |   1 -
 .../expected/repo/.git_keep/refs/heads/three  |   1 -
 .../expected/repo/.git_keep/refs/heads/two    |   1 -
 .../expected/repo/myfile.txt                  |   0
 .../branchAutocomplete/recording.json         |   1 -
 test/integration/branchAutocomplete/setup.sh  |  20 ------------------
 test/integration/branchAutocomplete/test.json |   1 -
 25 files changed, 58 deletions(-)
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/FETCH_HEAD
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/config
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/description
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/index
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/info/exclude
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/four
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/one
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/three
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/two
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/objects/b4/9fda1c7a9af6a4f0b6b07a2cb31aecb8c01a6c
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/objects/f7/53f4dfc98d148a7e685c46c8d148bcac56707d
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/four
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/one
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/three
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/two
 delete mode 100644 test/integration/branchAutocomplete/expected/repo/myfile.txt
 delete mode 100644 test/integration/branchAutocomplete/recording.json
 delete mode 100644 test/integration/branchAutocomplete/setup.sh
 delete mode 100644 test/integration/branchAutocomplete/test.json

diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/branchAutocomplete/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index 802607664..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-initial commit
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/FETCH_HEAD b/test/integration/branchAutocomplete/expected/repo/.git_keep/FETCH_HEAD
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/HEAD b/test/integration/branchAutocomplete/expected/repo/.git_keep/HEAD
deleted file mode 100644
index 2e35f3118..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/three
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/config b/test/integration/branchAutocomplete/expected/repo/.git_keep/config
deleted file mode 100644
index 8ae104545..000000000
--- a/test/integration/branchAutocomplete/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/branchAutocomplete/expected/repo/.git_keep/description b/test/integration/branchAutocomplete/expected/repo/.git_keep/description
deleted file mode 100644
index 498b267a8..000000000
--- a/test/integration/branchAutocomplete/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/branchAutocomplete/expected/repo/.git_keep/index b/test/integration/branchAutocomplete/expected/repo/.git_keep/index
deleted file mode 100644
index 79e58d4f5c49991fb907b9489777cfc900a6efe8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 145
zcmZ?q402{*U|<4b#)RxG%b7G1Y+y7a0|N`2F8dk=hQ=j8>90UFB0$XWZ0@7kn=W2+
z_U_hPR~~ia(376vi40u1m1&tdsd^<9B_K5*5EA6-3Zx_%3>6Hxw#>gJQ#I?`k`LQ9
jROxJ%db8tzRL<*tC$?o@nmao@USD+{qnPky*0QGn3rsN`

diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/info/exclude b/test/integration/branchAutocomplete/expected/repo/.git_keep/info/exclude
deleted file mode 100644
index 8e9f2071f..000000000
--- a/test/integration/branchAutocomplete/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/branchAutocomplete/expected/repo/.git_keep/logs/HEAD b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index 8985b49b4..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,6 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	commit (initial): initial commit
-f753f4dfc98d148a7e685c46c8d148bcac56707d f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	checkout: moving from master to one
-f753f4dfc98d148a7e685c46c8d148bcac56707d f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	checkout: moving from one to two
-f753f4dfc98d148a7e685c46c8d148bcac56707d f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	checkout: moving from two to three
-f753f4dfc98d148a7e685c46c8d148bcac56707d f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	checkout: moving from three to four
-f753f4dfc98d148a7e685c46c8d148bcac56707d f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671338 +1000	checkout: moving from four to three
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/four b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/four
deleted file mode 100644
index f3e789f72..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/four
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	branch: Created from HEAD
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 3781b31e4..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	commit (initial): initial commit
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/one b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/one
deleted file mode 100644
index f3e789f72..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/one
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	branch: Created from HEAD
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/three b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/three
deleted file mode 100644
index f3e789f72..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/three
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	branch: Created from HEAD
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/two b/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/two
deleted file mode 100644
index f3e789f72..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/logs/refs/heads/two
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 f753f4dfc98d148a7e685c46c8d148bcac56707d CI <CI@example.com> 1617671335 +1000	branch: Created from HEAD
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/b4/9fda1c7a9af6a4f0b6b07a2cb31aecb8c01a6c b/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/b4/9fda1c7a9af6a4f0b6b07a2cb31aecb8c01a6c
deleted file mode 100644
index 9a968e4230e734fe1409931830e0b527e826abf7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 55
zcmV-70LcG%0V^p=O;s?qU@$Z=Ff%bx$gNDv%t_TNsVHH1Huur&O&6~@dv|NDE04Ny
N=t)oTL;!%W6Q@{R7l;4=

diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 b/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391
deleted file mode 100644
index 711223894375fe1186ac5bfffdc48fb1fa1e65cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15
Wcmb<m^geacKgb|~fq`=a;|BmLO$9Rm

diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/f7/53f4dfc98d148a7e685c46c8d148bcac56707d b/test/integration/branchAutocomplete/expected/repo/.git_keep/objects/f7/53f4dfc98d148a7e685c46c8d148bcac56707d
deleted file mode 100644
index a9bfbe5b4d641d656467512acc2b462505d9a29b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 122
zcmV-=0EPc}0ga783c@fD06pgwdlzKaw21|gLQj3h?z+K1V@iq8=UeatUWXY*Ybm(_
z_5Rd0GmvgbPbQ5#a0=Wdlpq-Ss^W=F<)%m+)bXdi>ITyc_h}w&=dvz#(OMorfntc{
ceGg|sM0e0*((F&&<#%qG7x;DV3-@&}qC*BcYybcN

diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/four b/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/four
deleted file mode 100644
index 7303bd10b..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/four
+++ /dev/null
@@ -1 +0,0 @@
-f753f4dfc98d148a7e685c46c8d148bcac56707d
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/master b/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index 7303bd10b..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-f753f4dfc98d148a7e685c46c8d148bcac56707d
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/one b/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/one
deleted file mode 100644
index 7303bd10b..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/one
+++ /dev/null
@@ -1 +0,0 @@
-f753f4dfc98d148a7e685c46c8d148bcac56707d
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/three b/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/three
deleted file mode 100644
index 7303bd10b..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/three
+++ /dev/null
@@ -1 +0,0 @@
-f753f4dfc98d148a7e685c46c8d148bcac56707d
diff --git a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/two b/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/two
deleted file mode 100644
index 7303bd10b..000000000
--- a/test/integration/branchAutocomplete/expected/repo/.git_keep/refs/heads/two
+++ /dev/null
@@ -1 +0,0 @@
-f753f4dfc98d148a7e685c46c8d148bcac56707d
diff --git a/test/integration/branchAutocomplete/expected/repo/myfile.txt b/test/integration/branchAutocomplete/expected/repo/myfile.txt
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/integration/branchAutocomplete/recording.json b/test/integration/branchAutocomplete/recording.json
deleted file mode 100644
index 33c3d8123..000000000
--- a/test/integration/branchAutocomplete/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":933,"Mod":0,"Key":259,"Ch":0},{"Timestamp":1524,"Mod":0,"Key":256,"Ch":99},{"Timestamp":2188,"Mod":0,"Key":256,"Ch":116},{"Timestamp":2364,"Mod":0,"Key":256,"Ch":104},{"Timestamp":2540,"Mod":0,"Key":256,"Ch":114},{"Timestamp":2851,"Mod":0,"Key":9,"Ch":9},{"Timestamp":3148,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3964,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/branchAutocomplete/setup.sh b/test/integration/branchAutocomplete/setup.sh
deleted file mode 100644
index 4c53f58a2..000000000
--- a/test/integration/branchAutocomplete/setup.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-touch myfile.txt
-git add .
-git commit -m "initial commit"
-
-git checkout -b one
-git checkout -b two
-git checkout -b three
-git checkout -b four
-
diff --git a/test/integration/branchAutocomplete/test.json b/test/integration/branchAutocomplete/test.json
deleted file mode 100644
index 3e0d382e0..000000000
--- a/test/integration/branchAutocomplete/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "description": "check out a branch using the autocomplete feature", "speed": 20 }

From a9d4ff2aee1ef6f6baf976d90452570afbdba67b Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 20:02:32 +1000
Subject: [PATCH 07/44] cleaning up imports

---
 pkg/integration/tests/branch/suggestions.go | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pkg/integration/tests/branch/suggestions.go b/pkg/integration/tests/branch/suggestions.go
index 0d8269f1d..95a40b0ac 100644
--- a/pkg/integration/tests/branch/suggestions.go
+++ b/pkg/integration/tests/branch/suggestions.go
@@ -2,15 +2,15 @@ package branch
 
 import (
 	"github.com/jesseduffield/lazygit/pkg/config"
-	"github.com/jesseduffield/lazygit/pkg/integration/components"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
 )
 
-var Suggestions = components.NewIntegrationTest(components.NewIntegrationTestArgs{
+var Suggestions = NewIntegrationTest(NewIntegrationTestArgs{
 	Description:  "Checking out a branch with name suggestions",
 	ExtraCmdArgs: "",
 	Skip:         false,
 	SetupConfig:  func(config *config.AppConfig) {},
-	SetupRepo: func(shell *components.Shell) {
+	SetupRepo: func(shell *Shell) {
 		shell.
 			EmptyCommit("my commit message").
 			NewBranch("new-branch").
@@ -20,7 +20,7 @@ var Suggestions = components.NewIntegrationTest(components.NewIntegrationTestArg
 			NewBranch("other-new-branch-2").
 			NewBranch("other-new-branch-3")
 	},
-	Run: func(shell *components.Shell, input *components.Input, assert *components.Assert, keys config.KeybindingConfig) {
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
 		input.SwitchToBranchesWindow()
 		assert.CurrentViewName("localBranches")
 

From 843488bff4b128f5227657f0e16dd42299420532 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 20:02:40 +1000
Subject: [PATCH 08/44] add branch delete integration test

---
 pkg/integration/tests/branch/delete.go        |  40 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   1 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 -
 .../branchDelete/expected/repo/.git_keep/HEAD |   1 -
 .../expected/repo/.git_keep/index             | Bin 137 -> 0 bytes
 .../expected/repo/.git_keep/logs/HEAD         |   7 ---
 .../repo/.git_keep/logs/refs/heads/master     |   1 -
 .../repo/.git_keep/logs/refs/heads/new-branch |   1 -
 .../.git_keep/logs/refs/heads/new-branch-2    |   1 -
 .../.git_keep/logs/refs/heads/new-branch-3    |   1 -
 .../repo/.git_keep/logs/refs/heads/old-branch |   1 -
 .../.git_keep/logs/refs/heads/old-branch-3    |   1 -
 .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes
 .../21/b436d66d2c515ad17285e53d9e6380d599b044 | Bin 118 -> 0 bytes
 .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../repo/.git_keep/refs/heads/new-branch      |   1 -
 .../repo/.git_keep/refs/heads/new-branch-2    |   1 -
 .../repo/.git_keep/refs/heads/new-branch-3    |   1 -
 .../repo/.git_keep/refs/heads/old-branch      |   1 -
 .../repo/.git_keep/refs/heads/old-branch-3    |   1 -
 .../branchDelete/expected/repo/file0          |   1 -
 test/integration/branchDelete/recording.json  |   1 -
 test/integration/branchDelete/setup.sh        |  21 ---------
 test/integration/branchDelete/test.json       |   1 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../delete/expected/repo/.git_keep/HEAD       |   1 +
 .../delete}/expected/repo/.git_keep/config    |   2 +
 .../expected/repo/.git_keep/description       |   0
 .../delete/expected/repo/.git_keep/index      | Bin 0 -> 65 bytes
 .../expected/repo/.git_keep/info/exclude      |   0
 .../delete/expected/repo/.git_keep/logs/HEAD  |   3 ++
 .../repo/.git_keep/logs/refs/heads/branch-one |   1 +
 .../repo/.git_keep/logs/refs/heads/branch-two |   1 +
 .../repo/.git_keep/logs/refs/heads/master     |   1 +
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../a7/222d091ed91af493b7173e4b09dd2de085031d | Bin 0 -> 117 bytes
 .../repo/.git_keep/refs/heads/branch-one      |   1 +
 .../repo/.git_keep/refs/heads/branch-two      |   1 +
 .../expected/repo/.git_keep/refs/heads/master |   1 +
 41 files changed, 54 insertions(+), 45 deletions(-)
 create mode 100644 pkg/integration/tests/branch/delete.go
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/index
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-2
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-3
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch-3
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/objects/21/b436d66d2c515ad17285e53d9e6380d599b044
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-2
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-3
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch
 delete mode 100644 test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch-3
 delete mode 100644 test/integration/branchDelete/expected/repo/file0
 delete mode 100644 test/integration/branchDelete/recording.json
 delete mode 100644 test/integration/branchDelete/setup.sh
 delete mode 100644 test/integration/branchDelete/test.json
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/COMMIT_EDITMSG
 rename test/{integration/branchDelete => integration_new/branch/delete}/expected/repo/.git_keep/FETCH_HEAD (100%)
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/HEAD
 rename test/{integration/branchDelete => integration_new/branch/delete}/expected/repo/.git_keep/config (87%)
 rename test/{integration/branchDelete => integration_new/branch/delete}/expected/repo/.git_keep/description (100%)
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/index
 rename test/{integration/branchDelete => integration_new/branch/delete}/expected/repo/.git_keep/info/exclude (100%)
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-one
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-two
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/master
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/objects/a7/222d091ed91af493b7173e4b09dd2de085031d
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-one
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-two
 create mode 100644 test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/master

diff --git a/pkg/integration/tests/branch/delete.go b/pkg/integration/tests/branch/delete.go
new file mode 100644
index 000000000..46df9a457
--- /dev/null
+++ b/pkg/integration/tests/branch/delete.go
@@ -0,0 +1,40 @@
+package branch
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var Delete = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Try to delete the checked out branch first (to no avail), and then delete another branch.",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		shell.
+			EmptyCommit("blah").
+			NewBranch("branch-one").
+			NewBranch("branch-two")
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		input.SwitchToBranchesWindow()
+		assert.CurrentViewName("localBranches")
+
+		assert.MatchSelectedLine(Contains("branch-two"))
+		input.PressKeys(keys.Universal.Remove)
+		assert.InAlert()
+		assert.MatchCurrentViewContent(Contains("You cannot delete the checked out branch!"))
+
+		input.Confirm()
+
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("branch-one"))
+		input.PressKeys(keys.Universal.Remove)
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("Are you sure you want to delete the branch 'branch-one'?"))
+		input.Confirm()
+		assert.CurrentViewName("localBranches")
+		assert.MatchSelectedLine(Contains("master"))
+		assert.MatchCurrentViewContent(NotContains("branch-one"))
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 6fcd8249f..88f6b40da 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -24,6 +24,7 @@ var tests = []*components.IntegrationTest{
 	commit.Commit,
 	commit.NewBranch,
 	branch.Suggestions,
+	branch.Delete,
 	interactive_rebase.One,
 	custom_commands.Basic,
 	custom_commands.MultiplePrompts,
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/branchDelete/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index dc3ab4abe..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1 +0,0 @@
-file0
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/HEAD b/test/integration/branchDelete/expected/repo/.git_keep/HEAD
deleted file mode 100644
index ba0879fe6..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/old-branch-3
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/index b/test/integration/branchDelete/expected/repo/.git_keep/index
deleted file mode 100644
index 9743f9410c882fd827218be2a89dee7f1e191b52..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 137
zcmZ?q402{*U|<4b#)Rw_Cm7fNiG<ON3=Ax6dNpPY42?^G(qDmUM1YvhLd5FIf`3}u
z-UT0e-?{YWqrFp2Z!xf@W#*(B0HqliLV{dffs`bJp@IRIoL&0PnYTsD*2+ET{_;Wl
fzUGrDPHp=a#`eDB``wjtV_{cq4DaNn-yQ$}?$<Lh

diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/HEAD b/test/integration/branchDelete/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index d70cecff2..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,7 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	commit (initial): file0
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from master to new-branch
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from new-branch to new-branch-2
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from new-branch-2 to new-branch-3
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from new-branch-3 to old-branch
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from old-branch to old-branch-2
-21b436d66d2c515ad17285e53d9e6380d599b044 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	checkout: moving from old-branch-2 to old-branch-3
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 2e2382c42..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	commit (initial): file0
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch
deleted file mode 100644
index 2050baa52..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	branch: Created from HEAD
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-2 b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-2
deleted file mode 100644
index 2050baa52..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-2
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	branch: Created from HEAD
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-3 b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-3
deleted file mode 100644
index 2050baa52..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/new-branch-3
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	branch: Created from HEAD
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch
deleted file mode 100644
index 2050baa52..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	branch: Created from HEAD
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch-3 b/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch-3
deleted file mode 100644
index 2050baa52..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/logs/refs/heads/old-branch-3
+++ /dev/null
@@ -1 +0,0 @@
-0000000000000000000000000000000000000000 21b436d66d2c515ad17285e53d9e6380d599b044 CI <CI@example.com> 1617684680 +1000	branch: Created from HEAD
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 b/test/integration/branchDelete/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442
deleted file mode 100644
index 79fcadf67fdecb0f0cffca7ff27b2ae5c031e4d7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmV-20L}k+0V^p=O;s>9W-v4`Ff%bxNXyJgHDIt1vAVM0pVqc_!H3>=F1`6^?^M%U
I033l4YT~68jQ{`u

diff --git a/test/integration/branchDelete/expected/repo/.git_keep/objects/21/b436d66d2c515ad17285e53d9e6380d599b044 b/test/integration/branchDelete/expected/repo/.git_keep/objects/21/b436d66d2c515ad17285e53d9e6380d599b044
deleted file mode 100644
index db6a55b3b9db8aa6b61463fe6a9c8a50c124a901..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 118
zcmV-+0Ez#20gcT~3c@fDhGEw^#q0%{iDQ01MChu=NSZHLXo!>u9^W3p?aKr2(py^x
ziRx+W012*eKF1hKmYa8}2*4p%t!#6tHbSGSHR&^6eWz)r`!qlCP3^tmvh?;KapGN2
Y7nsh%%;u=aWZ+M3>bil=58X~H_!UMxD*ylh

diff --git a/test/integration/branchDelete/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da b/test/integration/branchDelete/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da
deleted file mode 100644
index 06c9cb73d7a8ed6841ce407bd6bb15235c8fa15c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@BtHp>|y2)08mZ`J^%m!

diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/master b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-2 b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-2
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-2
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-3 b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-3
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/new-branch-3
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch-3 b/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch-3
deleted file mode 100644
index cf15cb775..000000000
--- a/test/integration/branchDelete/expected/repo/.git_keep/refs/heads/old-branch-3
+++ /dev/null
@@ -1 +0,0 @@
-21b436d66d2c515ad17285e53d9e6380d599b044
diff --git a/test/integration/branchDelete/expected/repo/file0 b/test/integration/branchDelete/expected/repo/file0
deleted file mode 100644
index 38143ad4a..000000000
--- a/test/integration/branchDelete/expected/repo/file0
+++ /dev/null
@@ -1 +0,0 @@
-test0
diff --git a/test/integration/branchDelete/recording.json b/test/integration/branchDelete/recording.json
deleted file mode 100644
index e0f28d911..000000000
--- a/test/integration/branchDelete/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":483,"Mod":0,"Key":259,"Ch":0},{"Timestamp":787,"Mod":0,"Key":256,"Ch":100},{"Timestamp":2021,"Mod":0,"Key":27,"Ch":0},{"Timestamp":2436,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2779,"Mod":0,"Key":256,"Ch":100},{"Timestamp":3275,"Mod":0,"Key":13,"Ch":13},{"Timestamp":3971,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/branchDelete/setup.sh b/test/integration/branchDelete/setup.sh
deleted file mode 100644
index d67fa9291..000000000
--- a/test/integration/branchDelete/setup.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-echo test0 > file0
-git add .
-git commit -am file0
-
-git checkout -b new-branch
-git checkout -b new-branch-2
-git checkout -b new-branch-3
-git checkout -b old-branch
-git checkout -b old-branch-2
-git checkout -b old-branch-3
diff --git a/test/integration/branchDelete/test.json b/test/integration/branchDelete/test.json
deleted file mode 100644
index fafad1962..000000000
--- a/test/integration/branchDelete/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "description": "Checking out a branch with name suggestions", "speed": 100 }
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/branch/delete/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..907b30816
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+blah
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/branch/delete/expected/repo/.git_keep/FETCH_HEAD
similarity index 100%
rename from test/integration/branchDelete/expected/repo/.git_keep/FETCH_HEAD
rename to test/integration_new/branch/delete/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/HEAD b/test/integration_new/branch/delete/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..62c2c3bd5
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/branch-two
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/config b/test/integration_new/branch/delete/expected/repo/.git_keep/config
similarity index 87%
rename from test/integration/branchDelete/expected/repo/.git_keep/config
rename to test/integration_new/branch/delete/expected/repo/.git_keep/config
index 8ae104545..8a748ce32 100644
--- a/test/integration/branchDelete/expected/repo/.git_keep/config
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/config
@@ -8,3 +8,5 @@
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration/branchDelete/expected/repo/.git_keep/description b/test/integration_new/branch/delete/expected/repo/.git_keep/description
similarity index 100%
rename from test/integration/branchDelete/expected/repo/.git_keep/description
rename to test/integration_new/branch/delete/expected/repo/.git_keep/description
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/index b/test/integration_new/branch/delete/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..65d675154f23ffb2d0196e017d44a5e7017550f5
GIT binary patch
literal 65
zcmZ?q402{*U|<4bhL9jvS0E+HV4z^Y<=qr}%;|LA&IJiiy?<Pr)babBCri;)`-<AO
Tl}3xATFuWrGP@z+w&EiIWCj?s

literal 0
HcmV?d00001

diff --git a/test/integration/branchDelete/expected/repo/.git_keep/info/exclude b/test/integration_new/branch/delete/expected/repo/.git_keep/info/exclude
similarity index 100%
rename from test/integration/branchDelete/expected/repo/.git_keep/info/exclude
rename to test/integration_new/branch/delete/expected/repo/.git_keep/info/exclude
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/logs/HEAD b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..8cc1747b6
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	commit (initial): blah
+a7222d091ed91af493b7173e4b09dd2de085031d a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	checkout: moving from master to branch-one
+a7222d091ed91af493b7173e4b09dd2de085031d a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	checkout: moving from branch-one to branch-two
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-one b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-one
new file mode 100644
index 000000000..6de773cbd
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-one
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	branch: Created from HEAD
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-two b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-two
new file mode 100644
index 000000000..6de773cbd
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/branch-two
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	branch: Created from HEAD
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..608657ff8
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 a7222d091ed91af493b7173e4b09dd2de085031d CI <CI@example.com> 1661162427 +1000	commit (initial): blah
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/branch/delete/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/objects/a7/222d091ed91af493b7173e4b09dd2de085031d b/test/integration_new/branch/delete/expected/repo/.git_keep/objects/a7/222d091ed91af493b7173e4b09dd2de085031d
new file mode 100644
index 0000000000000000000000000000000000000000..363c8b8582db53d3d5ce032053830fa5aa7ce1a9
GIT binary patch
literal 117
zcmV-*0E+*30gcVU3c@f9fML&lirfWBVisEv5q8>RG+oAomCC5#<GV-j`t!kGTCJ}R
zB-c~l-9aq!Fc%drrfw;tq7PzAoHcQbi@8fe3Hj64w!=8VeVm^D&Go(crL_70QYBIr
XzQLIgF&y=nbpMkF+wvNIt2QgBJdQg8

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-one b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-one
new file mode 100644
index 000000000..74ab83e50
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-one
@@ -0,0 +1 @@
+a7222d091ed91af493b7173e4b09dd2de085031d
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-two b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-two
new file mode 100644
index 000000000..74ab83e50
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/branch-two
@@ -0,0 +1 @@
+a7222d091ed91af493b7173e4b09dd2de085031d
diff --git a/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/master b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..74ab83e50
--- /dev/null
+++ b/test/integration_new/branch/delete/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+a7222d091ed91af493b7173e4b09dd2de085031d

From 7b757d1cfe88363aa52a660d53838478243eca00 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 22 Aug 2022 20:43:19 +1000
Subject: [PATCH 09/44] add branch rebase integration test

---
 cmd/integration_test/main.go                  |  17 +++-
 pkg/integration/README.md                     |   6 +-
 pkg/integration/clients/cli.go                |  11 +-
 pkg/integration/components/shell.go           |  16 +++
 pkg/integration/tests/branch/rebase.go        |  94 ++++++++++++++++++
 .../tests/branch/rebase_and_drop.go           |  63 ++++++++++++
 pkg/integration/tests/tests.go                |   2 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |  18 ----
 .../branchRebase/expected/repo/.git_keep/HEAD |   1 -
 .../expected/repo/.git_keep/ORIG_HEAD         |   1 -
 .../expected/repo/.git_keep/index             | Bin 835 -> 0 bytes
 .../expected/repo/.git_keep/logs/HEAD         |  22 ----
 .../repo/.git_keep/logs/refs/heads/develop    |   5 -
 .../repo/.git_keep/logs/refs/heads/master     |   6 --
 .../09/cbe8c6717c06a61876b7b641a46a62bf3c585d | Bin 112 -> 0 bytes
 .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes
 .../1b/9ae5f5dff631baaa180a30afd9983f83dc27ca | Bin 50 -> 0 bytes
 .../21/78af7503938665881174069be4d48fa483e4af | Bin 117 -> 0 bytes
 .../2e/83133d8d6b88c588de66c3ff8405501b5215b4 | Bin 74 -> 0 bytes
 .../34/c74161eef968fc951cf170a011fa8abfeddbcd | Bin 120 -> 0 bytes
 .../36/27f93f3cc779dc2f99484fb8ffa49953e43b2f | Bin 121 -> 0 bytes
 .../3e/1706cdf670f5641be0715178471abfc9ed1748 |   2 -
 .../42/1b29bba240f23ea39e216bb0873cd4012624b5 | Bin 120 -> 0 bytes
 .../42/597904331c82f6d5c8c902755c8dfa5767ea95 | Bin 160 -> 0 bytes
 .../4f/80ec0c7b09eeeb580d0c19947477c02bc88c25 |   1 -
 .../5d/874a902548f753e50944827e572a7470aa9731 | Bin 107 -> 0 bytes
 .../5f/3e4598b46a912f0f95a4898743e979343c82f3 | Bin 86 -> 0 bytes
 .../60/91d709b275e712111d016d9b3a4fb44e63f1f6 | Bin 54 -> 0 bytes
 .../69/f11ae88c8712fe38ffd0fe9ff9df05371500a6 | Bin 157 -> 0 bytes
 .../70/95508e3cd0fd40572f8e711170db38ef2342d7 | Bin 160 -> 0 bytes
 .../7a/45b8933308e43f2597ee5d290862a62a9b46b3 | Bin 111 -> 0 bytes
 .../88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8 | Bin 65 -> 0 bytes
 .../8c/7a45270a95d66c8e3b843df3f466be5dc19960 | Bin 117 -> 0 bytes
 .../8d/3bd1cbd5560c759c78a948bc0d24acb9cfae73 |   2 -
 .../9a/6521a3788b4d9e679b1709130ff8dc3f73ab18 |   3 -
 .../9d/e8260b738a34a74533df54f2e404276aa96242 | Bin 54 -> 0 bytes
 .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes
 .../a8/381c9130b03aef530b60b5a4546b93dc59ae12 |   2 -
 .../cb/289e645aed5251ce74fa2eaf0cd1145b9cb014 | Bin 120 -> 0 bytes
 .../cc/52f7d833c761b3b11a5fa1ae76ba9aba2edd6f |   6 --
 .../dc/d348507ba1da8f6479b9d964daa302b2fb9d9c |   1 -
 .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes
 .../e3/ae5c6d8407e8307b9bc77923be78c901408f6e | Bin 50 -> 0 bytes
 .../e4/666ba294866d5c16f9afebcacf8f4adfee7439 | Bin 86 -> 0 bytes
 .../e9/57aaf2eef0c03a9052b472d4862d9ee684c3e5 | Bin 159 -> 0 bytes
 .../f3/f762af4429ae89fa0dae3d0a5b500ca11630c4 | Bin 54 -> 0 bytes
 .../f5/067da83b48f8588edce682fd2715a575f34373 |   4 -
 .../fe/427b52bbbe9dac81b463a162f37ab979ca772b | Bin 85 -> 0 bytes
 .../repo/.git_keep/refs/heads/develop         |   1 -
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../branchRebase/expected/repo/directory/file |   1 -
 .../expected/repo/directory/file2             |   1 -
 .../branchRebase/expected/repo/file1          |  63 ------------
 .../branchRebase/expected/repo/file3          |   1 -
 .../branchRebase/expected/repo/file4          |   1 -
 .../branchRebase/expected/repo/file5          |   1 -
 test/integration/branchRebase/recording.json  |   1 -
 test/integration/branchRebase/setup.sh        |  85 ----------------
 test/integration/branchRebase/test.json       |   1 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../rebase/expected/repo/.git_keep/HEAD       |   1 +
 .../rebase/expected/repo/.git_keep/MERGE_MSG  |   4 +
 .../rebase/expected/repo/.git_keep/ORIG_HEAD  |   1 +
 .../expected/repo/.git_keep/REBASE_HEAD       |   1 +
 .../rebase}/expected/repo/.git_keep/config    |   2 +
 .../expected/repo/.git_keep/description       |   0
 .../rebase/expected/repo/.git_keep/index      | Bin 0 -> 212 bytes
 .../expected/repo/.git_keep/info/exclude      |   0
 .../rebase/expected/repo/.git_keep/logs/HEAD  |  13 +++
 .../logs/refs/heads/first-change-branch       |   3 +
 .../.git_keep/logs/refs/heads/original-branch |   4 +
 .../logs/refs/heads/second-change-branch      |   3 +
 .../00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 | Bin 0 -> 49 bytes
 .../02/27353d56e56df9e9f94559f90b86ce7aa1ca5c |   2 +
 .../11/0d6e0b946c9d9b9b5e44c29d98692e925c368c | Bin 0 -> 48 bytes
 .../16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 | Bin 0 -> 46 bytes
 .../1f/332f64cb03c06913491af20cd407158776bd55 | Bin 0 -> 49 bytes
 .../3a/ac30738b0dda38d964abe6c2386603f9309a65 | Bin 0 -> 43 bytes
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../4c/16472189d1db34cb67b99439725202216e26d9 | Bin 0 -> 41 bytes
 .../4c/66ef64d685d244db41efda29deffb381c46c3d | Bin 0 -> 148 bytes
 .../55/13fcfcb56cc5f1de7b6b3ded32a945e94f5e37 | Bin 0 -> 170 bytes
 .../70/2b646c08ba47b2ac5729deed77188ef1647b4d |   2 +
 .../ab/1329d5c536f369c741c65fab7cca4ab27dc22e | Bin 0 -> 85 bytes
 .../b8/27df09781d0648f66cd9a01f0ec0ad5d412e10 | Bin 0 -> 150 bytes
 .../d7/149d98e6da25303f9a8cdff131da4b0723a412 | Bin 0 -> 147 bytes
 .../f4/2b6ab94e265acf87a9b3bf8cfa1105fcad57b2 | Bin 0 -> 154 bytes
 .../.git_keep/refs/heads/first-change-branch  |   1 +
 .../repo/.git_keep/refs/heads/original-branch |   1 +
 .../.git_keep/refs/heads/second-change-branch |   1 +
 .../branch/rebase/expected/repo/file          |   6 ++
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../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            |  12 +++
 .../expected/repo/.git_keep/description       |   1 +
 .../expected/repo/.git_keep/index             | Bin 0 -> 212 bytes
 .../expected/repo/.git_keep/info/exclude      |   7 ++
 .../expected/repo/.git_keep/logs/HEAD         |  16 +++
 .../logs/refs/heads/first-change-branch       |   5 +
 .../.git_keep/logs/refs/heads/original-branch |   4 +
 .../logs/refs/heads/second-change-branch      |   3 +
 .../00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 | Bin 0 -> 49 bytes
 .../11/0d6e0b946c9d9b9b5e44c29d98692e925c368c | Bin 0 -> 48 bytes
 .../16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 | Bin 0 -> 46 bytes
 .../1f/332f64cb03c06913491af20cd407158776bd55 | Bin 0 -> 49 bytes
 .../32/28c73cfc742264f3101966a81d6a0a70488e36 | Bin 0 -> 167 bytes
 .../39/129f24587bdc648e1fdb6f0b089c0846f54d45 |   2 +
 .../3a/ac30738b0dda38d964abe6c2386603f9309a65 | Bin 0 -> 43 bytes
 .../3f/c37a0e51435e01769aa25e6fe7179add2642a6 | Bin 0 -> 154 bytes
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../4c/16472189d1db34cb67b99439725202216e26d9 | Bin 0 -> 41 bytes
 .../55/87edfe46cfc076fb9ff4db76d196965838669a |   2 +
 .../7b/e86fe92edea93469924da2c241943adddd27cc | Bin 0 -> 85 bytes
 .../7c/0af051757503c84800076fd34851ea8b81e415 | Bin 0 -> 147 bytes
 .../99/a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 | Bin 0 -> 152 bytes
 .../9d/068e4adf5b237e3f3abe9ce38cfd996cce75dc | Bin 0 -> 146 bytes
 .../ab/5816052b05d45683d9fd3aa85203995b66cd65 | Bin 0 -> 117 bytes
 .../b5/6a14235fe8b10e5cca38d8b8009899d60b6499 | Bin 0 -> 149 bytes
 .../c0/66f8c513a34cd0c63e54c3b418a50491686cff | Bin 0 -> 151 bytes
 .../.git_keep/refs/heads/first-change-branch  |   1 +
 .../repo/.git_keep/refs/heads/original-branch |   1 +
 .../.git_keep/refs/heads/second-change-branch |   1 +
 .../branch/rebase_and_drop/expected/repo/file |   6 ++
 126 files changed, 309 insertions(+), 241 deletions(-)
 create mode 100644 pkg/integration/tests/branch/rebase.go
 create mode 100644 pkg/integration/tests/branch/rebase_and_drop.go
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/ORIG_HEAD
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/index
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/develop
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/2e/83133d8d6b88c588de66c3ff8405501b5215b4
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/36/27f93f3cc779dc2f99484fb8ffa49953e43b2f
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/3e/1706cdf670f5641be0715178471abfc9ed1748
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/42/1b29bba240f23ea39e216bb0873cd4012624b5
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/42/597904331c82f6d5c8c902755c8dfa5767ea95
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/5d/874a902548f753e50944827e572a7470aa9731
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/69/f11ae88c8712fe38ffd0fe9ff9df05371500a6
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/70/95508e3cd0fd40572f8e711170db38ef2342d7
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/7a/45b8933308e43f2597ee5d290862a62a9b46b3
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/8c/7a45270a95d66c8e3b843df3f466be5dc19960
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/8d/3bd1cbd5560c759c78a948bc0d24acb9cfae73
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/9a/6521a3788b4d9e679b1709130ff8dc3f73ab18
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/a8/381c9130b03aef530b60b5a4546b93dc59ae12
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/cb/289e645aed5251ce74fa2eaf0cd1145b9cb014
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/cc/52f7d833c761b3b11a5fa1ae76ba9aba2edd6f
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/e9/57aaf2eef0c03a9052b472d4862d9ee684c3e5
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/f5/067da83b48f8588edce682fd2715a575f34373
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/objects/fe/427b52bbbe9dac81b463a162f37ab979ca772b
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/refs/heads/develop
 delete mode 100644 test/integration/branchRebase/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/branchRebase/expected/repo/directory/file
 delete mode 100644 test/integration/branchRebase/expected/repo/directory/file2
 delete mode 100644 test/integration/branchRebase/expected/repo/file1
 delete mode 100644 test/integration/branchRebase/expected/repo/file3
 delete mode 100644 test/integration/branchRebase/expected/repo/file4
 delete mode 100644 test/integration/branchRebase/expected/repo/file5
 delete mode 100644 test/integration/branchRebase/recording.json
 delete mode 100644 test/integration/branchRebase/setup.sh
 delete mode 100644 test/integration/branchRebase/test.json
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/COMMIT_EDITMSG
 rename test/{integration/branchRebase => integration_new/branch/rebase}/expected/repo/.git_keep/FETCH_HEAD (100%)
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/MERGE_MSG
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/ORIG_HEAD
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/REBASE_HEAD
 rename test/{integration/branchRebase => integration_new/branch/rebase}/expected/repo/.git_keep/config (87%)
 rename test/{integration/branchRebase => integration_new/branch/rebase}/expected/repo/.git_keep/description (100%)
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/index
 rename test/{integration/branchRebase => integration_new/branch/rebase}/expected/repo/.git_keep/info/exclude (100%)
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/first-change-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/original-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/second-change-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/02/27353d56e56df9e9f94559f90b86ce7aa1ca5c
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/66ef64d685d244db41efda29deffb381c46c3d
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/55/13fcfcb56cc5f1de7b6b3ded32a945e94f5e37
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/70/2b646c08ba47b2ac5729deed77188ef1647b4d
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/ab/1329d5c536f369c741c65fab7cca4ab27dc22e
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/b8/27df09781d0648f66cd9a01f0ec0ad5d412e10
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/d7/149d98e6da25303f9a8cdff131da4b0723a412
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/objects/f4/2b6ab94e265acf87a9b3bf8cfa1105fcad57b2
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/first-change-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/original-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/second-change-branch
 create mode 100644 test/integration_new/branch/rebase/expected/repo/file
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/COMMIT_EDITMSG
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/FETCH_HEAD
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/ORIG_HEAD
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/config
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/description
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/index
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/info/exclude
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/first-change-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/original-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/second-change-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/32/28c73cfc742264f3101966a81d6a0a70488e36
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/39/129f24587bdc648e1fdb6f0b089c0846f54d45
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3f/c37a0e51435e01769aa25e6fe7179add2642a6
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/55/87edfe46cfc076fb9ff4db76d196965838669a
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7b/e86fe92edea93469924da2c241943adddd27cc
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7c/0af051757503c84800076fd34851ea8b81e415
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/99/a7ae4f26f9e76d96e97a8acd47bf9f22dcea12
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/9d/068e4adf5b237e3f3abe9ce38cfd996cce75dc
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/ab/5816052b05d45683d9fd3aa85203995b66cd65
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/b5/6a14235fe8b10e5cca38d8b8009899d60b6499
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/c0/66f8c513a34cd0c63e54c3b418a50491686cff
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/first-change-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/original-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/second-change-branch
 create mode 100644 test/integration_new/branch/rebase_and_drop/expected/repo/file

diff --git a/cmd/integration_test/main.go b/cmd/integration_test/main.go
index 83321fc34..dc0cede86 100644
--- a/cmd/integration_test/main.go
+++ b/cmd/integration_test/main.go
@@ -13,7 +13,7 @@ Usage:
 	See https://github.com/jesseduffield/lazygit/tree/master/pkg/integration/README.md
 
 	CLI mode:
-		> go run cmd/integration_test/main.go cli [--slow] <test1> <test2> ...
+		> go run cmd/integration_test/main.go cli [--slow] [--sandbox] <test1> <test2> ...
 	If you pass no test names, it runs all tests
 	Accepted environment variables:
 	KEY_PRESS_DELAY (e.g. 200): the number of milliseconds to wait between keypresses
@@ -42,12 +42,19 @@ func main() {
 	case "cli":
 		testNames := os.Args[2:]
 		slow := false
+		sandbox := false
 		// get the next arg if it's --slow
-		if len(os.Args) > 2 && (os.Args[2] == "--slow" || os.Args[2] == "-slow") {
-			testNames = os.Args[3:]
-			slow = true
+		if len(os.Args) > 2 {
+			if os.Args[2] == "--slow" || os.Args[2] == "-slow" {
+				testNames = os.Args[3:]
+				slow = true
+			} else if os.Args[2] == "--sandbox" || os.Args[2] == "-sandbox" {
+				testNames = os.Args[3:]
+				sandbox = true
+			}
 		}
-		clients.RunCLI(testNames, slow)
+
+		clients.RunCLI(testNames, slow, sandbox)
 	case "tui":
 		clients.RunTUI()
 	default:
diff --git a/pkg/integration/README.md b/pkg/integration/README.md
index 916149cea..4b745895a 100644
--- a/pkg/integration/README.md
+++ b/pkg/integration/README.md
@@ -11,7 +11,7 @@ go run cmd/integration_test/main.go tui
 or
 
 ```sh
-go run cmd/integration_test/main.go cli [--slow] [testname or testpath...]
+go run cmd/integration_test/main.go cli [--slow or --sandbox] [testname or testpath...]
 ```
 
 ## Writing tests
@@ -49,7 +49,7 @@ If you find yourself doing something frequently in a test, consider making it a
 
 There are three ways to invoke a test:
 
-1. go run cmd/integration_test/main.go cli [--slow] [testname or testpath...]
+1. go run cmd/integration_test/main.go cli [--slow or --sandbox] [testname or testpath...]
 2. go run cmd/integration_test/main.go tui
 3. go test pkg/integration/clients/go_test.go
 
@@ -69,7 +69,7 @@ At the moment (this is subject to change) each test has a snapshot repo created
 
 Say you want to do a manual test of how lazygit handles merge-conflicts, but you can't be bothered actually finding a way to create merge conflicts in a repo. To make your life easier, you can simply run a merge-conflicts test in sandbox mode, meaning the setup step is run for you, and then instead of the test driving the lazygit session, you're allowed to drive it yourself.
 
-To run a test in sandbox mode you can press 's' on a test in the test TUI or pass the env var MODE=sandbox to the test runner.
+To run a test in sandbox mode you can press 's' on a test in the test TUI or in the test runner pass MODE=sandbox or the --sandbox argument.
 
 ## Migration process
 
diff --git a/pkg/integration/clients/cli.go b/pkg/integration/clients/cli.go
index 17c379c85..0222bd129 100644
--- a/pkg/integration/clients/cli.go
+++ b/pkg/integration/clients/cli.go
@@ -23,18 +23,25 @@ import (
 
 // If invoked directly, you can specify tests to run by passing their names as positional arguments
 
-func RunCLI(testNames []string, slow bool) {
+func RunCLI(testNames []string, slow bool, sandbox bool) {
 	keyPressDelay := tryConvert(os.Getenv("KEY_PRESS_DELAY"), 0)
 	if slow {
 		keyPressDelay = SLOW_KEY_PRESS_DELAY
 	}
 
+	var mode components.Mode
+	if sandbox {
+		mode = components.SANDBOX
+	} else {
+		mode = getModeFromEnv()
+	}
+
 	err := components.RunTests(
 		getTestsToRun(testNames),
 		log.Printf,
 		runCmdInTerminal,
 		runAndPrintFatalError,
-		getModeFromEnv(),
+		mode,
 		keyPressDelay,
 	)
 	if err != nil {
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 7b7a68543..b49921348 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -40,6 +40,15 @@ func (s *Shell) CreateFile(path string, content string) *Shell {
 	return s
 }
 
+func (s *Shell) UpdateFile(path string, content string) *Shell {
+	err := ioutil.WriteFile(path, []byte(content), 0o644)
+	if err != nil {
+		panic(fmt.Sprintf("error updating file: %s\n%s", path, err))
+	}
+
+	return s
+}
+
 func (s *Shell) NewBranch(name string) *Shell {
 	return s.RunCommand("git checkout -b " + name)
 }
@@ -71,6 +80,13 @@ func (s *Shell) CreateFileAndAdd(fileName string, fileContents string) *Shell {
 		GitAdd(fileName)
 }
 
+// convenience method for updating a file and adding it
+func (s *Shell) UpdateFileAndAdd(fileName string, fileContents string) *Shell {
+	return s.
+		UpdateFile(fileName, fileContents).
+		GitAdd(fileName)
+}
+
 // creates commits 01, 02, 03, ..., n with a new file in each
 // The reason for padding with zeroes is so that it's easier to do string
 // matches on the commit messages when there are many of them
diff --git a/pkg/integration/tests/branch/rebase.go b/pkg/integration/tests/branch/rebase.go
new file mode 100644
index 000000000..eda7567e7
--- /dev/null
+++ b/pkg/integration/tests/branch/rebase.go
@@ -0,0 +1,94 @@
+package branch
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var originalFileContent = `
+This
+Is
+The
+Original
+File
+`
+
+var firstChangeFileContent = `
+This
+Is
+The
+First Change
+File
+`
+
+var secondChangeFileContent = `
+This
+Is
+The
+Second Change
+File
+`
+
+// prepares us for a rebase that has conflicts
+var commonRebaseSetup = func(shell *Shell) {
+	shell.
+		NewBranch("original-branch").
+		EmptyCommit("one").
+		EmptyCommit("two").
+		EmptyCommit("three").
+		CreateFileAndAdd("file", originalFileContent).
+		Commit("original").
+		NewBranch("first-change-branch").
+		UpdateFileAndAdd("file", firstChangeFileContent).
+		Commit("first change").
+		Checkout("original-branch").
+		NewBranch("second-change-branch").
+		UpdateFileAndAdd("file", secondChangeFileContent).
+		Commit("second change").
+		EmptyCommit("second-change-branch unrelated change").
+		Checkout("first-change-branch")
+}
+
+var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Rebase onto another branch, deal with the conflicts.",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		commonRebaseSetup(shell)
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		input.SwitchToBranchesWindow()
+		assert.CurrentViewName("localBranches")
+
+		assert.MatchSelectedLine(Contains("first-change-branch"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second-change-branch"))
+		input.PressKeys(keys.Branches.RebaseBranch)
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("Are you sure you want to rebase 'first-change-branch' onto 'second-change-branch'?"))
+		input.Confirm()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("Conflicts!"))
+		input.Confirm()
+
+		assert.CurrentViewName("files")
+		assert.MatchSelectedLine(Contains("file"))
+
+		// not using Confirm() convenience method because I suspect we might change this
+		// keybinding to something more bespoke
+		input.PressKeys(keys.Universal.Confirm)
+
+		assert.CurrentViewName("mergeConflicts")
+		input.PrimaryAction()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
+		input.Confirm()
+
+		// this proves we actually have integrated the changes from second-change-branch
+		assert.MatchViewContent("commits", Contains("second-change-branch unrelated change"))
+	},
+})
diff --git a/pkg/integration/tests/branch/rebase_and_drop.go b/pkg/integration/tests/branch/rebase_and_drop.go
new file mode 100644
index 000000000..18ffdd820
--- /dev/null
+++ b/pkg/integration/tests/branch/rebase_and_drop.go
@@ -0,0 +1,63 @@
+package branch
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Rebase onto another branch, deal with the conflicts. Also mark a commit to be dropped before continuing.",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		commonRebaseSetup(shell)
+		// addin a couple additional commits so that we can drop one
+		shell.EmptyCommit("to drop")
+		shell.EmptyCommit("to keep")
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		input.SwitchToBranchesWindow()
+		assert.CurrentViewName("localBranches")
+
+		assert.MatchSelectedLine(Contains("first-change-branch"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second-change-branch"))
+		input.PressKeys(keys.Branches.RebaseBranch)
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("Are you sure you want to rebase 'first-change-branch' onto 'second-change-branch'?"))
+		input.Confirm()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("Conflicts!"))
+		input.Confirm()
+
+		assert.CurrentViewName("files")
+		assert.MatchSelectedLine(Contains("file"))
+
+		input.SwitchToCommitsWindow()
+		input.NextItem()
+		input.PressKeys(keys.Universal.Remove)
+		assert.MatchSelectedLine(Contains("to drop"))
+		assert.MatchSelectedLine(Contains("drop"))
+
+		input.SwitchToFilesWindow()
+
+		// not using Confirm() convenience method because I suspect we might change this
+		// keybinding to something more bespoke
+		input.PressKeys(keys.Universal.Confirm)
+
+		assert.CurrentViewName("mergeConflicts")
+		input.PrimaryAction()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
+		input.Confirm()
+
+		// this proves we actually have integrated the changes from second-change-branch
+		assert.MatchViewContent("commits", Contains("second-change-branch unrelated change"))
+		assert.MatchViewContent("commits", Contains("to keep"))
+		assert.MatchViewContent("commits", NotContains("to drop"))
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 88f6b40da..0721fbf17 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -25,6 +25,8 @@ var tests = []*components.IntegrationTest{
 	commit.NewBranch,
 	branch.Suggestions,
 	branch.Delete,
+	branch.Rebase,
+	branch.RebaseAndDrop,
 	interactive_rebase.One,
 	custom_commands.Basic,
 	custom_commands.MultiplePrompts,
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/branchRebase/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index 42bf03720..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1,18 +0,0 @@
-first commit on master
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-#
-# interactive rebase in progress; onto e957aaf
-# Last command done (1 command done):
-#    pick 69f11ae first commit on master
-# Next commands to do (3 remaining commands):
-#    drop 8d3bd1c second commit on master
-#    drop 3e1706c third commit on master
-# You are currently rebasing branch 'master' on 'e957aaf'.
-#
-# Changes to be committed:
-#	modified:   directory/file
-#	modified:   directory/file2
-#	modified:   file1
-#
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/HEAD b/test/integration/branchRebase/expected/repo/.git_keep/HEAD
deleted file mode 100644
index cb089cd89..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/master
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/ORIG_HEAD b/test/integration/branchRebase/expected/repo/.git_keep/ORIG_HEAD
deleted file mode 100644
index 28cab2e49..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/ORIG_HEAD
+++ /dev/null
@@ -1 +0,0 @@
-69f11ae88c8712fe38ffd0fe9ff9df05371500a6
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/index b/test/integration/branchRebase/expected/repo/.git_keep/index
deleted file mode 100644
index 12d7435870d424e61c2a979e02a8af94870c5210..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 835
zcmZ?q402{*U|<4bw#1J@3R3NvD?qfQddfpa1_o9p%^BYr7#f!_Ffe`vsu2OHyPwUg
zeWvW$8~#%YhtvhU{55tRk!Ija$t+4uF3B&d)KAOINd>B70GT8G`Gq9d+==d-Q1gBe
zWgb7Oc}7t4WHT)<fzAEv!vr<&C#rdjIkD|t6I4CE2S4R>X{rm?Dk)es-H?G5<SIju
zv%v0>dpHwJ%N7_egPQXT)f@(8=~+*|-v4H}Yn23-!TOss?3?eXpMscU3^zx?VR<9S
zJ#ud@%!iuun|O0f;N~dq5fA{Gqu^ux6>82O;>|Gyn-db`>I!67GngqDaydzB?q1~Z
z$!_sH#q163Hdh$cRJOu{l)*^Bfa~-3r1dVE>pFk&uCwKe4&YfRW^g3PH58Z}7$x8;
zA(3flU|?oq!hlLG-ShabYU+(I5us5$`A!!Cyjr@iO7Q$JYEasD?&YdQ;Z^-Due9e|
zsAEemsOB4?nGCgu5(^-)jp|@1ujBBXJDMk_{&={|=B&r_-PdmB?AYPo@P?<F^WEzR
zULMIQCFKXSPxPqXx$F^8z3^6lO6AU*DYq6gZTdZT&Kl8JmpyN1yxpOhq$i;m_}2H>
G^c4VB(IfHz

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/logs/HEAD b/test/integration/branchRebase/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index e4a5b4d7a..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,22 +0,0 @@
-0000000000000000000000000000000000000000 3627f93f3cc779dc2f99484fb8ffa49953e43b2f CI <CI@example.com> 1643188754 +1100	commit (initial): first commit
-3627f93f3cc779dc2f99484fb8ffa49953e43b2f 3627f93f3cc779dc2f99484fb8ffa49953e43b2f CI <CI@example.com> 1643188754 +1100	checkout: moving from master to develop
-3627f93f3cc779dc2f99484fb8ffa49953e43b2f 9a6521a3788b4d9e679b1709130ff8dc3f73ab18 CI <CI@example.com> 1643188754 +1100	commit: first commit on develop
-9a6521a3788b4d9e679b1709130ff8dc3f73ab18 3627f93f3cc779dc2f99484fb8ffa49953e43b2f CI <CI@example.com> 1643188754 +1100	checkout: moving from develop to master
-3627f93f3cc779dc2f99484fb8ffa49953e43b2f 69f11ae88c8712fe38ffd0fe9ff9df05371500a6 CI <CI@example.com> 1643188754 +1100	commit: first commit on master
-69f11ae88c8712fe38ffd0fe9ff9df05371500a6 9a6521a3788b4d9e679b1709130ff8dc3f73ab18 CI <CI@example.com> 1643188754 +1100	checkout: moving from master to develop
-9a6521a3788b4d9e679b1709130ff8dc3f73ab18 a8381c9130b03aef530b60b5a4546b93dc59ae12 CI <CI@example.com> 1643188754 +1100	commit: second commit on develop
-a8381c9130b03aef530b60b5a4546b93dc59ae12 69f11ae88c8712fe38ffd0fe9ff9df05371500a6 CI <CI@example.com> 1643188754 +1100	checkout: moving from develop to master
-69f11ae88c8712fe38ffd0fe9ff9df05371500a6 8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 CI <CI@example.com> 1643188754 +1100	commit: second commit on master
-8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 a8381c9130b03aef530b60b5a4546b93dc59ae12 CI <CI@example.com> 1643188754 +1100	checkout: moving from master to develop
-a8381c9130b03aef530b60b5a4546b93dc59ae12 7095508e3cd0fd40572f8e711170db38ef2342d7 CI <CI@example.com> 1643188754 +1100	commit: third commit on develop
-7095508e3cd0fd40572f8e711170db38ef2342d7 8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 CI <CI@example.com> 1643188754 +1100	checkout: moving from develop to master
-8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 3e1706cdf670f5641be0715178471abfc9ed1748 CI <CI@example.com> 1643188754 +1100	commit: third commit on master
-3e1706cdf670f5641be0715178471abfc9ed1748 7095508e3cd0fd40572f8e711170db38ef2342d7 CI <CI@example.com> 1643188754 +1100	checkout: moving from master to develop
-7095508e3cd0fd40572f8e711170db38ef2342d7 e957aaf2eef0c03a9052b472d4862d9ee684c3e5 CI <CI@example.com> 1643188754 +1100	commit: fourth commit on develop
-e957aaf2eef0c03a9052b472d4862d9ee684c3e5 3e1706cdf670f5641be0715178471abfc9ed1748 CI <CI@example.com> 1643188754 +1100	checkout: moving from develop to master
-3e1706cdf670f5641be0715178471abfc9ed1748 f5067da83b48f8588edce682fd2715a575f34373 CI <CI@example.com> 1643188754 +1100	commit: fourth commit on master
-f5067da83b48f8588edce682fd2715a575f34373 e957aaf2eef0c03a9052b472d4862d9ee684c3e5 CI <CI@example.com> 1643188756 +1100	rebase -i (start): checkout develop
-e957aaf2eef0c03a9052b472d4862d9ee684c3e5 f5067da83b48f8588edce682fd2715a575f34373 CI <CI@example.com> 1643188757 +1100	rebase -i (abort): updating HEAD
-f5067da83b48f8588edce682fd2715a575f34373 e957aaf2eef0c03a9052b472d4862d9ee684c3e5 CI <CI@example.com> 1643188758 +1100	rebase -i (start): checkout develop
-e957aaf2eef0c03a9052b472d4862d9ee684c3e5 42597904331c82f6d5c8c902755c8dfa5767ea95 CI <CI@example.com> 1643188766 +1100	rebase -i (continue): first commit on master
-42597904331c82f6d5c8c902755c8dfa5767ea95 42597904331c82f6d5c8c902755c8dfa5767ea95 CI <CI@example.com> 1643188766 +1100	rebase -i (finish): returning to refs/heads/master
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/develop b/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/develop
deleted file mode 100644
index 06dc78ae9..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/develop
+++ /dev/null
@@ -1,5 +0,0 @@
-0000000000000000000000000000000000000000 3627f93f3cc779dc2f99484fb8ffa49953e43b2f CI <CI@example.com> 1643188754 +1100	branch: Created from HEAD
-3627f93f3cc779dc2f99484fb8ffa49953e43b2f 9a6521a3788b4d9e679b1709130ff8dc3f73ab18 CI <CI@example.com> 1643188754 +1100	commit: first commit on develop
-9a6521a3788b4d9e679b1709130ff8dc3f73ab18 a8381c9130b03aef530b60b5a4546b93dc59ae12 CI <CI@example.com> 1643188754 +1100	commit: second commit on develop
-a8381c9130b03aef530b60b5a4546b93dc59ae12 7095508e3cd0fd40572f8e711170db38ef2342d7 CI <CI@example.com> 1643188754 +1100	commit: third commit on develop
-7095508e3cd0fd40572f8e711170db38ef2342d7 e957aaf2eef0c03a9052b472d4862d9ee684c3e5 CI <CI@example.com> 1643188754 +1100	commit: fourth commit on develop
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 1856f13e4..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1,6 +0,0 @@
-0000000000000000000000000000000000000000 3627f93f3cc779dc2f99484fb8ffa49953e43b2f CI <CI@example.com> 1643188754 +1100	commit (initial): first commit
-3627f93f3cc779dc2f99484fb8ffa49953e43b2f 69f11ae88c8712fe38ffd0fe9ff9df05371500a6 CI <CI@example.com> 1643188754 +1100	commit: first commit on master
-69f11ae88c8712fe38ffd0fe9ff9df05371500a6 8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 CI <CI@example.com> 1643188754 +1100	commit: second commit on master
-8d3bd1cbd5560c759c78a948bc0d24acb9cfae73 3e1706cdf670f5641be0715178471abfc9ed1748 CI <CI@example.com> 1643188754 +1100	commit: third commit on master
-3e1706cdf670f5641be0715178471abfc9ed1748 f5067da83b48f8588edce682fd2715a575f34373 CI <CI@example.com> 1643188754 +1100	commit: fourth commit on master
-f5067da83b48f8588edce682fd2715a575f34373 42597904331c82f6d5c8c902755c8dfa5767ea95 CI <CI@example.com> 1643188766 +1100	rebase -i (finish): refs/heads/master onto e957aaf2eef0c03a9052b472d4862d9ee684c3e5
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d b/test/integration/branchRebase/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d
deleted file mode 100644
index 8d42c4c9e2f8c317030a30193aef9945f0c8afa2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 112
zcmV-$0FVE80V^p=O;s>7Fk&z<00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
SE0y<EoMd$9&jSDutt>;F6gC_H

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/branchRebase/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
deleted file mode 100644
index f74bf2335bbc5999ad0faff94fb04165d8ab5c7d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@DUS(>~ZE#08nZNMgRZ+

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca b/test/integration/branchRebase/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca
deleted file mode 100644
index 2b02dc3d14b4aef3343737214a03a09457e21e38..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmb<m^geacKghr=^~8B^zfcX`6X%0HLNrdE@eS2D>7nZts^PE0#`Wacbg|_{j0{$>
Gd}ROuKoaKw

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af b/test/integration/branchRebase/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af
deleted file mode 100644
index 27c11bb26067e0a43b68d14777da3f61ddfcceac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 117
zcmV-*0E+*30V^p=O;s>7Hf1m|00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
XE0y<EoMd$9&qGpRf>i+kh=VyFxv@AV

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/2e/83133d8d6b88c588de66c3ff8405501b5215b4 b/test/integration/branchRebase/expected/repo/.git_keep/objects/2e/83133d8d6b88c588de66c3ff8405501b5215b4
deleted file mode 100644
index 7cc212f4ecbf69faeec76ef317216317aa8802b9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 74
zcmV-Q0JZ;k0ZYosPf{>9Ww3z&1rJw87p{`j;u0e+TL=L2jJfO}K*7v1&CoD0RZmY(
gAuY40xI`g2KQ}kCL?J&<AvdwOB(;bO0HSRdw=dotS^xk5

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd b/test/integration/branchRebase/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd
deleted file mode 100644
index e8d63bced5a790cf612ba77d98cf03e888d91233..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 120
zcmV-;0Ehp00V^p=O;s>7vtTeW00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
aE0y<EoMd$9&qGpRLP&urRs{g5uSNWs5ju+i

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/36/27f93f3cc779dc2f99484fb8ffa49953e43b2f b/test/integration/branchRebase/expected/repo/.git_keep/objects/36/27f93f3cc779dc2f99484fb8ffa49953e43b2f
deleted file mode 100644
index cd608da68f4183b059da2a0b2367c3ab4e469b4f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 121
zcmV-<0EYi~0ga783c@fD06pgwdl#hJZng=C2tD-~+jJKThDc1o=UeatUWXYbm7KQ*
z=<(F5Dkw4YB7LO5y!wP}QB0R4$%2urraICPo$T#VDoit6r}?fQ$*-qgQpq<!rU643
bJ;52V>)b()Nz*@dXIp(Y_*L!;cu_CK&0aUq

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/3e/1706cdf670f5641be0715178471abfc9ed1748 b/test/integration/branchRebase/expected/repo/.git_keep/objects/3e/1706cdf670f5641be0715178471abfc9ed1748
deleted file mode 100644
index fcb375444..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/3e/1706cdf670f5641be0715178471abfc9ed1748
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0�a�9��I�I2��c�Li��R#x|^������V��a���wL ���6Z��P����HV�g��.�Tl*&���9���R�e@�)�%X�ᄡ�	��t���!���
�Gk��C8��:��T�?s՗u/�SОP�u`�.�?�
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/42/1b29bba240f23ea39e216bb0873cd4012624b5 b/test/integration/branchRebase/expected/repo/.git_keep/objects/42/1b29bba240f23ea39e216bb0873cd4012624b5
deleted file mode 100644
index 6ad1bf9cd75b1cd31f6c5468ced101f2724b08d1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 120
zcmV-;0Ehp00V^p=O;s>7vtTeW00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Z?cCQJl9^ZqXa=J9tg=>`*teS3!q`;U#de+mg_rDqLS|!0{
au>R%@`{q09r;rqw5K>@@RRI9XC`L=mVLLSd

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/42/597904331c82f6d5c8c902755c8dfa5767ea95 b/test/integration/branchRebase/expected/repo/.git_keep/objects/42/597904331c82f6d5c8c902755c8dfa5767ea95
deleted file mode 100644
index 1c62a22417fe7847281aa92803041b707346a5e2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 160
zcmV;R0AK%j0ey}^3c@fD06pgwdlzK0*`x`G2tD-~n{<l>(@Krt^DXGv>o5aT)>`KV
zgz3;WRbaB2QqDq*6FC)^lx)ZuW9Q1qXekh9ZyvJg(m<2%L?%+5u%MHKo-%hdatt&k
z)eyNj^+sOpwr<c5aPEhzzNJ3ydMazZfDP<yjGbpVT8n6Qx=%IzuZQr{%`|V%2Hy(S
O1*$yv*n9v!uRqBo989+W

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25 b/test/integration/branchRebase/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
deleted file mode 100644
index e0670d284..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
+++ /dev/null
@@ -1 +0,0 @@
-x��	�0C�v�L��\�j�V�W��=�������M<�i�f.���PU�M�HT�3T�`Q���9�"�^��h�d[�����i+B��;�~�/ Y:/��<P�
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/5d/874a902548f753e50944827e572a7470aa9731 b/test/integration/branchRebase/expected/repo/.git_keep/objects/5d/874a902548f753e50944827e572a7470aa9731
deleted file mode 100644
index 9633a40775d6137b880c8529d1f629282e258ea7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 107
zcmV-x0F?iD0p*a<34kyVL;da)nV>(4Gq}dp9<87~X|IUedoJJteuO~6%SXa40pmOk
z3s=V0KxiuUhGtS^Y6#2)Dtol3O3%rhL5Z7_vNHN9#VFklej8i4j3TV0&U^nWeH~Kd
NeFssJdjPfiP{E>uGQ<D?

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3 b/test/integration/branchRebase/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3
deleted file mode 100644
index 27ac61738744e4923b0d928f7521dd5707074712..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86
zcmV-c0IC0Y0V^p=O;s?nWH2!R0)>>!qSWM){Gv*R&)<{QyJ)WK{KdP@mMc1dXQ7zE
s5kmt5GZPbqw9K4TLxww-Jp!s1-s(@O+<7zQ)?%hjzvs>Y05^djO6CqI%>V!Z

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6 b/test/integration/branchRebase/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6
deleted file mode 100644
index bfb5376c67ba79deb64b9463958ebd99b0ed9f64..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWmvlB@n6-{8($(qqj>V2E(CbBbYDf1
MH^Qm_0Pdw7o*~;6`~Uy|

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/69/f11ae88c8712fe38ffd0fe9ff9df05371500a6 b/test/integration/branchRebase/expected/repo/.git_keep/objects/69/f11ae88c8712fe38ffd0fe9ff9df05371500a6
deleted file mode 100644
index 71f3f42ac0e10791c292c17373fd390595618d79..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 157
zcmV;O0Al}m0gaA93c@fDMP26<vlk@EOqvXc2wn9UY0O~3v?Yz;@eOzZw~zlmFKwkP
z4Xox<t2u)c%;Y%CG(<L5w6Kd5IC#R$o{=yGE2#EZ^V$Fh>xEG;CGYu>tT0m`nS)3q
zX4mg<wxZ&@J+}(u1lMu8=T9vAD__!9ZeRvN6M}aHXJfQho%X1f|C}pX>e1k5!L~w)
LN0-$X`5ixS{X|NQ

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/70/95508e3cd0fd40572f8e711170db38ef2342d7 b/test/integration/branchRebase/expected/repo/.git_keep/objects/70/95508e3cd0fd40572f8e711170db38ef2342d7
deleted file mode 100644
index 7d14e4e29bf0883a5c0214316b7aab8b139f96da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 160
zcmV;R0AK%j0gaAH3d1lE1asCa<{k($)?x`l2>9e@Xc=RJWf`G_JU@bbAh)KeE;^Q+
zw*~{@rB!CIar8<LBYLNkG10ONR>`!;MHv%Vr%28j6sNCzH1JkhijE`(l%5yegTbJ?
zM48}ZirRUmLHJi&OND8M`!qlK<MX-mEtdQMGD?!QqgHSwLKMC2ryBo>i?(hx!EXiS
OfW&X!%PGEZbwB(FR!gJ+

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/7a/45b8933308e43f2597ee5d290862a62a9b46b3 b/test/integration/branchRebase/expected/repo/.git_keep/objects/7a/45b8933308e43f2597ee5d290862a62a9b46b3
deleted file mode 100644
index f6a9427bc10feda765a6bce02de0a2d2eb0977d5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 111
zcmV-#0FeK90V^p=O;s>7Fk&z<00M=S%%arflKi4dhPf})xQn|?mb)6?5Bc<jMLla}
zl9Qo<ftiVkLRw}{sv(1a!yBGz&UddPczGnJl$0OPKGCC!q`;U#de+mg_rDqLS|!0{
Ru>R%@`{q09rvP{yDhp2XHkSYZ

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8 b/test/integration/branchRebase/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8
deleted file mode 100644
index ea7fa53039077c16fa43ab0244a322d4d24fe9f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 65
zcmb<m^geacKghr|>4S%^SLg|yFpm%oy_5Q@LNrc#=mehd019~do(<MGdES$eOZ4gV
Vv?a_hLt2k~xss&Ekdh(N4**9y8ax01

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/8c/7a45270a95d66c8e3b843df3f466be5dc19960 b/test/integration/branchRebase/expected/repo/.git_keep/objects/8c/7a45270a95d66c8e3b843df3f466be5dc19960
deleted file mode 100644
index f502f942fc9df60df6dc206fe1d997c69219efbe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 117
zcmV-*0E+*30V^p=O;s>7Hf1m|00M=S%%arflKi4dhPf})xQn|?mb)6?5Bc<jMLla}
zl9Qo<ftiVkLRw}{sv(1a!yBGz&UddPczGnJl$0OPKGCC!q`;U#de+mg_rDqLS|!0{
Xu>R%@`{q09r;rqwU{wGBvMe|*sF*nn

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/8d/3bd1cbd5560c759c78a948bc0d24acb9cfae73 b/test/integration/branchRebase/expected/repo/.git_keep/objects/8d/3bd1cbd5560c759c78a948bc0d24acb9cfae73
deleted file mode 100644
index 5083d8258..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/8d/3bd1cbd5560c759c78a948bc0d24acb9cfae73
+++ /dev/null
@@ -1,2 +0,0 @@
-x��M
-�0F]��d���D��z�$�A�4����-x���=�r-�٠#<�Mp�I8�@!���8����1��}v�f��M�~P�(̙u*=�Ψ2����9��M|�G�`��:Nw�IJ��k�y�sp�D��ǩ&�f�\�~�J܏�|�B@t
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/9a/6521a3788b4d9e679b1709130ff8dc3f73ab18 b/test/integration/branchRebase/expected/repo/.git_keep/objects/9a/6521a3788b4d9e679b1709130ff8dc3f73ab18
deleted file mode 100644
index 051e4ce43..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/9a/6521a3788b4d9e679b1709130ff8dc3f73ab18
+++ /dev/null
@@ -1,3 +0,0 @@
-x��K
-�0@]��������#��`�mJ���-x�����,Sg�S�E@%8��1�Иr�:�l��cbB�	ѱ��.k�9T��sF�1;%
-1(G��Z/��S�^�Qv����]>i�f����v���
p��i�A��*�F��Y�WAYa���e3_-MA"
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242 b/test/integration/branchRebase/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242
deleted file mode 100644
index ffc277c86c56c088175e46f1590082f30deb89cd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWsu<cVbq|s@7&8(i^8k=TV83;w@^ot
MH^Qm_0H#zMoMT`Zd;kCd

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/branchRebase/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
deleted file mode 100644
index 285df3e5fbab12262e28d85e78af8a31cd0024c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@Cg%x>`~^A08nuUMF0Q*

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/a8/381c9130b03aef530b60b5a4546b93dc59ae12 b/test/integration/branchRebase/expected/repo/.git_keep/objects/a8/381c9130b03aef530b60b5a4546b93dc59ae12
deleted file mode 100644
index 8ed23d6aa..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/a8/381c9130b03aef530b60b5a4546b93dc59ae12
+++ /dev/null
@@ -1,2 +0,0 @@
-x���
-�0E]�+f/H&��D���yLQ�M�Q�|��pW�s��6����7ɺ̑�4��ɸD\5Q�7i_��gRk�d��w�lkbƠ#��&���@)#��귶�0�y��I���Si��[B��,�V;�Ou�SWO)m��ˠ-P�-���/8|?�
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/cb/289e645aed5251ce74fa2eaf0cd1145b9cb014 b/test/integration/branchRebase/expected/repo/.git_keep/objects/cb/289e645aed5251ce74fa2eaf0cd1145b9cb014
deleted file mode 100644
index 8f0889223b53c6c44867d32f0da7bd7277bd4121..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 120
zcmV-;0Ehp00V^p=O;s>7vtTeW00M=S%%arflKi4dhPf})xQn|?mb)6?5Bc<jMLla}
zl9Qo<ftiVkLRw}{sv(1a!yBGz&UddPczGnJl$0OPKGCC!q`;U#de+mg_rDqLS|!0{
au>R%@`{q09r;rqw5K>@@RRI9MxkgfqqB}hR

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/cc/52f7d833c761b3b11a5fa1ae76ba9aba2edd6f b/test/integration/branchRebase/expected/repo/.git_keep/objects/cc/52f7d833c761b3b11a5fa1ae76ba9aba2edd6f
deleted file mode 100644
index 0e775a5f8..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/cc/52f7d833c761b3b11a5fa1ae76ba9aba2edd6f
+++ /dev/null
@@ -1,6 +0,0 @@
-x�Q
-�@D��S�	
-,*
-�Fڦ�Bw#�)��M��R��d���L��P�w5'�� d�􂎤)�a�P�:;%���6���
-��zs[���h�/6�|Z����W}7���
-ձ/K�(������V(+'g������,�7c�����0�1
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c b/test/integration/branchRebase/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
deleted file mode 100644
index 74c919681..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
+++ /dev/null
@@ -1 +0,0 @@
-x��	�0C����?�3�ƵV�=iO��=������,�8tW��@h*��&R$j�*y��ʑs-ܜ��8v)��u㧱��V�H�����"��
��P�
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b b/test/integration/branchRebase/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b
deleted file mode 100644
index 9b771fc2f6f41f91b00976b4ff3f8f9935f7931e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@EH?>>`CU&08otwO#lD@

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e b/test/integration/branchRebase/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e
deleted file mode 100644
index 3a7ee91eab601eb205b04a6e1e62c58599193222..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmb<m^geacKghr=^~8B^zfcX`6X%0HLNrdE@eS2D>7nZts^PE0#+C9!Ty%L6BZHMO
GUmgJUj1jT`

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439 b/test/integration/branchRebase/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439
deleted file mode 100644
index 83998943a5a68dad92fe592c8b50a4121bd04c88..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86
zcmV-c0IC0Y0V^p=O;s?nWH2!R0)>>!qSWM){Gv*Rgo)QVH<dmY5|m}koo(g6#V`5e
sH$wvhGZPbqw9K4TLxzsSbM9!KociP8GMlp=&v#$DnX_XD052LKjex`_i2wiq

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/e9/57aaf2eef0c03a9052b472d4862d9ee684c3e5 b/test/integration/branchRebase/expected/repo/.git_keep/objects/e9/57aaf2eef0c03a9052b472d4862d9ee684c3e5
deleted file mode 100644
index 52090e26c86965c4bebf949b9a67fee458f54d7a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 159
zcmV;Q0AT-k0gaAJ3c@fH0A1%4Z!gGu`7|kr2wn9U`Mgk}X-Y`N<6H0oZig9|SW9_z
zkVKc>m>~w~Mjo{BoQyOS+3M^i`;0LWX%og6khIu+<E?|m(HL~BV#1s>8Y{D7OGFk^
zP>!=yS|%&}(U;m_n&CdpPyYC_uY8NOJb(tR$T@2?T!|3HNzbXyf9fLFqxA)T8Pp9D
Nzj>{@_yPcVK+76MOnm?V

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4 b/test/integration/branchRebase/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4
deleted file mode 100644
index e9f9f0881a1460f9b019818b1cbd6e4f67fe70aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWw@Wst9_>I*&F^-3WwAMy!<tG9g#+o
MH^Qm_0E{vk5H*e!i2wiq

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/f5/067da83b48f8588edce682fd2715a575f34373 b/test/integration/branchRebase/expected/repo/.git_keep/objects/f5/067da83b48f8588edce682fd2715a575f34373
deleted file mode 100644
index 47681b580..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/objects/f5/067da83b48f8588edce682fd2715a575f34373
+++ /dev/null
@@ -1,4 +0,0 @@
-x��A
-�0E]��$c�L
-"BW=F��P�4%���
x���?���
��O�2�`"t�,��G�Q�tЈ|X�SZbR{��5�C�8�b���5�E��q�d�
-G[K�i��4?����K,��̀ޓ5pF�Z���j�������ˠl�û��1A
\ No newline at end of file
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/objects/fe/427b52bbbe9dac81b463a162f37ab979ca772b b/test/integration/branchRebase/expected/repo/.git_keep/objects/fe/427b52bbbe9dac81b463a162f37ab979ca772b
deleted file mode 100644
index 276be8d532a98293042fe687e2977c5b42c41743..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 85
zcmV-b0IL6Z0V^p=O;s?nWH2!R0)>>!qSWM){Gv*Rxi8eXi@QvgyBgmQ`SgTEJ!@r>
rlc9lunTd%)T4qkFA%lOz8=h*;cdsLOc_gQllpoMO(W43g2J9QllRGE5

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/develop b/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/develop
deleted file mode 100644
index d77f4721f..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/develop
+++ /dev/null
@@ -1 +0,0 @@
-e957aaf2eef0c03a9052b472d4862d9ee684c3e5
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/master b/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index 567f6507a..000000000
--- a/test/integration/branchRebase/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-42597904331c82f6d5c8c902755c8dfa5767ea95
diff --git a/test/integration/branchRebase/expected/repo/directory/file b/test/integration/branchRebase/expected/repo/directory/file
deleted file mode 100644
index df6b0d2bc..000000000
--- a/test/integration/branchRebase/expected/repo/directory/file
+++ /dev/null
@@ -1 +0,0 @@
-test3
diff --git a/test/integration/branchRebase/expected/repo/directory/file2 b/test/integration/branchRebase/expected/repo/directory/file2
deleted file mode 100644
index df6b0d2bc..000000000
--- a/test/integration/branchRebase/expected/repo/directory/file2
+++ /dev/null
@@ -1 +0,0 @@
-test3
diff --git a/test/integration/branchRebase/expected/repo/file1 b/test/integration/branchRebase/expected/repo/file1
deleted file mode 100644
index 5d874a902..000000000
--- a/test/integration/branchRebase/expected/repo/file1
+++ /dev/null
@@ -1,63 +0,0 @@
-Here is a story that has been told throuhg the ages
-once upon a time there was a cat
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-once upon a time there was another dog
diff --git a/test/integration/branchRebase/expected/repo/file3 b/test/integration/branchRebase/expected/repo/file3
deleted file mode 100644
index 1b9ae5f5d..000000000
--- a/test/integration/branchRebase/expected/repo/file3
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a mouse
diff --git a/test/integration/branchRebase/expected/repo/file4 b/test/integration/branchRebase/expected/repo/file4
deleted file mode 100644
index 1b9ae5f5d..000000000
--- a/test/integration/branchRebase/expected/repo/file4
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a mouse
diff --git a/test/integration/branchRebase/expected/repo/file5 b/test/integration/branchRebase/expected/repo/file5
deleted file mode 100644
index 1b9ae5f5d..000000000
--- a/test/integration/branchRebase/expected/repo/file5
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a mouse
diff --git a/test/integration/branchRebase/recording.json b/test/integration/branchRebase/recording.json
deleted file mode 100644
index c0da4c16a..000000000
--- a/test/integration/branchRebase/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":617,"Mod":0,"Key":259,"Ch":0},{"Timestamp":922,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1176,"Mod":0,"Key":256,"Ch":114},{"Timestamp":1512,"Mod":0,"Key":13,"Ch":13},{"Timestamp":2797,"Mod":0,"Key":27,"Ch":0},{"Timestamp":3632,"Mod":0,"Key":256,"Ch":114},{"Timestamp":4032,"Mod":0,"Key":13,"Ch":13},{"Timestamp":4760,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5105,"Mod":0,"Key":259,"Ch":0},{"Timestamp":5376,"Mod":0,"Key":259,"Ch":0},{"Timestamp":5721,"Mod":0,"Key":256,"Ch":100},{"Timestamp":5992,"Mod":0,"Key":258,"Ch":0},{"Timestamp":6186,"Mod":0,"Key":256,"Ch":100},{"Timestamp":6401,"Mod":0,"Key":258,"Ch":0},{"Timestamp":6592,"Mod":0,"Key":256,"Ch":100},{"Timestamp":6840,"Mod":0,"Key":260,"Ch":0},{"Timestamp":7105,"Mod":0,"Key":260,"Ch":0},{"Timestamp":7612,"Mod":0,"Key":256,"Ch":32},{"Timestamp":7922,"Mod":0,"Key":258,"Ch":0},{"Timestamp":8160,"Mod":0,"Key":256,"Ch":32},{"Timestamp":8680,"Mod":0,"Key":256,"Ch":32},{"Timestamp":9080,"Mod":0,"Key":256,"Ch":32},{"Timestamp":9464,"Mod":0,"Key":256,"Ch":32},{"Timestamp":9808,"Mod":0,"Key":256,"Ch":32},{"Timestamp":10040,"Mod":0,"Key":257,"Ch":0},{"Timestamp":10372,"Mod":0,"Key":256,"Ch":32},{"Timestamp":11249,"Mod":0,"Key":13,"Ch":13},{"Timestamp":12088,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/branchRebase/setup.sh b/test/integration/branchRebase/setup.sh
deleted file mode 100644
index a1f14b455..000000000
--- a/test/integration/branchRebase/setup.sh
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-
-function add_spacing {
-  for i in {1..60}
-  do
-    echo "..." >> $1
-  done
-}
-
-mkdir directory
-echo "test1" > directory/file
-echo "test1" > directory/file2
-
-
-echo "Here is a story that has been told throuhg the ages" >> file1
-
-git add file1
-git add directory
-git commit -m "first commit"
-
-git checkout -b develop
-echo "once upon a time there was a dog" >> file1
-add_spacing file1
-echo "once upon a time there was another dog" >> file1
-git add file1
-echo "test2" > directory/file
-echo "test2" > directory/file2
-git add directory
-git commit -m "first commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a cat" >> file1
-add_spacing file1
-echo "once upon a time there was another cat" >> file1
-git add file1
-echo "test3" > directory/file
-echo "test3" > directory/file2
-git add directory
-git commit -m "first commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file3
-git add file3
-git commit -m "second commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file3
-git add file3
-git commit -m "second commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file4
-git add file4
-git commit -m "third commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file4
-git add file4
-git commit -m "third commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file5
-git add file5
-git commit -m "fourth commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file5
-git add file5
-git commit -m "fourth commit on master"
diff --git a/test/integration/branchRebase/test.json b/test/integration/branchRebase/test.json
deleted file mode 100644
index 1082379ed..000000000
--- a/test/integration/branchRebase/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "description": "In this test we fix some merge conflicts, ensuring that in the flat tree structure the conflicts are bubbled to the top, and that after resolving the conflicts your cursor stays on the same line, able to select the next conflicted file. We also switch to tree mode and ensure that works too.", "speed": 10 }
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/branch/rebase/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..14bc77d37
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+second-change-branch unrelated change
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/branch/rebase/expected/repo/.git_keep/FETCH_HEAD
similarity index 100%
rename from test/integration/branchRebase/expected/repo/.git_keep/FETCH_HEAD
rename to test/integration_new/branch/rebase/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/HEAD b/test/integration_new/branch/rebase/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..e1c7bf8c5
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/first-change-branch
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/MERGE_MSG b/test/integration_new/branch/rebase/expected/repo/.git_keep/MERGE_MSG
new file mode 100644
index 000000000..803d9a2dd
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/MERGE_MSG
@@ -0,0 +1,4 @@
+first change
+
+# Conflicts:
+#	file
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/branch/rebase/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..51a54aa1d
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/REBASE_HEAD b/test/integration_new/branch/rebase/expected/repo/.git_keep/REBASE_HEAD
new file mode 100644
index 000000000..51a54aa1d
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/REBASE_HEAD
@@ -0,0 +1 @@
+f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/config b/test/integration_new/branch/rebase/expected/repo/.git_keep/config
similarity index 87%
rename from test/integration/branchRebase/expected/repo/.git_keep/config
rename to test/integration_new/branch/rebase/expected/repo/.git_keep/config
index 8ae104545..8a748ce32 100644
--- a/test/integration/branchRebase/expected/repo/.git_keep/config
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/config
@@ -8,3 +8,5 @@
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration/branchRebase/expected/repo/.git_keep/description b/test/integration_new/branch/rebase/expected/repo/.git_keep/description
similarity index 100%
rename from test/integration/branchRebase/expected/repo/.git_keep/description
rename to test/integration_new/branch/rebase/expected/repo/.git_keep/description
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/index b/test/integration_new/branch/rebase/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..b5c896cfb9e2b5709039111b82079c3e8b8cfe65
GIT binary patch
literal 212
zcmZ?q402{*U|<4b#$@K$P6hT8VlbMKfq|9zQ&s~5L*o*l^jDx75g=9&^I~5w`r=>o
zgQF*t?(X3JbE^La3j<49W=<+l76?LuTwQ?_8-uQ)f&o{MYbeNuFtEI#fq|Kc2?HwS
zBj&EydGWT%>GYjbEQ^Ae6!X+>Vza|)jX`lY?=6d)DXX6yvPfh8X)r65;Zo7s#M))=
R7QK?vbbWOFMuGNp2LK+~MxOux

literal 0
HcmV?d00001

diff --git a/test/integration/branchRebase/expected/repo/.git_keep/info/exclude b/test/integration_new/branch/rebase/expected/repo/.git_keep/info/exclude
similarity index 100%
rename from test/integration/branchRebase/expected/repo/.git_keep/info/exclude
rename to test/integration_new/branch/rebase/expected/repo/.git_keep/info/exclude
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/HEAD b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..be5fa6486
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,13 @@
+0000000000000000000000000000000000000000 0227353d56e56df9e9f94559f90b86ce7aa1ca5c CI <CI@example.com> 1661164934 +1000	commit (initial): one
+0227353d56e56df9e9f94559f90b86ce7aa1ca5c d7149d98e6da25303f9a8cdff131da4b0723a412 CI <CI@example.com> 1661164934 +1000	commit: two
+d7149d98e6da25303f9a8cdff131da4b0723a412 4c66ef64d685d244db41efda29deffb381c46c3d CI <CI@example.com> 1661164934 +1000	commit: three
+4c66ef64d685d244db41efda29deffb381c46c3d b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	commit: original
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	checkout: moving from original-branch to first-change-branch
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 CI <CI@example.com> 1661164934 +1000	commit: first change
+f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	checkout: moving from first-change-branch to original-branch
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	checkout: moving from original-branch to second-change-branch
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 702b646c08ba47b2ac5729deed77188ef1647b4d CI <CI@example.com> 1661164934 +1000	commit: second change
+702b646c08ba47b2ac5729deed77188ef1647b4d 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 CI <CI@example.com> 1661164934 +1000	commit: second-change-branch unrelated change
+5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 CI <CI@example.com> 1661164934 +1000	checkout: moving from second-change-branch to first-change-branch
+f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 CI <CI@example.com> 1661164936 +1000	rebase (start): checkout second-change-branch
+5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 CI <CI@example.com> 1661164938 +1000	rebase (continue) (finish): returning to refs/heads/first-change-branch
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/first-change-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/first-change-branch
new file mode 100644
index 000000000..994f744ef
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/first-change-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	branch: Created from HEAD
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 CI <CI@example.com> 1661164934 +1000	commit: first change
+f42b6ab94e265acf87a9b3bf8cfa1105fcad57b2 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 CI <CI@example.com> 1661164938 +1000	rebase (continue) (finish): refs/heads/first-change-branch onto 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/original-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/original-branch
new file mode 100644
index 000000000..0de43eaeb
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/original-branch
@@ -0,0 +1,4 @@
+0000000000000000000000000000000000000000 0227353d56e56df9e9f94559f90b86ce7aa1ca5c CI <CI@example.com> 1661164934 +1000	commit (initial): one
+0227353d56e56df9e9f94559f90b86ce7aa1ca5c d7149d98e6da25303f9a8cdff131da4b0723a412 CI <CI@example.com> 1661164934 +1000	commit: two
+d7149d98e6da25303f9a8cdff131da4b0723a412 4c66ef64d685d244db41efda29deffb381c46c3d CI <CI@example.com> 1661164934 +1000	commit: three
+4c66ef64d685d244db41efda29deffb381c46c3d b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	commit: original
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/second-change-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/second-change-branch
new file mode 100644
index 000000000..b20bc5041
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/logs/refs/heads/second-change-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 b827df09781d0648f66cd9a01f0ec0ad5d412e10 CI <CI@example.com> 1661164934 +1000	branch: Created from HEAD
+b827df09781d0648f66cd9a01f0ec0ad5d412e10 702b646c08ba47b2ac5729deed77188ef1647b4d CI <CI@example.com> 1661164934 +1000	commit: second change
+702b646c08ba47b2ac5729deed77188ef1647b4d 5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37 CI <CI@example.com> 1661164934 +1000	commit: second-change-branch unrelated change
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
new file mode 100644
index 0000000000000000000000000000000000000000..bd9b135ac92b2dd8c84e8ee930f3abbad446dcdc
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5Rp4_{y#B98@n4!3t51IS?!mv}RsY$z8MvYa
Fi~z+L6c_*i

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/02/27353d56e56df9e9f94559f90b86ce7aa1ca5c b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/02/27353d56e56df9e9f94559f90b86ce7aa1ca5c
new file mode 100644
index 000000000..d9ada22e6
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/02/27353d56e56df9e9f94559f90b86ce7aa1ca5c
@@ -0,0 +1,2 @@
+x��A
+�0Fa�9�����!��#I��`���=B��^i��:��S_��0S_�!���4/a��CX2��ե_��Ɖn���?������L�4^����n���� w���q+\
\ No newline at end of file
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
new file mode 100644
index 0000000000000000000000000000000000000000..a893c25632075cb033b35ab97b00bb966d383053
GIT binary patch
literal 48
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^@Ct>_?tZyx1W^!I;T0!)zPP`GRvIt8v}0&
E0IOXS3jhEB

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
new file mode 100644
index 0000000000000000000000000000000000000000..3f0746de578045d05bc0ab70eedb0910b69841be
GIT binary patch
literal 46
zcmV+}0MY+=0ZYosPf{>8V&DqN$SmgaEC$l4T*0Zy`FSY{&KZe$>8V_9nK`Lk0P)uh
E7zjcZDF6Tf

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
new file mode 100644
index 0000000000000000000000000000000000000000..8cded6c81b47e88b26c954bb22ad356788258752
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5bwgBgz@4+zryr%AdX?U;b7@As)EO^U2F6~#
FjR3)m6SV*U

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
new file mode 100644
index 0000000000000000000000000000000000000000..1f72f9aeea32636014d2a1fd48203d51ca973040
GIT binary patch
literal 43
zcmV+`0M!3@0ZYosPf{>8WZ(+P$SmgaEC$l4TyB{~#U%>P8Hsu6AWlvy7Xam63&W%1
B5^Dee

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
new file mode 100644
index 0000000000000000000000000000000000000000..9d9452bdd10687443ef9d15b5a5b6f535d97c7c6
GIT binary patch
literal 41
zcmV+^0M`F_0ZYosPf{>4XW$CS$SmgaEC$l4T>eFw>6v+nIb3d;IjLL#xmpU3me3P0

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/66ef64d685d244db41efda29deffb381c46c3d b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/4c/66ef64d685d244db41efda29deffb381c46c3d
new file mode 100644
index 0000000000000000000000000000000000000000..b78879b105579bddbbb0f5a433b0ee5297e903f6
GIT binary patch
literal 148
zcmV;F0Biqv0gcW<3c@fDKvCB@MfQTsB-1eiB0^U^#w3|g!P-(Hczk;Vx1YawWnGqM
z_bB1icQa2pg`pOvP%>K<1qK@^w^Ug|N-dj_0J%+fdv{;2NKz#kR}Dji*hEvQtzpEf
zl;Ikp5(cNAKCinUCx08KhkbR~UUn(#a`(uL$Rv^c83Di@^+0v|b9a3{=<WxI_c_)0
CB|&ch

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/55/13fcfcb56cc5f1de7b6b3ded32a945e94f5e37 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/55/13fcfcb56cc5f1de7b6b3ded32a945e94f5e37
new file mode 100644
index 0000000000000000000000000000000000000000..7179605be92b02bcb11efa8ec3354308454d2080
GIT binary patch
literal 170
zcmV;b09F5Z0gcW<YQr!PK+&vqirI&hks@m(2qlnJjxi&R>VPd9Re>JAhF+lC$6x%s
zt?O%mbN)2CDj<@&La{Otic2-csv#B(B2%m+a%HrX%+6ig0756hhm29!lQ_;3xl~jO
zk&RKS4F~&T_&w&W!{Z6J$Mdc~yzYyB<Zb-~8-hKuboFqyh-eNyriT7AH{Y7KRxWww
Y_N5o;-0}?X)^*{b1^(Rp0&CDkvczUpSO5S3

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/70/2b646c08ba47b2ac5729deed77188ef1647b4d b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/70/2b646c08ba47b2ac5729deed77188ef1647b4d
new file mode 100644
index 000000000..3c54ea1fe
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/70/2b646c08ba47b2ac5729deed77188ef1647b4d
@@ -0,0 +1,2 @@
+x��M
+�0@a�9���I�L"BW=F~&V0M�<�=��Ƿx����O}D�ٕ��Q��]�2�GW8�! �W[�e���\г��W�M���$y̆����K�a��:�w�����Z�YKd��	�Q��.r����i	�C�9`<�
\ No newline at end of file
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/ab/1329d5c536f369c741c65fab7cca4ab27dc22e b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/ab/1329d5c536f369c741c65fab7cca4ab27dc22e
new file mode 100644
index 0000000000000000000000000000000000000000..4c6a50757631adb4b31ccf2f7e6dd74d47d3314d
GIT binary patch
literal 85
zcmV-b0IL6Z0ZYosPg1ZnXW$CS$SmgaEC$l4Ts9D(;Nj}%!WEpFoS&DX;GB_|m!8UH
r3jthinMK7VFhM&AP)IW|N-|4KQqV{P%O-=hXad#dq;dfO9G4za^jRh)

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/b8/27df09781d0648f66cd9a01f0ec0ad5d412e10 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/b8/27df09781d0648f66cd9a01f0ec0ad5d412e10
new file mode 100644
index 0000000000000000000000000000000000000000..b59c8608a6216f262c4fc1ce2223f966758b68a5
GIT binary patch
literal 150
zcmV;H0BQet0gaAJ3Iib!M6>o3?gPQrwowQnFsnI+pEem7$3YC_`0)tY6~(JZrB>@U
zBzSunomm2?Ost|uN<RDOqh-XTXLjT@du@{;m&6%5A46gy;zF3o*{l(BMBtLc9B?Vo
zI7riEvIw8?Ze1>`yf5pMzoDKx-%_g&2}A&d-k`jKQcBEro*MioE?VDS+Yxs0146Sq
EW|(wDi2wiq

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/d7/149d98e6da25303f9a8cdff131da4b0723a412 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/d7/149d98e6da25303f9a8cdff131da4b0723a412
new file mode 100644
index 0000000000000000000000000000000000000000..9fcee8fcd7e1571c6bf065db0ba746bb5a1e1c72
GIT binary patch
literal 147
zcmV;E0Brww0gaA33IZ_@K&^9%^ny&XGh+rsgst`%`AkqSW?3S7eD?@8uXw!T<=)z3
zSSN58o2tbWJeADob7D;rfk6pV4TZ&rP?IVOpjqRluVKOa^F&i2R^n1cr3w=5gcLaI
zIYyTwWfR}y-Zwih_A)Ow{l>OF^^|+NTF2}hqfBUz4gkz<_o<<O=4O1l`2i4wIW**7
BL)-uW

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/f4/2b6ab94e265acf87a9b3bf8cfa1105fcad57b2 b/test/integration_new/branch/rebase/expected/repo/.git_keep/objects/f4/2b6ab94e265acf87a9b3bf8cfa1105fcad57b2
new file mode 100644
index 0000000000000000000000000000000000000000..b625df309a1c523b3994d58dd61d789579c4e0b0
GIT binary patch
literal 154
zcmV;L0A>Gp0gcW}3c@fDfMM4;MfQTs<S|J=MChu=NGB63*atC!$G1mt`|~Y+-j?Or
zHKugxO+;h0)>Lvlfn}hC)+Nl<02c=VeGGx7;=S5)leOz9nougF5U~KcSc$l#3|K)J
za`DBX5d@V#ecqZLMtvQ|yL|JqzvRN(a??nJNG@5Y&j<kOsK->7Ke?*U_U@YJygo$z
I0CvSYX@NRS+yDRo

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/first-change-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/first-change-branch
new file mode 100644
index 000000000..4867226ea
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/first-change-branch
@@ -0,0 +1 @@
+5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/original-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/original-branch
new file mode 100644
index 000000000..8b9bdc87a
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/original-branch
@@ -0,0 +1 @@
+b827df09781d0648f66cd9a01f0ec0ad5d412e10
diff --git a/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/second-change-branch b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/second-change-branch
new file mode 100644
index 000000000..4867226ea
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/.git_keep/refs/heads/second-change-branch
@@ -0,0 +1 @@
+5513fcfcb56cc5f1de7b6b3ded32a945e94f5e37
diff --git a/test/integration_new/branch/rebase/expected/repo/file b/test/integration_new/branch/rebase/expected/repo/file
new file mode 100644
index 000000000..164a07af1
--- /dev/null
+++ b/test/integration_new/branch/rebase/expected/repo/file
@@ -0,0 +1,6 @@
+
+This
+Is
+The
+Second Change
+File
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..e2e92c427
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+to keep
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/FETCH_HEAD
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/HEAD b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..e1c7bf8c5
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/first-change-branch
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..27e5d1433
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+39129f24587bdc648e1fdb6f0b089c0846f54d45
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/config b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/config
new file mode 100644
index 000000000..8a748ce32
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/config
@@ -0,0 +1,12 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
+	precomposeunicode = true
+[user]
+	email = CI@example.com
+	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/description b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/description
new file mode 100644
index 000000000..498b267a8
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/index b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..44eb0c68b991165858fd0e4ca52e5785721eaa11
GIT binary patch
literal 212
zcmZ?q402{*U|<4b#$@Ki5S}*EH!zx!fq|9zQ&AKHL*o*l^jDx75g=9&^I~5w`r=>o
zgQF*t?(X3JbE^La3j<49W=<+l76?LuTwQ?_8-uQ)f&o{MYbeNuFtEI#fq|Kc2?HwS
zBj&EydGWT%>GYjbEQ^Ae6!X+>Vza|)jX`lY?=6d)DXX6yvPfh8X)r5w`VK`CQ_e(_
RQ>-ssKEK>M^X)eo0RXP^MzjC`

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/info/exclude b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/info/exclude
new file mode 100644
index 000000000..8e9f2071f
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/info/exclude
@@ -0,0 +1,7 @@
+# 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_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/HEAD b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..a0a6f7fe5
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,16 @@
+0000000000000000000000000000000000000000 ab5816052b05d45683d9fd3aa85203995b66cd65 CI <CI@example.com> 1661165903 +1000	commit (initial): one
+ab5816052b05d45683d9fd3aa85203995b66cd65 9d068e4adf5b237e3f3abe9ce38cfd996cce75dc CI <CI@example.com> 1661165903 +1000	commit: two
+9d068e4adf5b237e3f3abe9ce38cfd996cce75dc 7c0af051757503c84800076fd34851ea8b81e415 CI <CI@example.com> 1661165903 +1000	commit: three
+7c0af051757503c84800076fd34851ea8b81e415 c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	commit: original
+c066f8c513a34cd0c63e54c3b418a50491686cff c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	checkout: moving from original-branch to first-change-branch
+c066f8c513a34cd0c63e54c3b418a50491686cff 5587edfe46cfc076fb9ff4db76d196965838669a CI <CI@example.com> 1661165904 +1000	commit: first change
+5587edfe46cfc076fb9ff4db76d196965838669a c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	checkout: moving from first-change-branch to original-branch
+c066f8c513a34cd0c63e54c3b418a50491686cff c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	checkout: moving from original-branch to second-change-branch
+c066f8c513a34cd0c63e54c3b418a50491686cff 3fc37a0e51435e01769aa25e6fe7179add2642a6 CI <CI@example.com> 1661165904 +1000	commit: second change
+3fc37a0e51435e01769aa25e6fe7179add2642a6 3228c73cfc742264f3101966a81d6a0a70488e36 CI <CI@example.com> 1661165904 +1000	commit: second-change-branch unrelated change
+3228c73cfc742264f3101966a81d6a0a70488e36 5587edfe46cfc076fb9ff4db76d196965838669a CI <CI@example.com> 1661165904 +1000	checkout: moving from second-change-branch to first-change-branch
+5587edfe46cfc076fb9ff4db76d196965838669a b56a14235fe8b10e5cca38d8b8009899d60b6499 CI <CI@example.com> 1661165904 +1000	commit: to drop
+b56a14235fe8b10e5cca38d8b8009899d60b6499 39129f24587bdc648e1fdb6f0b089c0846f54d45 CI <CI@example.com> 1661165904 +1000	commit: to keep
+39129f24587bdc648e1fdb6f0b089c0846f54d45 3228c73cfc742264f3101966a81d6a0a70488e36 CI <CI@example.com> 1661165905 +1000	rebase (start): checkout second-change-branch
+3228c73cfc742264f3101966a81d6a0a70488e36 99a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 CI <CI@example.com> 1661165908 +1000	rebase (continue) (pick): to keep
+99a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 99a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 CI <CI@example.com> 1661165908 +1000	rebase (continue) (finish): returning to refs/heads/first-change-branch
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/first-change-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/first-change-branch
new file mode 100644
index 000000000..46db32f0e
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/first-change-branch
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	branch: Created from HEAD
+c066f8c513a34cd0c63e54c3b418a50491686cff 5587edfe46cfc076fb9ff4db76d196965838669a CI <CI@example.com> 1661165904 +1000	commit: first change
+5587edfe46cfc076fb9ff4db76d196965838669a b56a14235fe8b10e5cca38d8b8009899d60b6499 CI <CI@example.com> 1661165904 +1000	commit: to drop
+b56a14235fe8b10e5cca38d8b8009899d60b6499 39129f24587bdc648e1fdb6f0b089c0846f54d45 CI <CI@example.com> 1661165904 +1000	commit: to keep
+39129f24587bdc648e1fdb6f0b089c0846f54d45 99a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 CI <CI@example.com> 1661165908 +1000	rebase (continue) (finish): refs/heads/first-change-branch onto 3228c73cfc742264f3101966a81d6a0a70488e36
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/original-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/original-branch
new file mode 100644
index 000000000..5999618a9
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/original-branch
@@ -0,0 +1,4 @@
+0000000000000000000000000000000000000000 ab5816052b05d45683d9fd3aa85203995b66cd65 CI <CI@example.com> 1661165903 +1000	commit (initial): one
+ab5816052b05d45683d9fd3aa85203995b66cd65 9d068e4adf5b237e3f3abe9ce38cfd996cce75dc CI <CI@example.com> 1661165903 +1000	commit: two
+9d068e4adf5b237e3f3abe9ce38cfd996cce75dc 7c0af051757503c84800076fd34851ea8b81e415 CI <CI@example.com> 1661165903 +1000	commit: three
+7c0af051757503c84800076fd34851ea8b81e415 c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	commit: original
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/second-change-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/second-change-branch
new file mode 100644
index 000000000..e0b0742a8
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/logs/refs/heads/second-change-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 c066f8c513a34cd0c63e54c3b418a50491686cff CI <CI@example.com> 1661165904 +1000	branch: Created from HEAD
+c066f8c513a34cd0c63e54c3b418a50491686cff 3fc37a0e51435e01769aa25e6fe7179add2642a6 CI <CI@example.com> 1661165904 +1000	commit: second change
+3fc37a0e51435e01769aa25e6fe7179add2642a6 3228c73cfc742264f3101966a81d6a0a70488e36 CI <CI@example.com> 1661165904 +1000	commit: second-change-branch unrelated change
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
new file mode 100644
index 0000000000000000000000000000000000000000..bd9b135ac92b2dd8c84e8ee930f3abbad446dcdc
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5Rp4_{y#B98@n4!3t51IS?!mv}RsY$z8MvYa
Fi~z+L6c_*i

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
new file mode 100644
index 0000000000000000000000000000000000000000..a893c25632075cb033b35ab97b00bb966d383053
GIT binary patch
literal 48
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^@Ct>_?tZyx1W^!I;T0!)zPP`GRvIt8v}0&
E0IOXS3jhEB

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
new file mode 100644
index 0000000000000000000000000000000000000000..3f0746de578045d05bc0ab70eedb0910b69841be
GIT binary patch
literal 46
zcmV+}0MY+=0ZYosPf{>8V&DqN$SmgaEC$l4T*0Zy`FSY{&KZe$>8V_9nK`Lk0P)uh
E7zjcZDF6Tf

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
new file mode 100644
index 0000000000000000000000000000000000000000..8cded6c81b47e88b26c954bb22ad356788258752
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5bwgBgz@4+zryr%AdX?U;b7@As)EO^U2F6~#
FjR3)m6SV*U

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/32/28c73cfc742264f3101966a81d6a0a70488e36 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/32/28c73cfc742264f3101966a81d6a0a70488e36
new file mode 100644
index 0000000000000000000000000000000000000000..04f11b074c531a79b34bf2078d7422fe8bf142bb
GIT binary patch
literal 167
zcmV;Y09gNc0gaA93c@fD06pgwdzZ>4Z8i;v2%h?kO|r3qO-qd6^DX!RuQPL)xGu}1
zfic6ORS`gRVv-v(JBPve?8huLCZrJTm|X}xqjp|xT%|PVbL<_XSUvPsc0-=oSfMO#
z&p0JRgJDwqZu45<Ho^HeUFE~e_LNgxmkVejt;u>E;HVK%?R1}N@@KAI64#QtICHs6
V7b=%H!@E>@a+3r<uD(jzMRFPKPW}J@

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/39/129f24587bdc648e1fdb6f0b089c0846f54d45 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/39/129f24587bdc648e1fdb6f0b089c0846f54d45
new file mode 100644
index 000000000..9b16182c2
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/39/129f24587bdc648e1fdb6f0b089c0846f54d45
@@ -0,0 +1,2 @@
+x��M
+1@a�=E��$�6Ӏ��j�џEk����w����-^�=����T���Se�ڌ,d�P���p&�S�ެq����9��������
%��(A�0&v"&~ƽop[�|[���m}�)�vb&b/��H�h��O
����᩺�.|9
\ No newline at end of file
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
new file mode 100644
index 0000000000000000000000000000000000000000..1f72f9aeea32636014d2a1fd48203d51ca973040
GIT binary patch
literal 43
zcmV+`0M!3@0ZYosPf{>8WZ(+P$SmgaEC$l4TyB{~#U%>P8Hsu6AWlvy7Xam63&W%1
B5^Dee

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3f/c37a0e51435e01769aa25e6fe7179add2642a6 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/3f/c37a0e51435e01769aa25e6fe7179add2642a6
new file mode 100644
index 0000000000000000000000000000000000000000..91a3f59305cb4fec0824d5d4afbef89b41f1630f
GIT binary patch
literal 154
zcmV;L0A>Gp0gcW<3c@fDKvCB@MfQTsG|40Z5uvLdBbiLBV4G4Sczk;Vx1YE8+?M6p
z^#E|{yNCwxG87+b@*eUKYYbH=6rh}4s6J<t0DV+j+GXvUfv5&{Xp*s9fXRrnY_i3W
z9N35yh-+2p)91G9anjduy302$+e<FomYYT*L~;?VJ|h6AqaIUT{^aT{+}5IbPU}O|
I4<tK0S+cZAlK=n!

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
new file mode 100644
index 0000000000000000000000000000000000000000..9d9452bdd10687443ef9d15b5a5b6f535d97c7c6
GIT binary patch
literal 41
zcmV+^0M`F_0ZYosPf{>4XW$CS$SmgaEC$l4T>eFw>6v+nIb3d;IjLL#xmpU3me3P0

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/55/87edfe46cfc076fb9ff4db76d196965838669a b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/55/87edfe46cfc076fb9ff4db76d196965838669a
new file mode 100644
index 000000000..b4c454a68
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/55/87edfe46cfc076fb9ff4db76d196965838669a
@@ -0,0 +1,2 @@
+x��K
+�0@]��2�I�	�]��tb�!F���n���}]��b��ZT-f�.��	H�#���r2;�ч��i����Vms8�H��� L���0$-����I�������]�i=^z�}�YdFd��3�i�MU�S7�Y�meI�C�a�;:
\ No newline at end of file
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7b/e86fe92edea93469924da2c241943adddd27cc b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7b/e86fe92edea93469924da2c241943adddd27cc
new file mode 100644
index 0000000000000000000000000000000000000000..125e024fab9dc20ad4b148addfcb48a014ce8fda
GIT binary patch
literal 85
zcmV-b0IL6Z0ZYosPg1ZnXW$CS$SmgaEC$l4Ts9D(;Nj}%!WEpFoS&DX;GB_|m!8UH
r3jthinMK7VFhM&AP%t&MFi%ZMQ_x5Q%O-=hXad#dq;dfO7{nek|7|9q

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7c/0af051757503c84800076fd34851ea8b81e415 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/7c/0af051757503c84800076fd34851ea8b81e415
new file mode 100644
index 0000000000000000000000000000000000000000..4b6d35f7f04de784048a4a7d1a464ac90e09f1f8
GIT binary patch
literal 147
zcmV;E0Brww0gaAJ3c@fDKwak)*$XoHO*2qL=&Hv^CKD<cTS^3vZ;s&h@pwGmTYGkG
z$X@y>qJ54w6h?13qhv~eAi?Jv3zChoW)V-|)saqlcTEK_ich76Y~3WTx|D@jT;y7a
zkXfb?RO!>V{nX2<=Vg7!H?`v>H{RP_8$@F;5IB7`0H6jPQ(gYlRo}+C`T-MdI}hc-
BLni<L

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/99/a7ae4f26f9e76d96e97a8acd47bf9f22dcea12 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/99/a7ae4f26f9e76d96e97a8acd47bf9f22dcea12
new file mode 100644
index 0000000000000000000000000000000000000000..a95baa6264684c6ed32b8a896f8c89cddc90d383
GIT binary patch
literal 152
zcmV;J0B8Sr0fo-73c@fDfMMr6MRq~%lJxEZB0{G=Mv`7ow5F5@KE55?U4OpeFKt=w
z-C_)fzNuOORyVWM#0=TR8l@`943zUAm2>t9kfT}Crmt?jb5husS~xgIp?U<2L`iU_
z1c@Pts3()&{nj=+PWC)bSN)`Aed?*S<zkTtk%kDt9uWY{UiYc4f4Ka(>CHY=SMvpI
G&pA=4j7m@d

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/9d/068e4adf5b237e3f3abe9ce38cfd996cce75dc b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/9d/068e4adf5b237e3f3abe9ce38cfd996cce75dc
new file mode 100644
index 0000000000000000000000000000000000000000..1e6785cfe1fcb7890e27f7088bf73579ccb823b4
GIT binary patch
literal 146
zcmV;D0B!$x0gcX03c@fDKw;N8MfQSBerCvk6rrmgBa=)~Fs77<9^W3p?c-a#(p!5B
z>ljXBSG7@+$66@*BBa6@2o$5NsS^8?R#A-%(QJ9w*RWYIIRf+oSR+yjmDd__PUs;p
zqY#x!X!3j9`)=pOUgzbe-`uvRUP^D1bwth)G6Z{e0AP-KObz{$oAK%92hyuJjWU=;
Ai~s-t

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/ab/5816052b05d45683d9fd3aa85203995b66cd65 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/ab/5816052b05d45683d9fd3aa85203995b66cd65
new file mode 100644
index 0000000000000000000000000000000000000000..00050c536340577500754ddf7c70a70f7f15d348
GIT binary patch
literal 117
zcmV-*0E+*30gcT;3c@fDMq$@E#q0%{iIX7#5uvLdBT4_FV2qRq9^W3p?c;-2duxwD
zqW&;8fV4y(mTKy2F_e_q7(vS#7fU|IwE&t}UH*)F-)NfYGR-%9b9+B=s=ZxF%tS0C
XKGRW{+3j_o4E)Jmf5H6#f0ip&BqcW9

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/b5/6a14235fe8b10e5cca38d8b8009899d60b6499 b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/b5/6a14235fe8b10e5cca38d8b8009899d60b6499
new file mode 100644
index 0000000000000000000000000000000000000000..11da58d508b854e3f76fefb8c9b78a82cc71636c
GIT binary patch
literal 149
zcmV;G0BZku0gcX03c@fDKw;N8MfQTsG|8j`B0^U^Mt){cu%?6v9^W3p?Z;cZ(zfk6
zEV4h1E@Dxgo0NRX;0h3<^NdL+DAhy6Fvm!_hG6#8<vnaTM5>CXq6H#pW>sHvq>4;T
zVRkbSCzC$o(Yjq$dtKJMeABkS<Wkypvq*$Ufx+7|0)RR6m>TkDZbq}Ux83{za%?%K
DRE9_t

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/c0/66f8c513a34cd0c63e54c3b418a50491686cff b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/objects/c0/66f8c513a34cd0c63e54c3b418a50491686cff
new file mode 100644
index 0000000000000000000000000000000000000000..750122d3f3fb61a249aaabf5e223b3af4e52cdbd
GIT binary patch
literal 151
zcmV;I0BHYs0gaA93d0}}MZ5MC?h9omanylQ3R&eCY9?(U#vm4Y{Cb4$K9Bd{r;_v5
zG%{UU714;WSb@mKCSEvlBrzrpeS6D;@IYy_KB+TQIhu9}!U}|r9Ko2p@c`iLx{SsX
zO7PL67$g-w?Om##W__RLr+h;`ce$mK9~!Miw8UWa6??8a?WdajsjE`A*LH+m{Qz%E
FIiiIdNQeLc

literal 0
HcmV?d00001

diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/first-change-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/first-change-branch
new file mode 100644
index 000000000..c61dc9511
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/first-change-branch
@@ -0,0 +1 @@
+99a7ae4f26f9e76d96e97a8acd47bf9f22dcea12
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/original-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/original-branch
new file mode 100644
index 000000000..383cec079
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/original-branch
@@ -0,0 +1 @@
+c066f8c513a34cd0c63e54c3b418a50491686cff
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/second-change-branch b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/second-change-branch
new file mode 100644
index 000000000..de415434a
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/.git_keep/refs/heads/second-change-branch
@@ -0,0 +1 @@
+3228c73cfc742264f3101966a81d6a0a70488e36
diff --git a/test/integration_new/branch/rebase_and_drop/expected/repo/file b/test/integration_new/branch/rebase_and_drop/expected/repo/file
new file mode 100644
index 000000000..164a07af1
--- /dev/null
+++ b/test/integration_new/branch/rebase_and_drop/expected/repo/file
@@ -0,0 +1,6 @@
+
+This
+Is
+The
+Second Change
+File

From 3232f46a8bbaa5dde12ceea55fabaddff4054172 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= <luka.markusic@microblink.com>
Date: Mon, 12 Sep 2022 17:18:42 +0200
Subject: [PATCH 10/44] Validate --path argument when starting lazygit

---
 pkg/app/entry_point.go | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/pkg/app/entry_point.go b/pkg/app/entry_point.go
index 5a767bb94..b355ebcca 100644
--- a/pkg/app/entry_point.go
+++ b/pkg/app/entry_point.go
@@ -57,6 +57,11 @@ func Start(buildInfo *BuildInfo, integrationTest integrationTypes.IntegrationTes
 		if err != nil {
 			log.Fatal(err)
 		}
+
+		if isRepo, err := isDirectoryAGitRepository(absRepoPath); err != nil || !isRepo {
+			log.Fatal(absRepoPath + " is not a valid git repository.")
+		}
+
 		cliArgs.WorkTree = absRepoPath
 		cliArgs.GitDir = filepath.Join(absRepoPath, ".git")
 	}

From fecf2ab810b1cb02f69b77adf0924fb29add6c5a Mon Sep 17 00:00:00 2001
From: Takao <k.takao@neogenia.co.jp>
Date: Thu, 15 Sep 2022 00:15:50 +0900
Subject: [PATCH 11/44] fix: how to change the config dir for MacOS

---
 docs/Config.md | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/docs/Config.md b/docs/Config.md
index 666e465ec..87ed70eed 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -12,6 +12,10 @@ For old installations (slightly embarrassing: I didn't realise at the time that
 - MacOS: `~/Library/Application Support/jesseduffield/lazygit/config.yml`
 - Windows: `%APPDATA%\jesseduffield\lazygit\config.yml`
 
+If you want to change the config directory:
+
+- MacOS: `export XDG_CONFIG_HOME="$HOME/.config"`
+
 ## Default
 
 ```yaml

From 7af7af27c6252b862989d11f930787e5b370b119 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Fri, 9 Sep 2022 21:11:05 -0700
Subject: [PATCH 12/44] various changes to improve integration tests

---
 go.mod                                        |   8 +-
 go.sum                                        |  16 +-
 pkg/gui/gui.go                                |   4 +-
 pkg/integration/clients/go_test.go            |  19 +-
 pkg/integration/components/assert.go          |   9 +-
 pkg/integration/components/input.go           |  76 +-
 pkg/integration/components/runner.go          |  23 +-
 pkg/integration/components/shell.go           |  21 +-
 pkg/integration/components/snapshot.go        |   2 +-
 pkg/integration/components/test.go            |   2 +-
 pkg/integration/components/test_test.go       |   4 +
 pkg/integration/deprecated/go_test.go         |  18 +-
 pkg/integration/deprecated/integration.go     |   2 +-
 pkg/integration/tests/branch/rebase.go        |   2 +
 .../tests/branch/rebase_and_drop.go           |  11 +-
 vendor/github.com/gdamore/tcell/v2/README.md  |   9 +-
 vendor/github.com/jesseduffield/gocui/gui.go  |  19 +-
 .../jesseduffield/gocui/tcell_driver.go       |   4 +
 vendor/github.com/jesseduffield/gocui/view.go |   3 +
 vendor/github.com/rivo/uniseg/README.md       |  16 +-
 vendor/github.com/rivo/uniseg/doc.go          |  77 +-
 .../github.com/rivo/uniseg/eastasianwidth.go  |   5 +-
 .../rivo/uniseg/emojipresentation.go          | 285 +++++++
 .../github.com/rivo/uniseg/gen_properties.go  | 122 +--
 vendor/github.com/rivo/uniseg/grapheme.go     | 136 ++-
 .../rivo/uniseg/graphemeproperties.go         |   2 +-
 .../github.com/rivo/uniseg/graphemerules.go   |  37 +-
 vendor/github.com/rivo/uniseg/line.go         |   8 +-
 .../github.com/rivo/uniseg/lineproperties.go  |   5 +-
 vendor/github.com/rivo/uniseg/properties.go   |  13 +-
 .../rivo/uniseg/sentenceproperties.go         |   5 +-
 vendor/github.com/rivo/uniseg/step.go         | 112 ++-
 vendor/github.com/rivo/uniseg/width.go        |  54 ++
 .../github.com/rivo/uniseg/wordproperties.go  |   4 +-
 vendor/golang.org/x/sys/cpu/cpu_arm64.go      |   5 +-
 vendor/golang.org/x/sys/plan9/syscall.go      |  10 +-
 vendor/golang.org/x/sys/unix/ioctl_linux.go   |  20 +-
 vendor/golang.org/x/sys/unix/mkall.sh         |   9 +-
 vendor/golang.org/x/sys/unix/str.go           |  27 -
 vendor/golang.org/x/sys/unix/syscall.go       |  10 +-
 .../x/sys/unix/syscall_darwin.1_12.go         |  32 -
 .../x/sys/unix/syscall_darwin.1_13.go         | 108 ---
 .../golang.org/x/sys/unix/syscall_darwin.go   |  90 ++
 .../x/sys/unix/syscall_freebsd_386.go         |   2 +-
 .../x/sys/unix/syscall_freebsd_amd64.go       |   2 +-
 .../x/sys/unix/syscall_freebsd_arm.go         |   2 +-
 .../x/sys/unix/syscall_freebsd_arm64.go       |   2 +-
 .../x/sys/unix/syscall_freebsd_riscv64.go     |   2 +-
 vendor/golang.org/x/sys/unix/syscall_linux.go |  30 +-
 .../x/sys/unix/syscall_linux_386.go           |   4 -
 .../x/sys/unix/syscall_linux_amd64.go         |   4 -
 .../x/sys/unix/syscall_linux_arm.go           |   4 -
 .../x/sys/unix/syscall_linux_arm64.go         |   4 -
 .../x/sys/unix/syscall_linux_loong64.go       |   4 -
 .../x/sys/unix/syscall_linux_mips64x.go       |   4 -
 .../x/sys/unix/syscall_linux_mipsx.go         |   4 -
 .../x/sys/unix/syscall_linux_ppc.go           |   4 -
 .../x/sys/unix/syscall_linux_ppc64x.go        |   4 -
 .../x/sys/unix/syscall_linux_riscv64.go       |   4 -
 .../x/sys/unix/syscall_linux_s390x.go         |   4 -
 .../x/sys/unix/syscall_linux_sparc64.go       |   4 -
 .../x/sys/unix/syscall_openbsd_libc.go        |   4 +-
 .../golang.org/x/sys/unix/syscall_solaris.go  | 111 ++-
 vendor/golang.org/x/sys/unix/syscall_unix.go  |   8 +-
 vendor/golang.org/x/sys/unix/sysvshm_unix.go  |  13 +-
 vendor/golang.org/x/sys/unix/xattr_bsd.go     |  95 ++-
 .../x/sys/unix/zsyscall_darwin_amd64.1_13.go  |  40 -
 .../x/sys/unix/zsyscall_darwin_amd64.1_13.s   |  25 -
 .../x/sys/unix/zsyscall_darwin_amd64.go       |  32 +-
 .../x/sys/unix/zsyscall_darwin_amd64.s        |  21 +-
 .../x/sys/unix/zsyscall_darwin_arm64.1_13.go  |  40 -
 .../x/sys/unix/zsyscall_darwin_arm64.1_13.s   |  25 -
 .../x/sys/unix/zsyscall_darwin_arm64.go       |  32 +-
 .../x/sys/unix/zsyscall_darwin_arm64.s        |  21 +-
 .../x/sys/unix/zsyscall_linux_386.go          |  40 -
 .../x/sys/unix/zsyscall_linux_amd64.go        |  40 -
 .../x/sys/unix/zsyscall_linux_arm.go          |  40 -
 .../x/sys/unix/zsyscall_linux_arm64.go        |  40 -
 .../x/sys/unix/zsyscall_linux_loong64.go      |  40 -
 .../x/sys/unix/zsyscall_linux_mips.go         |  40 -
 .../x/sys/unix/zsyscall_linux_mips64.go       |  40 -
 .../x/sys/unix/zsyscall_linux_mips64le.go     |  40 -
 .../x/sys/unix/zsyscall_linux_mipsle.go       |  40 -
 .../x/sys/unix/zsyscall_linux_ppc.go          |  40 -
 .../x/sys/unix/zsyscall_linux_ppc64.go        |  40 -
 .../x/sys/unix/zsyscall_linux_ppc64le.go      |  40 -
 .../x/sys/unix/zsyscall_linux_riscv64.go      |  40 -
 .../x/sys/unix/zsyscall_linux_s390x.go        |  40 -
 .../x/sys/unix/zsyscall_linux_sparc64.go      |  40 -
 .../x/sys/unix/zsyscall_openbsd_arm.go        | 798 +++++++++++++++---
 .../x/sys/unix/zsyscall_openbsd_arm.s         | 796 +++++++++++++++++
 .../x/sys/unix/zsysnum_openbsd_arm.go         |   1 +
 .../x/sys/unix/ztypes_freebsd_386.go          |  17 +-
 .../x/sys/unix/ztypes_freebsd_amd64.go        |  18 +-
 .../x/sys/unix/ztypes_freebsd_arm.go          |  18 +-
 .../x/sys/unix/ztypes_freebsd_arm64.go        |  18 +-
 .../x/sys/unix/ztypes_freebsd_riscv64.go      |  18 +-
 .../x/sys/windows/setupapi_windows.go         |   2 +-
 vendor/golang.org/x/sys/windows/syscall.go    |  10 +-
 .../x/sys/windows/syscall_windows.go          |  17 +-
 .../golang.org/x/sys/windows/types_windows.go |  19 +
 .../x/sys/windows/zsyscall_windows.go         |  69 ++
 vendor/modules.txt                            |   8 +-
 103 files changed, 2883 insertions(+), 1525 deletions(-)
 create mode 100644 vendor/github.com/rivo/uniseg/emojipresentation.go
 create mode 100644 vendor/github.com/rivo/uniseg/width.go
 delete mode 100644 vendor/golang.org/x/sys/unix/str.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
 delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
 delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
 create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s

diff --git a/go.mod b/go.mod
index 56210e80b..976225865 100644
--- a/go.mod
+++ b/go.mod
@@ -11,14 +11,14 @@ require (
 	github.com/creack/pty v1.1.11
 	github.com/fsmiamoto/git-todo-parser v0.0.2
 	github.com/fsnotify/fsnotify v1.4.7
-	github.com/gdamore/tcell/v2 v2.5.2
+	github.com/gdamore/tcell/v2 v2.5.3
 	github.com/go-errors/errors v1.4.2
 	github.com/gookit/color v1.4.2
 	github.com/imdario/mergo v0.3.11
 	github.com/integrii/flaggy v1.4.0
 	github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
 	github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4
-	github.com/jesseduffield/gocui v0.3.1-0.20220815095708-156fda5e0419
+	github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6
 	github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
 	github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e
 	github.com/jesseduffield/yaml v2.1.0+incompatible
@@ -61,13 +61,13 @@ require (
 	github.com/onsi/ginkgo v1.10.3 // indirect
 	github.com/onsi/gomega v1.7.1 // indirect
 	github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
-	github.com/rivo/uniseg v0.3.4 // indirect
+	github.com/rivo/uniseg v0.4.2 // indirect
 	github.com/sergi/go-diff v1.1.0 // indirect
 	github.com/xanzy/ssh-agent v0.2.1 // indirect
 	golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
 	golang.org/x/exp v0.0.0-20220318154914-8dddf5d87bd8 // indirect
 	golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect
-	golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
+	golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 // indirect
 	golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
 	golang.org/x/text v0.3.7 // indirect
 	gopkg.in/warnings.v0 v0.1.2 // indirect
diff --git a/go.sum b/go.sum
index e2084d6a9..ebb3b202b 100644
--- a/go.sum
+++ b/go.sum
@@ -35,8 +35,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
 github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
 github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
 github.com/gdamore/tcell/v2 v2.4.0/go.mod h1:cTTuF84Dlj/RqmaCIV5p4w8uG1zWdk0SF6oBpwHp4fU=
-github.com/gdamore/tcell/v2 v2.5.2 h1:tKzG29kO9p2V++3oBY2W9zUjYu7IK1MENFeY/BzJSVY=
-github.com/gdamore/tcell/v2 v2.5.2/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo=
+github.com/gdamore/tcell/v2 v2.5.3 h1:b9XQrT6QGbgI7JvZOJXFNczOQeIYbo8BfeSMzt2sAV0=
+github.com/gdamore/tcell/v2 v2.5.3/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo=
 github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
 github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
 github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
@@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
-github.com/jesseduffield/gocui v0.3.1-0.20220815095708-156fda5e0419 h1:p3Ix7RUcy4X16Lk5jTSfTxecJT7ryqYHclfRbo/Svzs=
-github.com/jesseduffield/gocui v0.3.1-0.20220815095708-156fda5e0419/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
+github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6 h1:FgxhH7++BaLcDwldyNtxkeVUC2z7ur2QYtJ8Msgkgc0=
+github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e h1:uw/oo+kg7t/oeMs6sqlAwr85ND/9cpO3up3VxphxY0U=
@@ -134,8 +134,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.3.4 h1:3Z3Eu6FGHZWSfNKJTOUiPatWwfc7DzJRU04jFUqJODw=
-github.com/rivo/uniseg v0.3.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8=
+github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI=
 github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
 github.com/samber/lo v1.10.1 h1:0D3h7i0U3hRAbaCeQ82DLe67n0A7Bbl0/cEoWqFGp+U=
@@ -194,8 +194,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 h1:ohgcoMbSofXygzo6AD2I1kz3BFmW1QArPYTtwEM3UXc=
+golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
 golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index 8be5a4a4d..5420ac9fa 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -494,8 +494,6 @@ func (gui *Gui) Run(startArgs appTypes.StartArgs) error {
 	})
 	deadlock.Opts.Disable = !gui.Debug
 
-	gui.handleTestMode(startArgs.IntegrationTest)
-
 	gui.g.OnSearchEscape = gui.onSearchEscape
 	if err := gui.Config.ReloadUserConfig(); err != nil {
 		return nil
@@ -552,6 +550,8 @@ func (gui *Gui) Run(startArgs appTypes.StartArgs) error {
 
 	gui.c.Log.Info("starting main loop")
 
+	gui.handleTestMode(startArgs.IntegrationTest)
+
 	return gui.g.MainLoop()
 }
 
diff --git a/pkg/integration/clients/go_test.go b/pkg/integration/clients/go_test.go
index 9fceecd40..a14b1f254 100644
--- a/pkg/integration/clients/go_test.go
+++ b/pkg/integration/clients/go_test.go
@@ -7,6 +7,8 @@ package clients
 // for an example
 
 import (
+	"bytes"
+	"errors"
 	"io"
 	"io/ioutil"
 	"os"
@@ -39,6 +41,7 @@ func TestIntegration(t *testing.T) {
 			}
 
 			t.Run(test.Name(), func(t *testing.T) {
+				t.Parallel()
 				err := f()
 				assert.NoError(t, err)
 			})
@@ -57,12 +60,26 @@ func runCmdHeadless(cmd *exec.Cmd) error {
 		"TERM=xterm",
 	)
 
-	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 100, Cols: 100})
+	// not writing stderr to the pty because we want to capture a panic if
+	// there is one. But some commands will not be in tty mode if stderr is
+	// not a terminal. We'll need to keep an eye out for that.
+	stderr := new(bytes.Buffer)
+	cmd.Stderr = stderr
+
+	// these rows and columns are ignored because internally we use tcell's
+	// simulation screen. However we still need the pty for the sake of
+	// running other commands in a pty.
+	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 300, Cols: 300})
 	if err != nil {
 		return err
 	}
 
 	_, _ = io.Copy(ioutil.Discard, f)
 
+	if cmd.Wait() != nil {
+		// return an error with the stderr output
+		return errors.New(stderr.String())
+	}
+
 	return f.Close()
 }
diff --git a/pkg/integration/components/assert.go b/pkg/integration/components/assert.go
index 4b56a76e7..28be134a6 100644
--- a/pkg/integration/components/assert.go
+++ b/pkg/integration/components/assert.go
@@ -111,6 +111,13 @@ func (self *Assert) CurrentViewName(expectedViewName string) {
 	})
 }
 
+func (self *Assert) CurrentWindowName(expectedWindowName string) {
+	self.assertWithRetries(func() (bool, string) {
+		actual := self.gui.CurrentContext().GetView().Name()
+		return actual == expectedWindowName, fmt.Sprintf("Expected current window name to be '%s', but got '%s'", expectedWindowName, actual)
+	})
+}
+
 func (self *Assert) CurrentBranchName(expectedViewName string) {
 	self.assertWithRetries(func() (bool, string) {
 		actual := self.gui.CheckedOutRef().Name
@@ -210,7 +217,7 @@ func (self *Assert) matchString(matcher *matcher, context string, getValue func(
 }
 
 func (self *Assert) assertWithRetries(test func() (bool, string)) {
-	waitTimes := []int{0, 1, 5, 10, 200, 500, 1000}
+	waitTimes := []int{0, 1, 5, 10, 200, 500, 1000, 2000}
 
 	var message string
 	for _, waitTime := range waitTimes {
diff --git a/pkg/integration/components/input.go b/pkg/integration/components/input.go
index 2f0666ebc..45ffdfc5d 100644
--- a/pkg/integration/components/input.go
+++ b/pkg/integration/components/input.go
@@ -42,22 +42,27 @@ func (self *Input) pressKey(keyStr string) {
 
 func (self *Input) SwitchToStatusWindow() {
 	self.pressKey(self.keys.Universal.JumpToBlock[0])
+	self.assert.CurrentWindowName("status")
 }
 
 func (self *Input) SwitchToFilesWindow() {
 	self.pressKey(self.keys.Universal.JumpToBlock[1])
+	self.assert.CurrentWindowName("files")
 }
 
 func (self *Input) SwitchToBranchesWindow() {
 	self.pressKey(self.keys.Universal.JumpToBlock[2])
+	self.assert.CurrentWindowName("localBranches")
 }
 
 func (self *Input) SwitchToCommitsWindow() {
 	self.pressKey(self.keys.Universal.JumpToBlock[3])
+	self.assert.CurrentWindowName("commits")
 }
 
 func (self *Input) SwitchToStashWindow() {
 	self.pressKey(self.keys.Universal.JumpToBlock[4])
+	self.assert.CurrentWindowName("stash")
 }
 
 func (self *Input) Type(content string) {
@@ -132,38 +137,43 @@ func (self *Input) NavigateToListItemContainingText(text string) {
 
 	view := currentContext.GetView()
 
-	// first we look for a duplicate on the current screen. We won't bother looking beyond that though.
-	matchCount := 0
-	matchIndex := -1
-	for i, line := range view.ViewBufferLines() {
-		if strings.Contains(line, text) {
-			matchCount++
-			matchIndex = i
-		}
-	}
-	if matchCount > 1 {
-		self.assert.Fail(fmt.Sprintf("Found %d matches for %s, expected only a single match", matchCount, text))
-	}
-	if matchCount == 1 {
-		selectedLineIdx := view.SelectedLineIdx()
-		if selectedLineIdx == matchIndex {
-			self.assert.MatchSelectedLine(Contains(text))
-			return
-		}
-		if selectedLineIdx < matchIndex {
-			for i := selectedLineIdx; i < matchIndex; i++ {
-				self.NextItem()
-			}
-			self.assert.MatchSelectedLine(Contains(text))
-			return
-		} else {
-			for i := selectedLineIdx; i > matchIndex; i-- {
-				self.PreviousItem()
-			}
-			self.assert.MatchSelectedLine(Contains(text))
-			return
-		}
-	}
+	var matchIndex int
 
-	self.assert.Fail(fmt.Sprintf("Could not find item containing text: %s", text))
+	self.assert.assertWithRetries(func() (bool, string) {
+		matchCount := 0
+		matchIndex = -1
+		// first we look for a duplicate on the current screen. We won't bother looking beyond that though.
+		for i, line := range view.ViewBufferLines() {
+			if strings.Contains(line, text) {
+				matchCount++
+				matchIndex = i
+			}
+		}
+		if matchCount > 1 {
+			return false, fmt.Sprintf("Found %d matches for %s, expected only a single match", matchCount, text)
+		} else if matchCount == 0 {
+			return false, fmt.Sprintf("Could not find item containing text: %s", text)
+		} else {
+			return true, ""
+		}
+	})
+
+	selectedLineIdx := view.SelectedLineIdx()
+	if selectedLineIdx == matchIndex {
+		self.assert.MatchSelectedLine(Contains(text))
+		return
+	}
+	if selectedLineIdx < matchIndex {
+		for i := selectedLineIdx; i < matchIndex; i++ {
+			self.NextItem()
+		}
+		self.assert.MatchSelectedLine(Contains(text))
+		return
+	} else {
+		for i := selectedLineIdx; i > matchIndex; i-- {
+			self.PreviousItem()
+		}
+		self.assert.MatchSelectedLine(Contains(text))
+		return
+	}
 }
diff --git a/pkg/integration/components/runner.go b/pkg/integration/components/runner.go
index d2b31aed6..54b42de17 100644
--- a/pkg/integration/components/runner.go
+++ b/pkg/integration/components/runner.go
@@ -58,11 +58,11 @@ func RunTests(
 	for _, test := range tests {
 		test := test
 
-		paths := NewPaths(
-			filepath.Join(testDir, test.Name()),
-		)
-
 		testWrapper(test, func() error { //nolint: thelper
+			paths := NewPaths(
+				filepath.Join(testDir, test.Name()),
+			)
+
 			return runTest(test, paths, projectRootDir, logf, runCmd, mode, keyPressDelay)
 		})
 	}
@@ -126,16 +126,7 @@ func buildLazygit() error {
 }
 
 func createFixture(test *IntegrationTest, paths Paths) error {
-	originalDir, err := os.Getwd()
-	if err != nil {
-		return err
-	}
-
-	if err := os.Chdir(paths.ActualRepo()); err != nil {
-		panic(err)
-	}
-
-	shell := NewShell()
+	shell := NewShell(paths.ActualRepo())
 	shell.RunCommand("git init -b master")
 	shell.RunCommand(`git config user.email "CI@example.com"`)
 	shell.RunCommand(`git config user.name "CI"`)
@@ -143,10 +134,6 @@ func createFixture(test *IntegrationTest, paths Paths) error {
 
 	test.SetupRepo(shell)
 
-	if err := os.Chdir(originalDir); err != nil {
-		panic(err)
-	}
-
 	return nil
 }
 
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index b49921348..880e270d3 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"io/ioutil"
 	"os"
+	"path/filepath"
 
 	"github.com/jesseduffield/lazygit/pkg/secureexec"
 	"github.com/mgutz/str"
@@ -12,16 +13,20 @@ import (
 // this is for running shell commands, mostly for the sake of setting up the repo
 // but you can also run the commands from within lazygit to emulate things happening
 // in the background.
-type Shell struct{}
+type Shell struct {
+	// working directory the shell is invoked in
+	dir string
+}
 
-func NewShell() *Shell {
-	return &Shell{}
+func NewShell(dir string) *Shell {
+	return &Shell{dir: dir}
 }
 
 func (s *Shell) RunCommand(cmdStr string) *Shell {
 	args := str.ToArgv(cmdStr)
 	cmd := secureexec.Command(args[0], args[1:]...)
 	cmd.Env = os.Environ()
+	cmd.Dir = s.dir
 
 	output, err := cmd.CombinedOutput()
 	if err != nil {
@@ -32,18 +37,20 @@ func (s *Shell) RunCommand(cmdStr string) *Shell {
 }
 
 func (s *Shell) CreateFile(path string, content string) *Shell {
-	err := ioutil.WriteFile(path, []byte(content), 0o644)
+	fullPath := filepath.Join(s.dir, path)
+	err := ioutil.WriteFile(fullPath, []byte(content), 0o644)
 	if err != nil {
-		panic(fmt.Sprintf("error creating file: %s\n%s", path, err))
+		panic(fmt.Sprintf("error creating file: %s\n%s", fullPath, err))
 	}
 
 	return s
 }
 
 func (s *Shell) UpdateFile(path string, content string) *Shell {
-	err := ioutil.WriteFile(path, []byte(content), 0o644)
+	fullPath := filepath.Join(s.dir, path)
+	err := ioutil.WriteFile(fullPath, []byte(content), 0o644)
 	if err != nil {
-		panic(fmt.Sprintf("error updating file: %s\n%s", path, err))
+		panic(fmt.Sprintf("error updating file: %s\n%s", fullPath, err))
 	}
 
 	return s
diff --git a/pkg/integration/components/snapshot.go b/pkg/integration/components/snapshot.go
index b7efa0fb0..a75faf8e6 100644
--- a/pkg/integration/components/snapshot.go
+++ b/pkg/integration/components/snapshot.go
@@ -174,7 +174,7 @@ func (self *Snapshotter) compareSnapshots() error {
 			}
 			self.logf("%s", string(bytes))
 
-			return errors.New(getDiff(f.Name(), actualRepo, expectedRepo))
+			return errors.New(getDiff(f.Name(), expectedRepo, actualRepo))
 		}
 	}
 
diff --git a/pkg/integration/components/test.go b/pkg/integration/components/test.go
index 3cc6a7641..46c0d4055 100644
--- a/pkg/integration/components/test.go
+++ b/pkg/integration/components/test.go
@@ -93,7 +93,7 @@ func (self *IntegrationTest) SetupRepo(shell *Shell) {
 
 // I want access to all contexts, the model, the ability to press a key, the ability to log,
 func (self *IntegrationTest) Run(gui integrationTypes.GuiDriver) {
-	shell := NewShell()
+	shell := NewShell("/tmp/lazygit-test")
 	assert := NewAssert(gui)
 	keys := gui.Keys()
 	input := NewInput(gui, keys, assert, KeyPressDelay())
diff --git a/pkg/integration/components/test_test.go b/pkg/integration/components/test_test.go
index e180bfccb..61466e2b4 100644
--- a/pkg/integration/components/test_test.go
+++ b/pkg/integration/components/test_test.go
@@ -56,6 +56,10 @@ func (self *fakeGuiDriver) SecondaryView() *gocui.View {
 	return nil
 }
 
+func (self *fakeGuiDriver) View(viewName string) *gocui.View {
+	return nil
+}
+
 func TestAssertionFailure(t *testing.T) {
 	test := NewIntegrationTest(NewIntegrationTestArgs{
 		Description: unitTestDescription,
diff --git a/pkg/integration/deprecated/go_test.go b/pkg/integration/deprecated/go_test.go
index fbec34bd9..9b8c92a3b 100644
--- a/pkg/integration/deprecated/go_test.go
+++ b/pkg/integration/deprecated/go_test.go
@@ -4,6 +4,8 @@
 package deprecated
 
 import (
+	"bytes"
+	"errors"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -95,12 +97,26 @@ func runCmdHeadless(cmd *exec.Cmd) error {
 		"TERM=xterm",
 	)
 
-	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 100, Cols: 100})
+	// not writing stderr to the pty because we want to capture a panic if
+	// there is one. But some commands will not be in tty mode if stderr is
+	// not a terminal. We'll need to keep an eye out for that.
+	stderr := new(bytes.Buffer)
+	cmd.Stderr = stderr
+
+	// these rows and columns are ignored because internally we use tcell's
+	// simulation screen. However we still need the pty for the sake of
+	// running other commands in a pty.
+	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 300, Cols: 300})
 	if err != nil {
 		return err
 	}
 
 	_, _ = io.Copy(ioutil.Discard, f)
 
+	if cmd.Wait() != nil {
+		// return an error with the stderr output
+		return errors.New(stderr.String())
+	}
+
 	return f.Close()
 }
diff --git a/pkg/integration/deprecated/integration.go b/pkg/integration/deprecated/integration.go
index b44fdb1b2..9527d1a45 100644
--- a/pkg/integration/deprecated/integration.go
+++ b/pkg/integration/deprecated/integration.go
@@ -310,7 +310,7 @@ func getTestSpeeds(testStartSpeed float64, mode Mode, speedStr string) []float64
 	if startSpeed > 5 {
 		speeds = append(speeds, 5)
 	}
-	speeds = append(speeds, 1, 1)
+	speeds = append(speeds, 1, 0.5)
 
 	return speeds
 }
diff --git a/pkg/integration/tests/branch/rebase.go b/pkg/integration/tests/branch/rebase.go
index eda7567e7..8b414b794 100644
--- a/pkg/integration/tests/branch/rebase.go
+++ b/pkg/integration/tests/branch/rebase.go
@@ -84,9 +84,11 @@ var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
 		assert.CurrentViewName("mergeConflicts")
 		input.PrimaryAction()
 
+		assert.MatchViewContent("information", Contains("rebasing"))
 		assert.InConfirm()
 		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
 		input.Confirm()
+		assert.MatchViewContent("information", NotContains("rebasing"))
 
 		// this proves we actually have integrated the changes from second-change-branch
 		assert.MatchViewContent("commits", Contains("second-change-branch unrelated change"))
diff --git a/pkg/integration/tests/branch/rebase_and_drop.go b/pkg/integration/tests/branch/rebase_and_drop.go
index 18ffdd820..d87919a0a 100644
--- a/pkg/integration/tests/branch/rebase_and_drop.go
+++ b/pkg/integration/tests/branch/rebase_and_drop.go
@@ -13,7 +13,7 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
 	SetupRepo: func(shell *Shell) {
 		commonRebaseSetup(shell)
 		// addin a couple additional commits so that we can drop one
-		shell.EmptyCommit("to drop")
+		shell.EmptyCommit("to remove")
 		shell.EmptyCommit("to keep")
 	},
 	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
@@ -29,6 +29,8 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
 		assert.MatchCurrentViewContent(Contains("Are you sure you want to rebase 'first-change-branch' onto 'second-change-branch'?"))
 		input.Confirm()
 
+		assert.MatchViewContent("information", Contains("rebasing"))
+
 		assert.InConfirm()
 		assert.MatchCurrentViewContent(Contains("Conflicts!"))
 		input.Confirm()
@@ -37,9 +39,10 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
 		assert.MatchSelectedLine(Contains("file"))
 
 		input.SwitchToCommitsWindow()
+		assert.MatchSelectedLine(Contains("pick")) // this means it's a rebasing commit
 		input.NextItem()
 		input.PressKeys(keys.Universal.Remove)
-		assert.MatchSelectedLine(Contains("to drop"))
+		assert.MatchSelectedLine(Contains("to remove"))
 		assert.MatchSelectedLine(Contains("drop"))
 
 		input.SwitchToFilesWindow()
@@ -55,9 +58,11 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
 		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
 		input.Confirm()
 
+		assert.MatchViewContent("information", NotContains("rebasing"))
+
 		// this proves we actually have integrated the changes from second-change-branch
 		assert.MatchViewContent("commits", Contains("second-change-branch unrelated change"))
 		assert.MatchViewContent("commits", Contains("to keep"))
-		assert.MatchViewContent("commits", NotContains("to drop"))
+		assert.MatchViewContent("commits", NotContains("to remove"))
 	},
 })
diff --git a/vendor/github.com/gdamore/tcell/v2/README.md b/vendor/github.com/gdamore/tcell/v2/README.md
index e5efb98d2..78c76b6ad 100644
--- a/vendor/github.com/gdamore/tcell/v2/README.md
+++ b/vendor/github.com/gdamore/tcell/v2/README.md
@@ -1,16 +1,11 @@
-<a href="https://stand-with-ukraine.pp.ua">
-<img src="https://upload.wikimedia.org/wikipedia/commons/d/d2/Flag_of_Ukraine.png" height="20px" width="100%"/>
-</a>
-
 <img src="logos/tcell.png" style="float: right"/>
 
-Please see [here](UKRAINE.md) for an important message for the people of Russia.
-
 # Tcell
 
 _Tcell_ is a _Go_ package that provides a cell based view for text terminals, like _XTerm_.
 It was inspired by _termbox_, but includes many additional improvements.
 
+[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)
 [![Linux](https://img.shields.io/github/workflow/status/gdamore/tcell/linux?logoColor=grey&logo=linux&label=)](https://github.com/gdamore/tcell/actions/workflows/linux.yml)
 [![Windows](https://img.shields.io/github/workflow/status/gdamore/tcell/windows?logoColor=grey&logo=windows&label=)](https://github.com/gdamore/tcell/actions/workflows/windows.yml)
 [![Apache License](https://img.shields.io/github/license/gdamore/tcell.svg?logoColor=silver&logo=opensourceinitiative&color=blue&label=)](https://github.com/gdamore/tcell/blob/master/LICENSE)
@@ -18,6 +13,8 @@ It was inspired by _termbox_, but includes many additional improvements.
 [![Discord](https://img.shields.io/discord/639503822733180969?label=&logo=discord)](https://discord.gg/urTTxDN)
 [![Coverage](https://img.shields.io/codecov/c/github/gdamore/tcell?logoColor=grey&logo=codecov&label=)](https://codecov.io/gh/gdamore/tcell)
 
+Please see [here](UKRAINE.md) for an important message for the people of Russia.
+
 NOTE: This is version 2 of _Tcell_.  There are breaking changes relative to version 1.
 Version 1.x remains available using the import `github.com/gdamore/tcell`.
 
diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go
index 0c76bfee7..f02f1a93a 100644
--- a/vendor/github.com/jesseduffield/gocui/gui.go
+++ b/vendor/github.com/jesseduffield/gocui/gui.go
@@ -206,6 +206,16 @@ func NewGui(mode OutputMode, supportOverlaps bool, playMode PlayMode, headless b
 		return nil, err
 	}
 
+	if headless || runtime.GOOS == "windows" {
+		g.maxX, g.maxY = g.screen.Size()
+	} else {
+		// TODO: find out if we actually need this bespoke logic for linux
+		g.maxX, g.maxY, err = g.getTermWindowSize()
+		if err != nil {
+			return nil, err
+		}
+	}
+
 	g.outputMode = mode
 
 	g.stop = make(chan struct{})
@@ -225,15 +235,6 @@ func NewGui(mode OutputMode, supportOverlaps bool, playMode PlayMode, headless b
 		}
 	}
 
-	if runtime.GOOS != "windows" {
-		g.maxX, g.maxY, err = g.getTermWindowSize()
-		if err != nil {
-			return nil, err
-		}
-	} else {
-		g.maxX, g.maxY = Screen.Size()
-	}
-
 	g.BgColor, g.FgColor, g.FrameColor = ColorDefault, ColorDefault, ColorDefault
 	g.SelBgColor, g.SelFgColor, g.SelFrameColor = ColorDefault, ColorDefault, ColorDefault
 
diff --git a/vendor/github.com/jesseduffield/gocui/tcell_driver.go b/vendor/github.com/jesseduffield/gocui/tcell_driver.go
index 81d30fe91..ebb291f7c 100644
--- a/vendor/github.com/jesseduffield/gocui/tcell_driver.go
+++ b/vendor/github.com/jesseduffield/gocui/tcell_driver.go
@@ -84,6 +84,10 @@ func (g *Gui) tcellInitSimulation() error {
 	} else {
 		g.screen = s
 		Screen = s
+		// setting to a larger value than the typical terminal size
+		// so that during a test we're more likely to see an item to select in a view.
+		s.SetSize(100, 100)
+		s.Sync()
 		return nil
 	}
 }
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index 95c7ef4b1..ce0aa3c48 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -1245,6 +1245,9 @@ func (v *View) SelectedLineIdx() int {
 
 // expected to only be used in tests
 func (v *View) SelectedLine() string {
+	if len(v.lines) == 0 {
+		return ""
+	}
 	line := v.lines[v.SelectedLineIdx()]
 	str := lineType(line).String()
 	return strings.Replace(str, "\x00", " ", -1)
diff --git a/vendor/github.com/rivo/uniseg/README.md b/vendor/github.com/rivo/uniseg/README.md
index 89fc21a3d..7e3d12e79 100644
--- a/vendor/github.com/rivo/uniseg/README.md
+++ b/vendor/github.com/rivo/uniseg/README.md
@@ -3,13 +3,13 @@
 [![Go Reference](https://pkg.go.dev/badge/github.com/rivo/uniseg.svg)](https://pkg.go.dev/github.com/rivo/uniseg)
 [![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg)
 
-This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/) and Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 14.0.0).
+This Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](https://unicode.org/reports/tr29/), Unicode Line Breaking according to [Unicode Standard Annex #14](https://unicode.org/reports/tr14/) (Unicode version 14.0.0), and monospace font string width calculation similar to [wcwidth](https://man7.org/linux/man-pages/man3/wcwidth.3.html).
 
 ## Background
 
 ### Grapheme Clusters
 
-In Go, [strings are read-only slices of bytes](https://blog.golang.org/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples:
+In Go, [strings are read-only slices of bytes](https://go.dev/blog/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls "grapheme cluster". Here are some examples:
 
 |String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters|
 |-|-|-|-|
@@ -31,6 +31,10 @@ Sentence boundaries are often used for triple-click or some other method of sele
 
 Line breaking, also known as word wrapping, is the process of breaking a section of text into lines such that it will fit in the available width of a page, window or other display area. This package provides tools to determine where a string may or may not be broken and where it must be broken (for example after newline characters).
 
+### Monospace Width
+
+Most terminals or text displays / text editors using a monospace font (for example source code editors) use a fixed width for each character. Some characters such as emojis or characters found in Asian and other languages may take up more than one character cell. This package provides tools to determine the number of cells a string will take up when displayed in a monospace font. See [here](https://pkg.go.dev/github.com/rivo/uniseg#hdr-Monospace_Width) for more information.
+
 ## Installation
 
 ```bash
@@ -47,6 +51,14 @@ fmt.Println(n)
 // 2
 ```
 
+### Calculating the Monospace String Width
+
+```go
+width := uniseg.StringWidth("🇩🇪🏳️‍🌈!")
+fmt.Println(width)
+// 5
+```
+
 ### Using the [`Graphemes`](https://pkg.go.dev/github.com/rivo/uniseg#Graphemes) Class
 
 This is the most convenient method of iterating over grapheme clusters:
diff --git a/vendor/github.com/rivo/uniseg/doc.go b/vendor/github.com/rivo/uniseg/doc.go
index 6c498ede1..0fc2d8b43 100644
--- a/vendor/github.com/rivo/uniseg/doc.go
+++ b/vendor/github.com/rivo/uniseg/doc.go
@@ -1,8 +1,9 @@
 /*
-Package uniseg implements Unicode Text Segmentation and Unicode Line Breaking.
-Unicode Text Segmentation conforms to Unicode Standard Annex #29
-(https://unicode.org/reports/tr29/) and Unicode Line Breaking conforms to
-Unicode Standard Annex #14 (https://unicode.org/reports/tr14/).
+Package uniseg implements Unicode Text Segmentation, Unicode Line Breaking, and
+string width calculation for monospace fonts. Unicode Text Segmentation conforms
+to Unicode Standard Annex #29 (https://unicode.org/reports/tr29/) and Unicode
+Line Breaking conforms to Unicode Standard Annex #14
+(https://unicode.org/reports/tr14/).
 
 In short, using this package, you can split a string into grapheme clusters
 (what people would usually refer to as a "character"), into words, and into
@@ -12,8 +13,23 @@ as emojis, combining characters, or characters from Asian, Arabic, Hebrew, or
 other languages. Additionally, you can use it to implement line breaking (or
 "word wrapping"), that is, to determine where text can be broken over to the
 next line when the width of the line is not big enough to fit the entire text.
+Finally, you can use it to calculate the display width of a string for monospace
+fonts.
 
-Grapheme Clusters
+# Getting Started
+
+If you just want to count the number of characters in a string, you can use
+[GraphemeClusterCount]. If you want to determine the display width of a string,
+you can use [StringWidth]. If you want to iterate over a string, you can use
+[Step], [StepString], or the [Graphemes] class (more convenient but less
+performant). This will provide you with all information: grapheme clusters,
+word boundaries, sentence boundaries, line breaks, and monospace character
+widths. The specialized functions [FirstGraphemeCluster],
+[FirstGraphemeClusterInString], [FirstWord], [FirstWordInString],
+[FirstSentence], and [FirstSentenceInString] can be used if only one type of
+information is needed.
+
+# Grapheme Clusters
 
 Consider the rainbow flag emoji: 🏳️‍🌈. On most modern systems, it appears as one
 character. But its string representation actually has 14 bytes, so counting
@@ -21,11 +37,11 @@ bytes (or using len("🏳️‍🌈")) will not work as expected. Counting runes
 either: The flag has 4 Unicode code points, thus 4 runes. The stdlib function
 utf8.RuneCountInString("🏳️‍🌈") and len([]rune("🏳️‍🌈")) will both return 4.
 
-The uniseg.GraphemeClusterCount(str) function will return 1 for the rainbow flag
-emoji. The Graphemes class and a variety of functions in this package will allow
-you to split strings into its grapheme clusters.
+The [GraphemeClusterCount] function will return 1 for the rainbow flag emoji.
+The Graphemes class and a variety of functions in this package will allow you to
+split strings into its grapheme clusters.
 
-Word Boundaries
+# Word Boundaries
 
 Word boundaries are used in a number of different contexts. The most familiar
 ones are selection (double-click mouse selection), cursor movement ("move to
@@ -33,7 +49,7 @@ next word" control-arrow keys), and the dialog option "Whole Word Search" for
 search and replace. This package provides methods for determining word
 boundaries.
 
-Sentence Boundaries
+# Sentence Boundaries
 
 Sentence boundaries are often used for triple-click or some other method of
 selecting or iterating through blocks of text that are larger than single words.
@@ -41,7 +57,7 @@ They are also used to determine whether words occur within the same sentence in
 database queries. This package provides methods for determining sentence
 boundaries.
 
-Line Breaking
+# Line Breaking
 
 Line breaking, also known as word wrapping, is the process of breaking a section
 of text into lines such that it will fit in the available width of a page,
@@ -49,5 +65,44 @@ window or other display area. This package provides methods to determine the
 positions in a string where a line must be broken, may be broken, or must not be
 broken.
 
+# Monospace Width
+
+Monospace width, as referred to in this package, is the width of a string in a
+monospace font. This is commonly used in terminal user interfaces or text
+displays or editors that don't support proportional fonts. A width of 1
+corresponds to a single character cell. The C function [wcwidth()] and its
+implementation in other programming languages is in widespread use for the same
+purpose. However, there is no standard for the calculation of such widths, and
+this package differs from wcwidth() in a number of ways, presumably to generate
+more visually pleasing results.
+
+To start, we assume that every code point has a width of 1, with the following
+exceptions:
+
+  - Code points with grapheme cluster break properties Control, CR, LF, Extend,
+    and ZWJ have a width of 0.
+  - U+2E3A, Two-Em Dash, has a width of 3.
+  - U+2E3B, Three-Em Dash, has a width of 4.
+  - Characters with the East-Asian Width properties "Fullwidth" (F) and "Wide"
+    (W) have a width of 2. (Properties "Ambiguous" (A) and "Neutral" (N) both
+    have a width of 1.)
+  - Code points with grapheme cluster break property Regional Indicator have a
+    width of 2.
+  - Code points with grapheme cluster break property Extended Pictographic have
+    a width of 2, unless their Emoji Presentation flag is "No", in which case
+    the width is 1.
+
+For Hangul grapheme clusters composed of conjoining Jamo and for Regional
+Indicators (flags), all code points except the first one have a width of 0. For
+grapheme clusters starting with an Extended Pictographic, any additional code
+point will force a total width of 2, except if the Variation Selector-15
+(U+FE0E) is included, in which case the total width is always 1. Grapheme
+clusters ending with Variation Selector-16 (U+FE0F) have a width of 2.
+
+Note that whether these widths appear correct depends on your application's
+render engine, to which extent it conforms to the Unicode Standard, and its
+choice of font.
+
+[wcwidth()]: https://man7.org/linux/man-pages/man3/wcwidth.3.html
 */
 package uniseg
diff --git a/vendor/github.com/rivo/uniseg/eastasianwidth.go b/vendor/github.com/rivo/uniseg/eastasianwidth.go
index 456c1cac5..661934ac2 100644
--- a/vendor/github.com/rivo/uniseg/eastasianwidth.go
+++ b/vendor/github.com/rivo/uniseg/eastasianwidth.go
@@ -4,7 +4,10 @@ package uniseg
 
 // eastAsianWidth are taken from
 // https://www.unicode.org/Public/14.0.0/ucd/EastAsianWidth.txt
-// on July 25, 2022. See https://www.unicode.org/license.html for the Unicode
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var eastAsianWidth = [][3]int{
 	{0x0000, 0x001F, prN},     // Cc    [32] <control-0000>..<control-001F>
diff --git a/vendor/github.com/rivo/uniseg/emojipresentation.go b/vendor/github.com/rivo/uniseg/emojipresentation.go
new file mode 100644
index 000000000..fd0f7451a
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/emojipresentation.go
@@ -0,0 +1,285 @@
+package uniseg
+
+// Code generated via go generate from gen_properties.go. DO NOT EDIT.
+
+// emojiPresentation are taken from
+//
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
+// license agreement.
+var emojiPresentation = [][3]int{
+	{0x231A, 0x231B, prEmojiPresentation},   // E0.6   [2] (⌚..⌛)    watch..hourglass done
+	{0x23E9, 0x23EC, prEmojiPresentation},   // E0.6   [4] (⏩..⏬)    fast-forward button..fast down button
+	{0x23F0, 0x23F0, prEmojiPresentation},   // E0.6   [1] (⏰)       alarm clock
+	{0x23F3, 0x23F3, prEmojiPresentation},   // E0.6   [1] (⏳)       hourglass not done
+	{0x25FD, 0x25FE, prEmojiPresentation},   // E0.6   [2] (◽..◾)    white medium-small square..black medium-small square
+	{0x2614, 0x2615, prEmojiPresentation},   // E0.6   [2] (☔..☕)    umbrella with rain drops..hot beverage
+	{0x2648, 0x2653, prEmojiPresentation},   // E0.6  [12] (♈..♓)    Aries..Pisces
+	{0x267F, 0x267F, prEmojiPresentation},   // E0.6   [1] (♿)       wheelchair symbol
+	{0x2693, 0x2693, prEmojiPresentation},   // E0.6   [1] (⚓)       anchor
+	{0x26A1, 0x26A1, prEmojiPresentation},   // E0.6   [1] (⚡)       high voltage
+	{0x26AA, 0x26AB, prEmojiPresentation},   // E0.6   [2] (⚪..⚫)    white circle..black circle
+	{0x26BD, 0x26BE, prEmojiPresentation},   // E0.6   [2] (⚽..⚾)    soccer ball..baseball
+	{0x26C4, 0x26C5, prEmojiPresentation},   // E0.6   [2] (⛄..⛅)    snowman without snow..sun behind cloud
+	{0x26CE, 0x26CE, prEmojiPresentation},   // E0.6   [1] (⛎)       Ophiuchus
+	{0x26D4, 0x26D4, prEmojiPresentation},   // E0.6   [1] (⛔)       no entry
+	{0x26EA, 0x26EA, prEmojiPresentation},   // E0.6   [1] (⛪)       church
+	{0x26F2, 0x26F3, prEmojiPresentation},   // E0.6   [2] (⛲..⛳)    fountain..flag in hole
+	{0x26F5, 0x26F5, prEmojiPresentation},   // E0.6   [1] (⛵)       sailboat
+	{0x26FA, 0x26FA, prEmojiPresentation},   // E0.6   [1] (⛺)       tent
+	{0x26FD, 0x26FD, prEmojiPresentation},   // E0.6   [1] (⛽)       fuel pump
+	{0x2705, 0x2705, prEmojiPresentation},   // E0.6   [1] (✅)       check mark button
+	{0x270A, 0x270B, prEmojiPresentation},   // E0.6   [2] (✊..✋)    raised fist..raised hand
+	{0x2728, 0x2728, prEmojiPresentation},   // E0.6   [1] (✨)       sparkles
+	{0x274C, 0x274C, prEmojiPresentation},   // E0.6   [1] (❌)       cross mark
+	{0x274E, 0x274E, prEmojiPresentation},   // E0.6   [1] (❎)       cross mark button
+	{0x2753, 0x2755, prEmojiPresentation},   // E0.6   [3] (❓..❕)    red question mark..white exclamation mark
+	{0x2757, 0x2757, prEmojiPresentation},   // E0.6   [1] (❗)       red exclamation mark
+	{0x2795, 0x2797, prEmojiPresentation},   // E0.6   [3] (➕..➗)    plus..divide
+	{0x27B0, 0x27B0, prEmojiPresentation},   // E0.6   [1] (➰)       curly loop
+	{0x27BF, 0x27BF, prEmojiPresentation},   // E1.0   [1] (➿)       double curly loop
+	{0x2B1B, 0x2B1C, prEmojiPresentation},   // E0.6   [2] (⬛..⬜)    black large square..white large square
+	{0x2B50, 0x2B50, prEmojiPresentation},   // E0.6   [1] (⭐)       star
+	{0x2B55, 0x2B55, prEmojiPresentation},   // E0.6   [1] (⭕)       hollow red circle
+	{0x1F004, 0x1F004, prEmojiPresentation}, // E0.6   [1] (🀄)       mahjong red dragon
+	{0x1F0CF, 0x1F0CF, prEmojiPresentation}, // E0.6   [1] (🃏)       joker
+	{0x1F18E, 0x1F18E, prEmojiPresentation}, // E0.6   [1] (🆎)       AB button (blood type)
+	{0x1F191, 0x1F19A, prEmojiPresentation}, // E0.6  [10] (🆑..🆚)    CL button..VS button
+	{0x1F1E6, 0x1F1FF, prEmojiPresentation}, // E0.0  [26] (🇦..🇿)    regional indicator symbol letter a..regional indicator symbol letter z
+	{0x1F201, 0x1F201, prEmojiPresentation}, // E0.6   [1] (🈁)       Japanese “here” button
+	{0x1F21A, 0x1F21A, prEmojiPresentation}, // E0.6   [1] (🈚)       Japanese “free of charge” button
+	{0x1F22F, 0x1F22F, prEmojiPresentation}, // E0.6   [1] (🈯)       Japanese “reserved” button
+	{0x1F232, 0x1F236, prEmojiPresentation}, // E0.6   [5] (🈲..🈶)    Japanese “prohibited” button..Japanese “not free of charge” button
+	{0x1F238, 0x1F23A, prEmojiPresentation}, // E0.6   [3] (🈸..🈺)    Japanese “application” button..Japanese “open for business” button
+	{0x1F250, 0x1F251, prEmojiPresentation}, // E0.6   [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button
+	{0x1F300, 0x1F30C, prEmojiPresentation}, // E0.6  [13] (🌀..🌌)    cyclone..milky way
+	{0x1F30D, 0x1F30E, prEmojiPresentation}, // E0.7   [2] (🌍..🌎)    globe showing Europe-Africa..globe showing Americas
+	{0x1F30F, 0x1F30F, prEmojiPresentation}, // E0.6   [1] (🌏)       globe showing Asia-Australia
+	{0x1F310, 0x1F310, prEmojiPresentation}, // E1.0   [1] (🌐)       globe with meridians
+	{0x1F311, 0x1F311, prEmojiPresentation}, // E0.6   [1] (🌑)       new moon
+	{0x1F312, 0x1F312, prEmojiPresentation}, // E1.0   [1] (🌒)       waxing crescent moon
+	{0x1F313, 0x1F315, prEmojiPresentation}, // E0.6   [3] (🌓..🌕)    first quarter moon..full moon
+	{0x1F316, 0x1F318, prEmojiPresentation}, // E1.0   [3] (🌖..🌘)    waning gibbous moon..waning crescent moon
+	{0x1F319, 0x1F319, prEmojiPresentation}, // E0.6   [1] (🌙)       crescent moon
+	{0x1F31A, 0x1F31A, prEmojiPresentation}, // E1.0   [1] (🌚)       new moon face
+	{0x1F31B, 0x1F31B, prEmojiPresentation}, // E0.6   [1] (🌛)       first quarter moon face
+	{0x1F31C, 0x1F31C, prEmojiPresentation}, // E0.7   [1] (🌜)       last quarter moon face
+	{0x1F31D, 0x1F31E, prEmojiPresentation}, // E1.0   [2] (🌝..🌞)    full moon face..sun with face
+	{0x1F31F, 0x1F320, prEmojiPresentation}, // E0.6   [2] (🌟..🌠)    glowing star..shooting star
+	{0x1F32D, 0x1F32F, prEmojiPresentation}, // E1.0   [3] (🌭..🌯)    hot dog..burrito
+	{0x1F330, 0x1F331, prEmojiPresentation}, // E0.6   [2] (🌰..🌱)    chestnut..seedling
+	{0x1F332, 0x1F333, prEmojiPresentation}, // E1.0   [2] (🌲..🌳)    evergreen tree..deciduous tree
+	{0x1F334, 0x1F335, prEmojiPresentation}, // E0.6   [2] (🌴..🌵)    palm tree..cactus
+	{0x1F337, 0x1F34A, prEmojiPresentation}, // E0.6  [20] (🌷..🍊)    tulip..tangerine
+	{0x1F34B, 0x1F34B, prEmojiPresentation}, // E1.0   [1] (🍋)       lemon
+	{0x1F34C, 0x1F34F, prEmojiPresentation}, // E0.6   [4] (🍌..🍏)    banana..green apple
+	{0x1F350, 0x1F350, prEmojiPresentation}, // E1.0   [1] (🍐)       pear
+	{0x1F351, 0x1F37B, prEmojiPresentation}, // E0.6  [43] (🍑..🍻)    peach..clinking beer mugs
+	{0x1F37C, 0x1F37C, prEmojiPresentation}, // E1.0   [1] (🍼)       baby bottle
+	{0x1F37E, 0x1F37F, prEmojiPresentation}, // E1.0   [2] (🍾..🍿)    bottle with popping cork..popcorn
+	{0x1F380, 0x1F393, prEmojiPresentation}, // E0.6  [20] (🎀..🎓)    ribbon..graduation cap
+	{0x1F3A0, 0x1F3C4, prEmojiPresentation}, // E0.6  [37] (🎠..🏄)    carousel horse..person surfing
+	{0x1F3C5, 0x1F3C5, prEmojiPresentation}, // E1.0   [1] (🏅)       sports medal
+	{0x1F3C6, 0x1F3C6, prEmojiPresentation}, // E0.6   [1] (🏆)       trophy
+	{0x1F3C7, 0x1F3C7, prEmojiPresentation}, // E1.0   [1] (🏇)       horse racing
+	{0x1F3C8, 0x1F3C8, prEmojiPresentation}, // E0.6   [1] (🏈)       american football
+	{0x1F3C9, 0x1F3C9, prEmojiPresentation}, // E1.0   [1] (🏉)       rugby football
+	{0x1F3CA, 0x1F3CA, prEmojiPresentation}, // E0.6   [1] (🏊)       person swimming
+	{0x1F3CF, 0x1F3D3, prEmojiPresentation}, // E1.0   [5] (🏏..🏓)    cricket game..ping pong
+	{0x1F3E0, 0x1F3E3, prEmojiPresentation}, // E0.6   [4] (🏠..🏣)    house..Japanese post office
+	{0x1F3E4, 0x1F3E4, prEmojiPresentation}, // E1.0   [1] (🏤)       post office
+	{0x1F3E5, 0x1F3F0, prEmojiPresentation}, // E0.6  [12] (🏥..🏰)    hospital..castle
+	{0x1F3F4, 0x1F3F4, prEmojiPresentation}, // E1.0   [1] (🏴)       black flag
+	{0x1F3F8, 0x1F407, prEmojiPresentation}, // E1.0  [16] (🏸..🐇)    badminton..rabbit
+	{0x1F408, 0x1F408, prEmojiPresentation}, // E0.7   [1] (🐈)       cat
+	{0x1F409, 0x1F40B, prEmojiPresentation}, // E1.0   [3] (🐉..🐋)    dragon..whale
+	{0x1F40C, 0x1F40E, prEmojiPresentation}, // E0.6   [3] (🐌..🐎)    snail..horse
+	{0x1F40F, 0x1F410, prEmojiPresentation}, // E1.0   [2] (🐏..🐐)    ram..goat
+	{0x1F411, 0x1F412, prEmojiPresentation}, // E0.6   [2] (🐑..🐒)    ewe..monkey
+	{0x1F413, 0x1F413, prEmojiPresentation}, // E1.0   [1] (🐓)       rooster
+	{0x1F414, 0x1F414, prEmojiPresentation}, // E0.6   [1] (🐔)       chicken
+	{0x1F415, 0x1F415, prEmojiPresentation}, // E0.7   [1] (🐕)       dog
+	{0x1F416, 0x1F416, prEmojiPresentation}, // E1.0   [1] (🐖)       pig
+	{0x1F417, 0x1F429, prEmojiPresentation}, // E0.6  [19] (🐗..🐩)    boar..poodle
+	{0x1F42A, 0x1F42A, prEmojiPresentation}, // E1.0   [1] (🐪)       camel
+	{0x1F42B, 0x1F43E, prEmojiPresentation}, // E0.6  [20] (🐫..🐾)    two-hump camel..paw prints
+	{0x1F440, 0x1F440, prEmojiPresentation}, // E0.6   [1] (👀)       eyes
+	{0x1F442, 0x1F464, prEmojiPresentation}, // E0.6  [35] (👂..👤)    ear..bust in silhouette
+	{0x1F465, 0x1F465, prEmojiPresentation}, // E1.0   [1] (👥)       busts in silhouette
+	{0x1F466, 0x1F46B, prEmojiPresentation}, // E0.6   [6] (👦..👫)    boy..woman and man holding hands
+	{0x1F46C, 0x1F46D, prEmojiPresentation}, // E1.0   [2] (👬..👭)    men holding hands..women holding hands
+	{0x1F46E, 0x1F4AC, prEmojiPresentation}, // E0.6  [63] (👮..💬)    police officer..speech balloon
+	{0x1F4AD, 0x1F4AD, prEmojiPresentation}, // E1.0   [1] (💭)       thought balloon
+	{0x1F4AE, 0x1F4B5, prEmojiPresentation}, // E0.6   [8] (💮..💵)    white flower..dollar banknote
+	{0x1F4B6, 0x1F4B7, prEmojiPresentation}, // E1.0   [2] (💶..💷)    euro banknote..pound banknote
+	{0x1F4B8, 0x1F4EB, prEmojiPresentation}, // E0.6  [52] (💸..📫)    money with wings..closed mailbox with raised flag
+	{0x1F4EC, 0x1F4ED, prEmojiPresentation}, // E0.7   [2] (📬..📭)    open mailbox with raised flag..open mailbox with lowered flag
+	{0x1F4EE, 0x1F4EE, prEmojiPresentation}, // E0.6   [1] (📮)       postbox
+	{0x1F4EF, 0x1F4EF, prEmojiPresentation}, // E1.0   [1] (📯)       postal horn
+	{0x1F4F0, 0x1F4F4, prEmojiPresentation}, // E0.6   [5] (📰..📴)    newspaper..mobile phone off
+	{0x1F4F5, 0x1F4F5, prEmojiPresentation}, // E1.0   [1] (📵)       no mobile phones
+	{0x1F4F6, 0x1F4F7, prEmojiPresentation}, // E0.6   [2] (📶..📷)    antenna bars..camera
+	{0x1F4F8, 0x1F4F8, prEmojiPresentation}, // E1.0   [1] (📸)       camera with flash
+	{0x1F4F9, 0x1F4FC, prEmojiPresentation}, // E0.6   [4] (📹..📼)    video camera..videocassette
+	{0x1F4FF, 0x1F502, prEmojiPresentation}, // E1.0   [4] (📿..🔂)    prayer beads..repeat single button
+	{0x1F503, 0x1F503, prEmojiPresentation}, // E0.6   [1] (🔃)       clockwise vertical arrows
+	{0x1F504, 0x1F507, prEmojiPresentation}, // E1.0   [4] (🔄..🔇)    counterclockwise arrows button..muted speaker
+	{0x1F508, 0x1F508, prEmojiPresentation}, // E0.7   [1] (🔈)       speaker low volume
+	{0x1F509, 0x1F509, prEmojiPresentation}, // E1.0   [1] (🔉)       speaker medium volume
+	{0x1F50A, 0x1F514, prEmojiPresentation}, // E0.6  [11] (🔊..🔔)    speaker high volume..bell
+	{0x1F515, 0x1F515, prEmojiPresentation}, // E1.0   [1] (🔕)       bell with slash
+	{0x1F516, 0x1F52B, prEmojiPresentation}, // E0.6  [22] (🔖..🔫)    bookmark..water pistol
+	{0x1F52C, 0x1F52D, prEmojiPresentation}, // E1.0   [2] (🔬..🔭)    microscope..telescope
+	{0x1F52E, 0x1F53D, prEmojiPresentation}, // E0.6  [16] (🔮..🔽)    crystal ball..downwards button
+	{0x1F54B, 0x1F54E, prEmojiPresentation}, // E1.0   [4] (🕋..🕎)    kaaba..menorah
+	{0x1F550, 0x1F55B, prEmojiPresentation}, // E0.6  [12] (🕐..🕛)    one o’clock..twelve o’clock
+	{0x1F55C, 0x1F567, prEmojiPresentation}, // E0.7  [12] (🕜..🕧)    one-thirty..twelve-thirty
+	{0x1F57A, 0x1F57A, prEmojiPresentation}, // E3.0   [1] (🕺)       man dancing
+	{0x1F595, 0x1F596, prEmojiPresentation}, // E1.0   [2] (🖕..🖖)    middle finger..vulcan salute
+	{0x1F5A4, 0x1F5A4, prEmojiPresentation}, // E3.0   [1] (🖤)       black heart
+	{0x1F5FB, 0x1F5FF, prEmojiPresentation}, // E0.6   [5] (🗻..🗿)    mount fuji..moai
+	{0x1F600, 0x1F600, prEmojiPresentation}, // E1.0   [1] (😀)       grinning face
+	{0x1F601, 0x1F606, prEmojiPresentation}, // E0.6   [6] (😁..😆)    beaming face with smiling eyes..grinning squinting face
+	{0x1F607, 0x1F608, prEmojiPresentation}, // E1.0   [2] (😇..😈)    smiling face with halo..smiling face with horns
+	{0x1F609, 0x1F60D, prEmojiPresentation}, // E0.6   [5] (😉..😍)    winking face..smiling face with heart-eyes
+	{0x1F60E, 0x1F60E, prEmojiPresentation}, // E1.0   [1] (😎)       smiling face with sunglasses
+	{0x1F60F, 0x1F60F, prEmojiPresentation}, // E0.6   [1] (😏)       smirking face
+	{0x1F610, 0x1F610, prEmojiPresentation}, // E0.7   [1] (😐)       neutral face
+	{0x1F611, 0x1F611, prEmojiPresentation}, // E1.0   [1] (😑)       expressionless face
+	{0x1F612, 0x1F614, prEmojiPresentation}, // E0.6   [3] (😒..😔)    unamused face..pensive face
+	{0x1F615, 0x1F615, prEmojiPresentation}, // E1.0   [1] (😕)       confused face
+	{0x1F616, 0x1F616, prEmojiPresentation}, // E0.6   [1] (😖)       confounded face
+	{0x1F617, 0x1F617, prEmojiPresentation}, // E1.0   [1] (😗)       kissing face
+	{0x1F618, 0x1F618, prEmojiPresentation}, // E0.6   [1] (😘)       face blowing a kiss
+	{0x1F619, 0x1F619, prEmojiPresentation}, // E1.0   [1] (😙)       kissing face with smiling eyes
+	{0x1F61A, 0x1F61A, prEmojiPresentation}, // E0.6   [1] (😚)       kissing face with closed eyes
+	{0x1F61B, 0x1F61B, prEmojiPresentation}, // E1.0   [1] (😛)       face with tongue
+	{0x1F61C, 0x1F61E, prEmojiPresentation}, // E0.6   [3] (😜..😞)    winking face with tongue..disappointed face
+	{0x1F61F, 0x1F61F, prEmojiPresentation}, // E1.0   [1] (😟)       worried face
+	{0x1F620, 0x1F625, prEmojiPresentation}, // E0.6   [6] (😠..😥)    angry face..sad but relieved face
+	{0x1F626, 0x1F627, prEmojiPresentation}, // E1.0   [2] (😦..😧)    frowning face with open mouth..anguished face
+	{0x1F628, 0x1F62B, prEmojiPresentation}, // E0.6   [4] (😨..😫)    fearful face..tired face
+	{0x1F62C, 0x1F62C, prEmojiPresentation}, // E1.0   [1] (😬)       grimacing face
+	{0x1F62D, 0x1F62D, prEmojiPresentation}, // E0.6   [1] (😭)       loudly crying face
+	{0x1F62E, 0x1F62F, prEmojiPresentation}, // E1.0   [2] (😮..😯)    face with open mouth..hushed face
+	{0x1F630, 0x1F633, prEmojiPresentation}, // E0.6   [4] (😰..😳)    anxious face with sweat..flushed face
+	{0x1F634, 0x1F634, prEmojiPresentation}, // E1.0   [1] (😴)       sleeping face
+	{0x1F635, 0x1F635, prEmojiPresentation}, // E0.6   [1] (😵)       face with crossed-out eyes
+	{0x1F636, 0x1F636, prEmojiPresentation}, // E1.0   [1] (😶)       face without mouth
+	{0x1F637, 0x1F640, prEmojiPresentation}, // E0.6  [10] (😷..🙀)    face with medical mask..weary cat
+	{0x1F641, 0x1F644, prEmojiPresentation}, // E1.0   [4] (🙁..🙄)    slightly frowning face..face with rolling eyes
+	{0x1F645, 0x1F64F, prEmojiPresentation}, // E0.6  [11] (🙅..🙏)    person gesturing NO..folded hands
+	{0x1F680, 0x1F680, prEmojiPresentation}, // E0.6   [1] (🚀)       rocket
+	{0x1F681, 0x1F682, prEmojiPresentation}, // E1.0   [2] (🚁..🚂)    helicopter..locomotive
+	{0x1F683, 0x1F685, prEmojiPresentation}, // E0.6   [3] (🚃..🚅)    railway car..bullet train
+	{0x1F686, 0x1F686, prEmojiPresentation}, // E1.0   [1] (🚆)       train
+	{0x1F687, 0x1F687, prEmojiPresentation}, // E0.6   [1] (🚇)       metro
+	{0x1F688, 0x1F688, prEmojiPresentation}, // E1.0   [1] (🚈)       light rail
+	{0x1F689, 0x1F689, prEmojiPresentation}, // E0.6   [1] (🚉)       station
+	{0x1F68A, 0x1F68B, prEmojiPresentation}, // E1.0   [2] (🚊..🚋)    tram..tram car
+	{0x1F68C, 0x1F68C, prEmojiPresentation}, // E0.6   [1] (🚌)       bus
+	{0x1F68D, 0x1F68D, prEmojiPresentation}, // E0.7   [1] (🚍)       oncoming bus
+	{0x1F68E, 0x1F68E, prEmojiPresentation}, // E1.0   [1] (🚎)       trolleybus
+	{0x1F68F, 0x1F68F, prEmojiPresentation}, // E0.6   [1] (🚏)       bus stop
+	{0x1F690, 0x1F690, prEmojiPresentation}, // E1.0   [1] (🚐)       minibus
+	{0x1F691, 0x1F693, prEmojiPresentation}, // E0.6   [3] (🚑..🚓)    ambulance..police car
+	{0x1F694, 0x1F694, prEmojiPresentation}, // E0.7   [1] (🚔)       oncoming police car
+	{0x1F695, 0x1F695, prEmojiPresentation}, // E0.6   [1] (🚕)       taxi
+	{0x1F696, 0x1F696, prEmojiPresentation}, // E1.0   [1] (🚖)       oncoming taxi
+	{0x1F697, 0x1F697, prEmojiPresentation}, // E0.6   [1] (🚗)       automobile
+	{0x1F698, 0x1F698, prEmojiPresentation}, // E0.7   [1] (🚘)       oncoming automobile
+	{0x1F699, 0x1F69A, prEmojiPresentation}, // E0.6   [2] (🚙..🚚)    sport utility vehicle..delivery truck
+	{0x1F69B, 0x1F6A1, prEmojiPresentation}, // E1.0   [7] (🚛..🚡)    articulated lorry..aerial tramway
+	{0x1F6A2, 0x1F6A2, prEmojiPresentation}, // E0.6   [1] (🚢)       ship
+	{0x1F6A3, 0x1F6A3, prEmojiPresentation}, // E1.0   [1] (🚣)       person rowing boat
+	{0x1F6A4, 0x1F6A5, prEmojiPresentation}, // E0.6   [2] (🚤..🚥)    speedboat..horizontal traffic light
+	{0x1F6A6, 0x1F6A6, prEmojiPresentation}, // E1.0   [1] (🚦)       vertical traffic light
+	{0x1F6A7, 0x1F6AD, prEmojiPresentation}, // E0.6   [7] (🚧..🚭)    construction..no smoking
+	{0x1F6AE, 0x1F6B1, prEmojiPresentation}, // E1.0   [4] (🚮..🚱)    litter in bin sign..non-potable water
+	{0x1F6B2, 0x1F6B2, prEmojiPresentation}, // E0.6   [1] (🚲)       bicycle
+	{0x1F6B3, 0x1F6B5, prEmojiPresentation}, // E1.0   [3] (🚳..🚵)    no bicycles..person mountain biking
+	{0x1F6B6, 0x1F6B6, prEmojiPresentation}, // E0.6   [1] (🚶)       person walking
+	{0x1F6B7, 0x1F6B8, prEmojiPresentation}, // E1.0   [2] (🚷..🚸)    no pedestrians..children crossing
+	{0x1F6B9, 0x1F6BE, prEmojiPresentation}, // E0.6   [6] (🚹..🚾)    men’s room..water closet
+	{0x1F6BF, 0x1F6BF, prEmojiPresentation}, // E1.0   [1] (🚿)       shower
+	{0x1F6C0, 0x1F6C0, prEmojiPresentation}, // E0.6   [1] (🛀)       person taking bath
+	{0x1F6C1, 0x1F6C5, prEmojiPresentation}, // E1.0   [5] (🛁..🛅)    bathtub..left luggage
+	{0x1F6CC, 0x1F6CC, prEmojiPresentation}, // E1.0   [1] (🛌)       person in bed
+	{0x1F6D0, 0x1F6D0, prEmojiPresentation}, // E1.0   [1] (🛐)       place of worship
+	{0x1F6D1, 0x1F6D2, prEmojiPresentation}, // E3.0   [2] (🛑..🛒)    stop sign..shopping cart
+	{0x1F6D5, 0x1F6D5, prEmojiPresentation}, // E12.0  [1] (🛕)       hindu temple
+	{0x1F6D6, 0x1F6D7, prEmojiPresentation}, // E13.0  [2] (🛖..🛗)    hut..elevator
+	{0x1F6DD, 0x1F6DF, prEmojiPresentation}, // E14.0  [3] (🛝..🛟)    playground slide..ring buoy
+	{0x1F6EB, 0x1F6EC, prEmojiPresentation}, // E1.0   [2] (🛫..🛬)    airplane departure..airplane arrival
+	{0x1F6F4, 0x1F6F6, prEmojiPresentation}, // E3.0   [3] (🛴..🛶)    kick scooter..canoe
+	{0x1F6F7, 0x1F6F8, prEmojiPresentation}, // E5.0   [2] (🛷..🛸)    sled..flying saucer
+	{0x1F6F9, 0x1F6F9, prEmojiPresentation}, // E11.0  [1] (🛹)       skateboard
+	{0x1F6FA, 0x1F6FA, prEmojiPresentation}, // E12.0  [1] (🛺)       auto rickshaw
+	{0x1F6FB, 0x1F6FC, prEmojiPresentation}, // E13.0  [2] (🛻..🛼)    pickup truck..roller skate
+	{0x1F7E0, 0x1F7EB, prEmojiPresentation}, // E12.0 [12] (🟠..🟫)    orange circle..brown square
+	{0x1F7F0, 0x1F7F0, prEmojiPresentation}, // E14.0  [1] (🟰)       heavy equals sign
+	{0x1F90C, 0x1F90C, prEmojiPresentation}, // E13.0  [1] (🤌)       pinched fingers
+	{0x1F90D, 0x1F90F, prEmojiPresentation}, // E12.0  [3] (🤍..🤏)    white heart..pinching hand
+	{0x1F910, 0x1F918, prEmojiPresentation}, // E1.0   [9] (🤐..🤘)    zipper-mouth face..sign of the horns
+	{0x1F919, 0x1F91E, prEmojiPresentation}, // E3.0   [6] (🤙..🤞)    call me hand..crossed fingers
+	{0x1F91F, 0x1F91F, prEmojiPresentation}, // E5.0   [1] (🤟)       love-you gesture
+	{0x1F920, 0x1F927, prEmojiPresentation}, // E3.0   [8] (🤠..🤧)    cowboy hat face..sneezing face
+	{0x1F928, 0x1F92F, prEmojiPresentation}, // E5.0   [8] (🤨..🤯)    face with raised eyebrow..exploding head
+	{0x1F930, 0x1F930, prEmojiPresentation}, // E3.0   [1] (🤰)       pregnant woman
+	{0x1F931, 0x1F932, prEmojiPresentation}, // E5.0   [2] (🤱..🤲)    breast-feeding..palms up together
+	{0x1F933, 0x1F93A, prEmojiPresentation}, // E3.0   [8] (🤳..🤺)    selfie..person fencing
+	{0x1F93C, 0x1F93E, prEmojiPresentation}, // E3.0   [3] (🤼..🤾)    people wrestling..person playing handball
+	{0x1F93F, 0x1F93F, prEmojiPresentation}, // E12.0  [1] (🤿)       diving mask
+	{0x1F940, 0x1F945, prEmojiPresentation}, // E3.0   [6] (🥀..🥅)    wilted flower..goal net
+	{0x1F947, 0x1F94B, prEmojiPresentation}, // E3.0   [5] (🥇..🥋)    1st place medal..martial arts uniform
+	{0x1F94C, 0x1F94C, prEmojiPresentation}, // E5.0   [1] (🥌)       curling stone
+	{0x1F94D, 0x1F94F, prEmojiPresentation}, // E11.0  [3] (🥍..🥏)    lacrosse..flying disc
+	{0x1F950, 0x1F95E, prEmojiPresentation}, // E3.0  [15] (🥐..🥞)    croissant..pancakes
+	{0x1F95F, 0x1F96B, prEmojiPresentation}, // E5.0  [13] (🥟..🥫)    dumpling..canned food
+	{0x1F96C, 0x1F970, prEmojiPresentation}, // E11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts
+	{0x1F971, 0x1F971, prEmojiPresentation}, // E12.0  [1] (🥱)       yawning face
+	{0x1F972, 0x1F972, prEmojiPresentation}, // E13.0  [1] (🥲)       smiling face with tear
+	{0x1F973, 0x1F976, prEmojiPresentation}, // E11.0  [4] (🥳..🥶)    partying face..cold face
+	{0x1F977, 0x1F978, prEmojiPresentation}, // E13.0  [2] (🥷..🥸)    ninja..disguised face
+	{0x1F979, 0x1F979, prEmojiPresentation}, // E14.0  [1] (🥹)       face holding back tears
+	{0x1F97A, 0x1F97A, prEmojiPresentation}, // E11.0  [1] (🥺)       pleading face
+	{0x1F97B, 0x1F97B, prEmojiPresentation}, // E12.0  [1] (🥻)       sari
+	{0x1F97C, 0x1F97F, prEmojiPresentation}, // E11.0  [4] (🥼..🥿)    lab coat..flat shoe
+	{0x1F980, 0x1F984, prEmojiPresentation}, // E1.0   [5] (🦀..🦄)    crab..unicorn
+	{0x1F985, 0x1F991, prEmojiPresentation}, // E3.0  [13] (🦅..🦑)    eagle..squid
+	{0x1F992, 0x1F997, prEmojiPresentation}, // E5.0   [6] (🦒..🦗)    giraffe..cricket
+	{0x1F998, 0x1F9A2, prEmojiPresentation}, // E11.0 [11] (🦘..🦢)    kangaroo..swan
+	{0x1F9A3, 0x1F9A4, prEmojiPresentation}, // E13.0  [2] (🦣..🦤)    mammoth..dodo
+	{0x1F9A5, 0x1F9AA, prEmojiPresentation}, // E12.0  [6] (🦥..🦪)    sloth..oyster
+	{0x1F9AB, 0x1F9AD, prEmojiPresentation}, // E13.0  [3] (🦫..🦭)    beaver..seal
+	{0x1F9AE, 0x1F9AF, prEmojiPresentation}, // E12.0  [2] (🦮..🦯)    guide dog..white cane
+	{0x1F9B0, 0x1F9B9, prEmojiPresentation}, // E11.0 [10] (🦰..🦹)    red hair..supervillain
+	{0x1F9BA, 0x1F9BF, prEmojiPresentation}, // E12.0  [6] (🦺..🦿)    safety vest..mechanical leg
+	{0x1F9C0, 0x1F9C0, prEmojiPresentation}, // E1.0   [1] (🧀)       cheese wedge
+	{0x1F9C1, 0x1F9C2, prEmojiPresentation}, // E11.0  [2] (🧁..🧂)    cupcake..salt
+	{0x1F9C3, 0x1F9CA, prEmojiPresentation}, // E12.0  [8] (🧃..🧊)    beverage box..ice
+	{0x1F9CB, 0x1F9CB, prEmojiPresentation}, // E13.0  [1] (🧋)       bubble tea
+	{0x1F9CC, 0x1F9CC, prEmojiPresentation}, // E14.0  [1] (🧌)       troll
+	{0x1F9CD, 0x1F9CF, prEmojiPresentation}, // E12.0  [3] (🧍..🧏)    person standing..deaf person
+	{0x1F9D0, 0x1F9E6, prEmojiPresentation}, // E5.0  [23] (🧐..🧦)    face with monocle..socks
+	{0x1F9E7, 0x1F9FF, prEmojiPresentation}, // E11.0 [25] (🧧..🧿)    red envelope..nazar amulet
+	{0x1FA70, 0x1FA73, prEmojiPresentation}, // E12.0  [4] (🩰..🩳)    ballet shoes..shorts
+	{0x1FA74, 0x1FA74, prEmojiPresentation}, // E13.0  [1] (🩴)       thong sandal
+	{0x1FA78, 0x1FA7A, prEmojiPresentation}, // E12.0  [3] (🩸..🩺)    drop of blood..stethoscope
+	{0x1FA7B, 0x1FA7C, prEmojiPresentation}, // E14.0  [2] (🩻..🩼)    x-ray..crutch
+	{0x1FA80, 0x1FA82, prEmojiPresentation}, // E12.0  [3] (🪀..🪂)    yo-yo..parachute
+	{0x1FA83, 0x1FA86, prEmojiPresentation}, // E13.0  [4] (🪃..🪆)    boomerang..nesting dolls
+	{0x1FA90, 0x1FA95, prEmojiPresentation}, // E12.0  [6] (🪐..🪕)    ringed planet..banjo
+	{0x1FA96, 0x1FAA8, prEmojiPresentation}, // E13.0 [19] (🪖..🪨)    military helmet..rock
+	{0x1FAA9, 0x1FAAC, prEmojiPresentation}, // E14.0  [4] (🪩..🪬)    mirror ball..hamsa
+	{0x1FAB0, 0x1FAB6, prEmojiPresentation}, // E13.0  [7] (🪰..🪶)    fly..feather
+	{0x1FAB7, 0x1FABA, prEmojiPresentation}, // E14.0  [4] (🪷..🪺)    lotus..nest with eggs
+	{0x1FAC0, 0x1FAC2, prEmojiPresentation}, // E13.0  [3] (🫀..🫂)    anatomical heart..people hugging
+	{0x1FAC3, 0x1FAC5, prEmojiPresentation}, // E14.0  [3] (🫃..🫅)    pregnant man..person with crown
+	{0x1FAD0, 0x1FAD6, prEmojiPresentation}, // E13.0  [7] (🫐..🫖)    blueberries..teapot
+	{0x1FAD7, 0x1FAD9, prEmojiPresentation}, // E14.0  [3] (🫗..🫙)    pouring liquid..jar
+	{0x1FAE0, 0x1FAE7, prEmojiPresentation}, // E14.0  [8] (🫠..🫧)    melting face..bubbles
+	{0x1FAF0, 0x1FAF6, prEmojiPresentation}, // E14.0  [7] (🫰..🫶)    hand with index finger and thumb crossed..heart hands
+}
diff --git a/vendor/github.com/rivo/uniseg/gen_properties.go b/vendor/github.com/rivo/uniseg/gen_properties.go
index 64512709e..999d5efdd 100644
--- a/vendor/github.com/rivo/uniseg/gen_properties.go
+++ b/vendor/github.com/rivo/uniseg/gen_properties.go
@@ -3,19 +3,22 @@
 // This program generates a property file in Go file from Unicode Character
 // Database auxiliary data files. The command line arguments are as follows:
 //
-//   1. The name of the Unicode data file (just the filename, without extension).
-//   2. The name of the locally generated Go file.
-//   3. The name of the slice mapping code points to properties.
-//   4. The name of the generator, for logging purposes.
-//   5. (Optional) Flags, comma-separated. The following flags are available:
-//        - "emojis": include emoji properties (Extended Pictographic only).
-//        - "gencat": include general category properties.
+//  1. The name of the Unicode data file (just the filename, without extension).
+//     Can be "-" (to skip) if the emoji flag is included.
+//  2. The name of the locally generated Go file.
+//  3. The name of the slice mapping code points to properties.
+//  4. The name of the generator, for logging purposes.
+//  5. (Optional) Flags, comma-separated. The following flags are available:
+//     - "emojis=<property>": include the specified emoji properties (e.g.
+//     "Extended_Pictographic").
+//     - "gencat": include general category properties.
 //
-//go:generate go run gen_properties.go auxiliary/GraphemeBreakProperty graphemeproperties.go graphemeCodePoints graphemes emojis
-//go:generate go run gen_properties.go auxiliary/WordBreakProperty wordproperties.go workBreakCodePoints words emojis
+//go:generate go run gen_properties.go auxiliary/GraphemeBreakProperty graphemeproperties.go graphemeCodePoints graphemes emojis=Extended_Pictographic
+//go:generate go run gen_properties.go auxiliary/WordBreakProperty wordproperties.go workBreakCodePoints words emojis=Extended_Pictographic
 //go:generate go run gen_properties.go auxiliary/SentenceBreakProperty sentenceproperties.go sentenceBreakCodePoints sentences
 //go:generate go run gen_properties.go LineBreak lineproperties.go lineBreakCodePoints lines gencat
 //go:generate go run gen_properties.go EastAsianWidth eastasianwidth.go eastAsianWidth eastasianwidth
+//go:generate go run gen_properties.go - emojipresentation.go emojiPresentation emojipresentation emojis=Emoji_Presentation
 package main
 
 import (
@@ -38,8 +41,8 @@ import (
 // We want to test against a specific version rather than the latest. When the
 // package is upgraded to a new version, change these to generate new tests.
 const (
-	gbpURL   = `https://www.unicode.org/Public/14.0.0/ucd/%s.txt`
-	emojiURL = `https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt`
+	propertyURL = `https://www.unicode.org/Public/14.0.0/ucd/%s.txt`
+	emojiURL    = `https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt`
 )
 
 // The regular expression for a line containing a code point range property.
@@ -55,20 +58,25 @@ func main() {
 	log.SetFlags(0)
 
 	// Parse flags.
-	flags := make(map[string]struct{})
+	flags := make(map[string]string)
 	if len(os.Args) >= 6 {
 		for _, flag := range strings.Split(os.Args[5], ",") {
-			flags[flag] = struct{}{}
+			flagFields := strings.Split(flag, "=")
+			if len(flagFields) == 1 {
+				flags[flagFields[0]] = "yes"
+			} else {
+				flags[flagFields[0]] = flagFields[1]
+			}
 		}
 	}
 
 	// Parse the text file and generate Go source code from it.
-	var emojis string
-	if _, ok := flags["emojis"]; ok {
-		emojis = emojiURL
-	}
 	_, includeGeneralCategory := flags["gencat"]
-	src, err := parse(fmt.Sprintf(gbpURL, os.Args[1]), emojis, includeGeneralCategory)
+	var mainURL string
+	if os.Args[1] != "-" {
+		mainURL = fmt.Sprintf(propertyURL, os.Args[1])
+	}
+	src, err := parse(mainURL, flags["emojis"], includeGeneralCategory)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -88,49 +96,57 @@ func main() {
 
 // parse parses the Unicode Properties text files located at the given URLs and
 // returns their equivalent Go source code to be used in the uniseg package. If
-// "emojiURL" is an empty string, no emoji code points will be included. If
+// "emojiProperty" is not an empty string, emoji code points for that emoji
+// property (e.g. "Extended_Pictographic") will be included. In those cases, you
+// may pass an empty "propertyURL" to skip parsing the main properties file. If
 // "includeGeneralCategory" is true, the Unicode General Category property will
 // be extracted from the comments and included in the output.
-func parse(gbpURL, emojiURL string, includeGeneralCategory bool) (string, error) {
+func parse(propertyURL, emojiProperty string, includeGeneralCategory bool) (string, error) {
+	if propertyURL == "" && emojiProperty == "" {
+		return "", errors.New("no properties to parse")
+	}
+
 	// Temporary buffer to hold properties.
 	var properties [][4]string
 
 	// Open the first URL.
-	log.Printf("Parsing %s", gbpURL)
-	res, err := http.Get(gbpURL)
-	if err != nil {
-		return "", err
-	}
-	in1 := res.Body
-	defer in1.Close()
-
-	// Parse it.
-	scanner := bufio.NewScanner(in1)
-	num := 0
-	for scanner.Scan() {
-		num++
-		line := strings.TrimSpace(scanner.Text())
-
-		// Skip comments and empty lines.
-		if strings.HasPrefix(line, "#") || line == "" {
-			continue
-		}
-
-		// Everything else must be a code point range, a property and a comment.
-		from, to, property, comment, err := parseProperty(line)
+	if propertyURL != "" {
+		log.Printf("Parsing %s", propertyURL)
+		res, err := http.Get(propertyURL)
 		if err != nil {
-			return "", fmt.Errorf("%s line %d: %v", os.Args[4], num, err)
+			return "", err
+		}
+		in1 := res.Body
+		defer in1.Close()
+
+		// Parse it.
+		scanner := bufio.NewScanner(in1)
+		num := 0
+		for scanner.Scan() {
+			num++
+			line := strings.TrimSpace(scanner.Text())
+
+			// Skip comments and empty lines.
+			if strings.HasPrefix(line, "#") || line == "" {
+				continue
+			}
+
+			// Everything else must be a code point range, a property and a comment.
+			from, to, property, comment, err := parseProperty(line)
+			if err != nil {
+				return "", fmt.Errorf("%s line %d: %v", os.Args[4], num, err)
+			}
+			properties = append(properties, [4]string{from, to, property, comment})
+		}
+		if err := scanner.Err(); err != nil {
+			return "", err
 		}
-		properties = append(properties, [4]string{from, to, property, comment})
-	}
-	if err := scanner.Err(); err != nil {
-		return "", err
 	}
 
 	// Open the second URL.
-	if emojiURL != "" {
+	if emojiProperty != "" {
 		log.Printf("Parsing %s", emojiURL)
-		res, err = http.Get(emojiURL)
+		res, err := http.Get(emojiURL)
 		if err != nil {
 			return "", err
 		}
@@ -138,15 +154,15 @@ func parse(gbpURL, emojiURL string, includeGeneralCategory bool) (string, error)
 		defer in2.Close()
 
 		// Parse it.
-		scanner = bufio.NewScanner(in2)
-		num = 0
+		scanner := bufio.NewScanner(in2)
+		num := 0
 		for scanner.Scan() {
 			num++
 			line := scanner.Text()
 
 			// Skip comments, empty lines, and everything not containing
 			// "Extended_Pictographic".
-			if strings.HasPrefix(line, "#") || line == "" || !strings.Contains(line, "Extended_Pictographic") {
+			if strings.HasPrefix(line, "#") || line == "" || !strings.Contains(line, emojiProperty) {
 				continue
 			}
 
@@ -189,7 +205,7 @@ func parse(gbpURL, emojiURL string, includeGeneralCategory bool) (string, error)
 // Code generated via go generate from gen_properties.go. DO NOT EDIT.
 
 // ` + os.Args[3] + ` are taken from
-// ` + gbpURL + emojiComment + `
+// ` + propertyURL + emojiComment + `
 // on ` + time.Now().Format("January 2, 2006") + `. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var ` + os.Args[3] + ` = [][` + strconv.Itoa(columns) + `]int{
diff --git a/vendor/github.com/rivo/uniseg/grapheme.go b/vendor/github.com/rivo/uniseg/grapheme.go
index 9aec08685..997abbefd 100644
--- a/vendor/github.com/rivo/uniseg/grapheme.go
+++ b/vendor/github.com/rivo/uniseg/grapheme.go
@@ -4,12 +4,14 @@ import "unicode/utf8"
 
 // Graphemes implements an iterator over Unicode grapheme clusters, or
 // user-perceived characters. While iterating, it also provides information
-// about word boundaries, sentence boundaries, and line breaks.
+// about word boundaries, sentence boundaries, line breaks, and monospace
+// character widths.
 //
 // After constructing the class via [NewGraphemes] for a given string "str",
-// [Next] is called for every grapheme cluster in a loop until it returns false.
-// Inside the loop, information about the grapheme cluster as well as boundary
-// information is available via the various methods (see examples below).
+// [Graphemes.Next] is called for every grapheme cluster in a loop until it
+// returns false. Inside the loop, information about the grapheme cluster as
+// well as boundary information and character width is available via the various
+// methods (see examples below).
 //
 // Using this class to iterate over a string is convenient but it is much slower
 // than using this package's [Step] or [StepString] functions or any of the
@@ -28,18 +30,18 @@ type Graphemes struct {
 	// string.
 	offset int
 
-	// The current boundary information of the Step() parser.
+	// The current boundary information of the [Step] parser.
 	boundaries int
 
-	// The current state of the Step() parser.
+	// The current state of the [Step] parser.
 	state int
 }
 
 // NewGraphemes returns a new grapheme cluster iterator.
-func NewGraphemes(s string) *Graphemes {
+func NewGraphemes(str string) *Graphemes {
 	return &Graphemes{
-		original:  s,
-		remaining: s,
+		original:  str,
+		remaining: str,
 		state:     -1,
 	}
 }
@@ -60,8 +62,8 @@ func (g *Graphemes) Next() bool {
 }
 
 // Runes returns a slice of runes (code points) which corresponds to the current
-// grapheme cluster. If the iterator is already past the end or [Next] has not
-// yet been called, nil is returned.
+// grapheme cluster. If the iterator is already past the end or [Graphemes.Next]
+// has not yet been called, nil is returned.
 func (g *Graphemes) Runes() []rune {
 	if g.state < 0 {
 		return nil
@@ -70,15 +72,15 @@ func (g *Graphemes) Runes() []rune {
 }
 
 // Str returns a substring of the original string which corresponds to the
-// current grapheme cluster. If the iterator is already past the end or [Next]
-// has not yet been called, an empty string is returned.
+// current grapheme cluster. If the iterator is already past the end or
+// [Graphemes.Next] has not yet been called, an empty string is returned.
 func (g *Graphemes) Str() string {
 	return g.cluster
 }
 
 // Bytes returns a byte slice which corresponds to the current grapheme cluster.
-// If the iterator is already past the end or [Next] has not yet been called,
-// nil is returned.
+// If the iterator is already past the end or [Graphemes.Next] has not yet been
+// called, nil is returned.
 func (g *Graphemes) Bytes() []byte {
 	if g.state < 0 {
 		return nil
@@ -90,8 +92,8 @@ func (g *Graphemes) Bytes() []byte {
 // positions into the original string. The first returned value "from" indexes
 // the first byte and the second returned value "to" indexes the first byte that
 // is not included anymore, i.e. str[from:to] is the current grapheme cluster of
-// the original string "str". If [Next] has not yet been called, both values are
-// 0. If the iterator is already past the end, both values are 1.
+// the original string "str". If [Graphemes.Next] has not yet been called, both
+// values are 0. If the iterator is already past the end, both values are 1.
 func (g *Graphemes) Positions() (int, int) {
 	if g.state == -1 {
 		return 0, 0
@@ -133,8 +135,16 @@ func (g *Graphemes) LineBreak() int {
 	return g.boundaries & MaskLine
 }
 
+// Width returns the monospace width of the current grapheme cluster.
+func (g *Graphemes) Width() int {
+	if g.state < 0 {
+		return 0
+	}
+	return g.boundaries >> ShiftWidth
+}
+
 // Reset puts the iterator into its initial state such that the next call to
-// [Next] sets it to the first grapheme cluster again.
+// [Graphemes.Next] sets it to the first grapheme cluster again.
 func (g *Graphemes) Reset() {
 	g.state = -1
 	g.offset = 0
@@ -153,6 +163,10 @@ func GraphemeClusterCount(s string) (n int) {
 	return
 }
 
+// The number of bits the grapheme property must be shifted to make place for
+// grapheme states.
+const shiftGraphemePropState = 4
+
 // FirstGraphemeCluster returns the first grapheme cluster found in the given
 // byte slice according to the rules of Unicode Standard Annex #29, Grapheme
 // Cluster Boundaries. This function can be called continuously to extract all
@@ -168,15 +182,15 @@ func GraphemeClusterCount(s string) (n int) {
 // "cluster" byte slice is the sub-slice of the input slice containing the
 // identified grapheme cluster.
 //
+// The returned width is the width of the grapheme cluster for most monospace
+// fonts where a value of 1 represents one character cell.
+//
 // Given an empty byte slice "b", the function returns nil values.
 //
 // While slightly less convenient than using the Graphemes class, this function
 // has much better performance and makes no allocations. It lends itself well to
 // large byte slices.
-//
-// The "reserved" return value is a placeholder for future functionality and may
-// be ignored for the time being.
-func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, reserved, newState int) {
+func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, width, newState int) {
 	// An empty byte slice returns nothing.
 	if len(b) == 0 {
 		return
@@ -185,34 +199,60 @@ func FirstGraphemeCluster(b []byte, state int) (cluster, rest []byte, reserved,
 	// Extract the first rune.
 	r, length := utf8.DecodeRune(b)
 	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		return b, nil, 0, grAny
+		var prop int
+		if state < 0 {
+			prop = property(graphemeCodePoints, r)
+		} else {
+			prop = state >> shiftGraphemePropState
+		}
+		return b, nil, runeWidth(r, prop), grAny | (prop << shiftGraphemePropState)
 	}
 
 	// If we don't know the state, determine it now.
+	var firstProp int
 	if state < 0 {
-		state, _ = transitionGraphemeState(state, r)
+		state, firstProp, _ = transitionGraphemeState(state, r)
+	} else {
+		firstProp = state >> shiftGraphemePropState
 	}
+	width += runeWidth(r, firstProp)
 
 	// Transition until we find a boundary.
-	var boundary bool
 	for {
+		var (
+			prop     int
+			boundary bool
+		)
+
 		r, l := utf8.DecodeRune(b[length:])
-		state, boundary = transitionGraphemeState(state, r)
+		state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r)
 
 		if boundary {
-			return b[:length], b[length:], 0, state
+			return b[:length], b[length:], width, state | (prop << shiftGraphemePropState)
+		}
+
+		if r == vs16 {
+			width = 2
+		} else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL {
+			width += runeWidth(r, prop)
+		} else if firstProp == prExtendedPictographic {
+			if r == vs15 {
+				width = 1
+			} else {
+				width = 2
+			}
 		}
 
 		length += l
 		if len(b) <= length {
-			return b, nil, 0, grAny
+			return b, nil, width, grAny | (prop << shiftGraphemePropState)
 		}
 	}
 }
 
 // FirstGraphemeClusterInString is like [FirstGraphemeCluster] but its input and
 // outputs are strings.
-func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, reserved, newState int) {
+func FirstGraphemeClusterInString(str string, state int) (cluster, rest string, width, newState int) {
 	// An empty string returns nothing.
 	if len(str) == 0 {
 		return
@@ -221,27 +261,53 @@ func FirstGraphemeClusterInString(str string, state int) (cluster, rest string,
 	// Extract the first rune.
 	r, length := utf8.DecodeRuneInString(str)
 	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		return str, "", 0, grAny
+		var prop int
+		if state < 0 {
+			prop = property(graphemeCodePoints, r)
+		} else {
+			prop = state >> shiftGraphemePropState
+		}
+		return str, "", runeWidth(r, prop), grAny | (prop << shiftGraphemePropState)
 	}
 
 	// If we don't know the state, determine it now.
+	var firstProp int
 	if state < 0 {
-		state, _ = transitionGraphemeState(state, r)
+		state, firstProp, _ = transitionGraphemeState(state, r)
+	} else {
+		firstProp = state >> shiftGraphemePropState
 	}
+	width += runeWidth(r, firstProp)
 
 	// Transition until we find a boundary.
-	var boundary bool
 	for {
+		var (
+			prop     int
+			boundary bool
+		)
+
 		r, l := utf8.DecodeRuneInString(str[length:])
-		state, boundary = transitionGraphemeState(state, r)
+		state, prop, boundary = transitionGraphemeState(state&maskGraphemeState, r)
 
 		if boundary {
-			return str[:length], str[length:], 0, state
+			return str[:length], str[length:], width, state | (prop << shiftGraphemePropState)
+		}
+
+		if r == vs16 {
+			width = 2
+		} else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL {
+			width += runeWidth(r, prop)
+		} else if firstProp == prExtendedPictographic {
+			if r == vs15 {
+				width = 1
+			} else {
+				width = 2
+			}
 		}
 
 		length += l
 		if len(str) <= length {
-			return str, "", 0, grAny
+			return str, "", width, grAny | (prop << shiftGraphemePropState)
 		}
 	}
 }
diff --git a/vendor/github.com/rivo/uniseg/graphemeproperties.go b/vendor/github.com/rivo/uniseg/graphemeproperties.go
index a0c001689..a87d140bf 100644
--- a/vendor/github.com/rivo/uniseg/graphemeproperties.go
+++ b/vendor/github.com/rivo/uniseg/graphemeproperties.go
@@ -7,7 +7,7 @@ package uniseg
 // and
 // https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
 // ("Extended_Pictographic" only)
-// on July 25, 2022. See https://www.unicode.org/license.html for the Unicode
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var graphemeCodePoints = [][3]int{
 	{0x0000, 0x0009, prControl},                // Cc  [10] <control-0000>..<control-0009>
diff --git a/vendor/github.com/rivo/uniseg/graphemerules.go b/vendor/github.com/rivo/uniseg/graphemerules.go
index c8e07111c..907b30bd0 100644
--- a/vendor/github.com/rivo/uniseg/graphemerules.go
+++ b/vendor/github.com/rivo/uniseg/graphemerules.go
@@ -27,14 +27,14 @@ const (
 //
 // This map is queried as follows:
 //
-//   1. Find specific state + specific property. Stop if found.
-//   2. Find specific state + any property.
-//   3. Find any state + specific property.
-//   4. If only (2) or (3) (but not both) was found, stop.
-//   5. If both (2) and (3) were found, use state from (3) and breaking instruction
-//      from the transition with the lower rule number, prefer (3) if rule numbers
-//      are equal. Stop.
-//   6. Assume grAny and grBoundary.
+//  1. Find specific state + specific property. Stop if found.
+//  2. Find specific state + any property.
+//  3. Find any state + specific property.
+//  4. If only (2) or (3) (but not both) was found, stop.
+//  5. If both (2) and (3) were found, use state from (3) and breaking instruction
+//     from the transition with the lower rule number, prefer (3) if rule numbers
+//     are equal. Stop.
+//  6. Assume grAny and grBoundary.
 //
 // Unicode version 14.0.0.
 var grTransitions = map[[2]int][3]int{
@@ -92,22 +92,23 @@ var grTransitions = map[[2]int][3]int{
 }
 
 // transitionGraphemeState determines the new state of the grapheme cluster
-// parser given the current state and the next code point. It also returns
-// whether a cluster boundary was detected.
-func transitionGraphemeState(state int, r rune) (newState int, boundary bool) {
+// parser given the current state and the next code point. It also returns the
+// code point's grapheme property (the value mapped by the [graphemeCodePoints]
+// table) and whether a cluster boundary was detected.
+func transitionGraphemeState(state int, r rune) (newState, prop int, boundary bool) {
 	// Determine the property of the next character.
-	nextProperty := property(graphemeCodePoints, r)
+	prop = property(graphemeCodePoints, r)
 
 	// Find the applicable transition.
-	transition, ok := grTransitions[[2]int{state, nextProperty}]
+	transition, ok := grTransitions[[2]int{state, prop}]
 	if ok {
 		// We have a specific transition. We'll use it.
-		return transition[0], transition[1] == grBoundary
+		return transition[0], prop, transition[1] == grBoundary
 	}
 
 	// No specific transition found. Try the less specific ones.
 	transAnyProp, okAnyProp := grTransitions[[2]int{state, prAny}]
-	transAnyState, okAnyState := grTransitions[[2]int{grAny, nextProperty}]
+	transAnyState, okAnyState := grTransitions[[2]int{grAny, prop}]
 	if okAnyProp && okAnyState {
 		// Both apply. We'll use a mix (see comments for grTransitions).
 		newState = transAnyState[0]
@@ -120,7 +121,7 @@ func transitionGraphemeState(state int, r rune) (newState int, boundary bool) {
 
 	if okAnyProp {
 		// We only have a specific state.
-		return transAnyProp[0], transAnyProp[1] == grBoundary
+		return transAnyProp[0], prop, transAnyProp[1] == grBoundary
 		// This branch will probably never be reached because okAnyState will
 		// always be true given the current transition map. But we keep it here
 		// for future modifications to the transition map where this may not be
@@ -129,9 +130,9 @@ func transitionGraphemeState(state int, r rune) (newState int, boundary bool) {
 
 	if okAnyState {
 		// We only have a specific property.
-		return transAnyState[0], transAnyState[1] == grBoundary
+		return transAnyState[0], prop, transAnyState[1] == grBoundary
 	}
 
 	// No known transition. GB999: Any ÷ Any.
-	return grAny, true
+	return grAny, prop, true
 }
diff --git a/vendor/github.com/rivo/uniseg/line.go b/vendor/github.com/rivo/uniseg/line.go
index 03d1928c0..c0398cacf 100644
--- a/vendor/github.com/rivo/uniseg/line.go
+++ b/vendor/github.com/rivo/uniseg/line.go
@@ -13,7 +13,7 @@ import "unicode/utf8"
 //
 // The returned "segment" may not be broken into smaller parts, unless no other
 // breaking opportunities present themselves, in which case you may break by
-// grapheme clusters (using the FirstGraphemeCluster() function to determine the
+// grapheme clusters (using the [FirstGraphemeCluster] function to determine the
 // grapheme clusters).
 //
 // The "mustBreak" flag indicates whether you MUST break the line after the
@@ -42,7 +42,7 @@ import "unicode/utf8"
 //
 // Note also that this algorithm may break within grapheme clusters. This is
 // addressed in Section 8.2 Example 6 of UAX #14. To avoid this, you can use
-// the Step() function instead.
+// the [Step] function instead.
 func FirstLineSegment(b []byte, state int) (segment, rest []byte, mustBreak bool, newState int) {
 	// An empty byte slice returns nothing.
 	if len(b) == 0 {
@@ -114,7 +114,9 @@ func FirstLineSegmentInString(str string, state int) (segment, rest string, must
 }
 
 // HasTrailingLineBreak returns true if the last rune in the given byte slice is
-// one of the hard line break code points as defined in LB4 and LB5 of UAX #14.
+// one of the hard line break code points defined in LB4 and LB5 of [UAX #14].
+//
+// [UAX #14]: https://www.unicode.org/reports/tr14/#Algorithm
 func HasTrailingLineBreak(b []byte) bool {
 	r, _ := utf8.DecodeLastRune(b)
 	property, _ := propertyWithGenCat(lineBreakCodePoints, r)
diff --git a/vendor/github.com/rivo/uniseg/lineproperties.go b/vendor/github.com/rivo/uniseg/lineproperties.go
index 98948adf8..32169306e 100644
--- a/vendor/github.com/rivo/uniseg/lineproperties.go
+++ b/vendor/github.com/rivo/uniseg/lineproperties.go
@@ -4,7 +4,10 @@ package uniseg
 
 // lineBreakCodePoints are taken from
 // https://www.unicode.org/Public/14.0.0/ucd/LineBreak.txt
-// on July 25, 2022. See https://www.unicode.org/license.html for the Unicode
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var lineBreakCodePoints = [][4]int{
 	{0x0000, 0x0008, prCM, gcCc},     //     [9] <control-0000>..<control-0008>
diff --git a/vendor/github.com/rivo/uniseg/properties.go b/vendor/github.com/rivo/uniseg/properties.go
index 0bb3db62e..bc3c7bcf3 100644
--- a/vendor/github.com/rivo/uniseg/properties.go
+++ b/vendor/github.com/rivo/uniseg/properties.go
@@ -3,9 +3,9 @@ package uniseg
 // The Unicode properties as used in the various parsers. Only the ones needed
 // in the context of this package are included.
 const (
-	prXX  = 0    // Same as prAny.
-	prAny = iota // prAny must be 0.
-	prPrepend
+	prXX      = 0    // Same as prAny.
+	prAny     = iota // prAny must be 0.
+	prPrepend        // Grapheme properties must come first, to reduce the number of bits stored in the state vector.
 	prCR
 	prLF
 	prControl
@@ -86,6 +86,7 @@ const (
 	prW
 	prH
 	prF
+	prEmojiPresentation
 )
 
 // Unicode General Categories. Only the ones needed in the context of this
@@ -124,6 +125,12 @@ const (
 	gcCo
 )
 
+// Special code points.
+const (
+	vs15 = 0xfe0e // Variation Selector-15 (text presentation)
+	vs16 = 0xfe0f // Variation Selector-16 (emoji presentation)
+)
+
 // propertySearch performs a binary search on a property slice and returns the
 // entry whose range (start = first array element, end = second array element)
 // includes r, or an array of 0's if no such entry was found.
diff --git a/vendor/github.com/rivo/uniseg/sentenceproperties.go b/vendor/github.com/rivo/uniseg/sentenceproperties.go
index e6fe7254c..ba0cf2de1 100644
--- a/vendor/github.com/rivo/uniseg/sentenceproperties.go
+++ b/vendor/github.com/rivo/uniseg/sentenceproperties.go
@@ -4,7 +4,10 @@ package uniseg
 
 // sentenceBreakCodePoints are taken from
 // https://www.unicode.org/Public/14.0.0/ucd/auxiliary/SentenceBreakProperty.txt
-// on July 25, 2022. See https://www.unicode.org/license.html for the Unicode
+// and
+// https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
+// ("Extended_Pictographic" only)
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var sentenceBreakCodePoints = [][3]int{
 	{0x0009, 0x0009, prSp},        // Cc       <control-0009>
diff --git a/vendor/github.com/rivo/uniseg/step.go b/vendor/github.com/rivo/uniseg/step.go
index 8c515a966..55e7f1219 100644
--- a/vendor/github.com/rivo/uniseg/step.go
+++ b/vendor/github.com/rivo/uniseg/step.go
@@ -2,31 +2,37 @@ package uniseg
 
 import "unicode/utf8"
 
-// The bit masks used to extract boundary information returned by the Step()
-// function.
+// The bit masks used to extract boundary information returned by [Step].
 const (
 	MaskLine     = 3
 	MaskWord     = 4
 	MaskSentence = 8
 )
 
-// The bit positions by which boundary flags are shifted by the Step() function.
-// This must correspond to the Mask constants.
+// The number of bits to shift the boundary information returned by [Step] to
+// obtain the monospace width of the grapheme cluster.
+const ShiftWidth = 4
+
+// The bit positions by which boundary flags are shifted by the [Step] function.
+// These must correspond to the Mask constants.
 const (
 	shiftWord     = 2
 	shiftSentence = 3
+	// shiftwWidth is ShiftWidth above. No mask as these are always the remaining bits.
 )
 
-// The bit positions by which states are shifted by the Step() function. These
+// The bit positions by which states are shifted by the [Step] function. These
 // values must ensure state values defined for each of the boundary algorithms
-// don't overlap (and that they all still fit in a single int).
+// don't overlap (and that they all still fit in a single int). These must
+// correspond to the Mask constants.
 const (
 	shiftWordState     = 4
 	shiftSentenceState = 9
 	shiftLineState     = 13
+	shiftPropState     = 21 // No mask as these are always the remaining bits.
 )
 
-// The bit mask used to extract the state returned by the Step() function, after
+// The bit mask used to extract the state returned by the [Step] function, after
 // shifting. These values must correspond to the shift constants.
 const (
 	maskGraphemeState = 0xf
@@ -37,10 +43,11 @@ const (
 
 // Step returns the first grapheme cluster (user-perceived character) found in
 // the given byte slice. It also returns information about the boundary between
-// that grapheme cluster and the one following it. There are three types of
-// boundary information: word boundaries, sentence boundaries, and line breaks.
-// This function is therefore a combination of FirstGraphemeCluster(),
-// FirstWord(), FirstSentence(), and FirstLineSegment().
+// that grapheme cluster and the one following it as well as the monospace width
+// of the grapheme cluster. There are three types of boundary information: word
+// boundaries, sentence boundaries, and line breaks. This function is therefore
+// a combination of [FirstGraphemeCluster], [FirstWord], [FirstSentence], and
+// [FirstLineSegment].
 //
 // The "boundaries" return value can be evaluated as follows:
 //
@@ -54,6 +61,8 @@ const (
 //     boundary.
 //   - boundaries&MaskLine == LineCanBreak: You may or may not break the line at
 //     the boundary.
+//   - boundaries >> ShiftWidth: The width of the grapheme cluster for most
+//     monospace fonts where a value of 1 represents one character cell.
 //
 // This function can be called continuously to extract all grapheme clusters
 // from a byte slice, as illustrated in the examples below.
@@ -87,14 +96,20 @@ func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState i
 	// Extract the first rune.
 	r, length := utf8.DecodeRune(b)
 	if len(b) <= length { // If we're already past the end, there is nothing else to parse.
-		return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
+		var prop int
+		if state < 0 {
+			prop = property(graphemeCodePoints, r)
+		} else {
+			prop = state >> shiftPropState
+		}
+		return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
 	}
 
 	// If we don't know the state, determine it now.
-	var graphemeState, wordState, sentenceState, lineState int
+	var graphemeState, wordState, sentenceState, lineState, firstProp int
 	remainder := b[length:]
 	if state < 0 {
-		graphemeState, _ = transitionGraphemeState(state, r)
+		graphemeState, firstProp, _ = transitionGraphemeState(state, r)
 		wordState, _ = transitionWordBreakState(state, r, remainder, "")
 		sentenceState, _ = transitionSentenceBreakState(state, r, remainder, "")
 		lineState, _ = transitionLineBreakState(state, r, remainder, "")
@@ -103,36 +118,51 @@ func Step(b []byte, state int) (cluster, rest []byte, boundaries int, newState i
 		wordState = (state >> shiftWordState) & maskWordState
 		sentenceState = (state >> shiftSentenceState) & maskSentenceState
 		lineState = (state >> shiftLineState) & maskLineState
+		firstProp = state >> shiftPropState
 	}
 
 	// Transition until we find a grapheme cluster boundary.
-	var (
-		graphemeBoundary, wordBoundary, sentenceBoundary bool
-		lineBreak                                        int
-	)
+	width := runeWidth(r, firstProp)
 	for {
+		var (
+			graphemeBoundary, wordBoundary, sentenceBoundary bool
+			lineBreak, prop                                  int
+		)
+
 		r, l := utf8.DecodeRune(remainder)
 		remainder = b[length+l:]
 
-		graphemeState, graphemeBoundary = transitionGraphemeState(graphemeState, r)
+		graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r)
 		wordState, wordBoundary = transitionWordBreakState(wordState, r, remainder, "")
 		sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, remainder, "")
 		lineState, lineBreak = transitionLineBreakState(lineState, r, remainder, "")
 
 		if graphemeBoundary {
-			boundary := lineBreak
+			boundary := lineBreak | (width << ShiftWidth)
 			if wordBoundary {
 				boundary |= 1 << shiftWord
 			}
 			if sentenceBoundary {
 				boundary |= 1 << shiftSentence
 			}
-			return b[:length], b[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState)
+			return b[:length], b[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState)
+		}
+
+		if r == vs16 {
+			width = 2
+		} else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL {
+			width += runeWidth(r, prop)
+		} else if firstProp == prExtendedPictographic {
+			if r == vs15 {
+				width = 1
+			} else {
+				width = 2
+			}
 		}
 
 		length += l
 		if len(b) <= length {
-			return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
+			return b, nil, LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
 		}
 	}
 }
@@ -147,14 +177,15 @@ func StepString(str string, state int) (cluster, rest string, boundaries int, ne
 	// Extract the first rune.
 	r, length := utf8.DecodeRuneInString(str)
 	if len(str) <= length { // If we're already past the end, there is nothing else to parse.
-		return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
+		prop := property(graphemeCodePoints, r)
+		return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (runeWidth(r, prop) << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
 	}
 
 	// If we don't know the state, determine it now.
-	var graphemeState, wordState, sentenceState, lineState int
+	var graphemeState, wordState, sentenceState, lineState, firstProp int
 	remainder := str[length:]
 	if state < 0 {
-		graphemeState, _ = transitionGraphemeState(state, r)
+		graphemeState, firstProp, _ = transitionGraphemeState(state, r)
 		wordState, _ = transitionWordBreakState(state, r, nil, remainder)
 		sentenceState, _ = transitionSentenceBreakState(state, r, nil, remainder)
 		lineState, _ = transitionLineBreakState(state, r, nil, remainder)
@@ -163,36 +194,51 @@ func StepString(str string, state int) (cluster, rest string, boundaries int, ne
 		wordState = (state >> shiftWordState) & maskWordState
 		sentenceState = (state >> shiftSentenceState) & maskSentenceState
 		lineState = (state >> shiftLineState) & maskLineState
+		firstProp = state >> shiftPropState
 	}
 
 	// Transition until we find a grapheme cluster boundary.
-	var (
-		graphemeBoundary, wordBoundary, sentenceBoundary bool
-		lineBreak                                        int
-	)
+	width := runeWidth(r, firstProp)
 	for {
+		var (
+			graphemeBoundary, wordBoundary, sentenceBoundary bool
+			lineBreak, prop                                  int
+		)
+
 		r, l := utf8.DecodeRuneInString(remainder)
 		remainder = str[length+l:]
 
-		graphemeState, graphemeBoundary = transitionGraphemeState(graphemeState, r)
+		graphemeState, prop, graphemeBoundary = transitionGraphemeState(graphemeState, r)
 		wordState, wordBoundary = transitionWordBreakState(wordState, r, nil, remainder)
 		sentenceState, sentenceBoundary = transitionSentenceBreakState(sentenceState, r, nil, remainder)
 		lineState, lineBreak = transitionLineBreakState(lineState, r, nil, remainder)
 
 		if graphemeBoundary {
-			boundary := lineBreak
+			boundary := lineBreak | (width << ShiftWidth)
 			if wordBoundary {
 				boundary |= 1 << shiftWord
 			}
 			if sentenceBoundary {
 				boundary |= 1 << shiftSentence
 			}
-			return str[:length], str[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState)
+			return str[:length], str[length:], boundary, graphemeState | (wordState << shiftWordState) | (sentenceState << shiftSentenceState) | (lineState << shiftLineState) | (prop << shiftPropState)
+		}
+
+		if r == vs16 {
+			width = 2
+		} else if firstProp != prExtendedPictographic && firstProp != prRegionalIndicator && firstProp != prL {
+			width += runeWidth(r, prop)
+		} else if firstProp == prExtendedPictographic {
+			if r == vs15 {
+				width = 1
+			} else {
+				width = 2
+			}
 		}
 
 		length += l
 		if len(str) <= length {
-			return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState)
+			return str, "", LineMustBreak | (1 << shiftWord) | (1 << shiftSentence) | (width << ShiftWidth), grAny | (wbAny << shiftWordState) | (sbAny << shiftSentenceState) | (lbAny << shiftLineState) | (prop << shiftPropState)
 		}
 	}
 }
diff --git a/vendor/github.com/rivo/uniseg/width.go b/vendor/github.com/rivo/uniseg/width.go
new file mode 100644
index 000000000..12a57cc2e
--- /dev/null
+++ b/vendor/github.com/rivo/uniseg/width.go
@@ -0,0 +1,54 @@
+package uniseg
+
+// runeWidth returns the monospace width for the given rune. The provided
+// grapheme property is a value mapped by the [graphemeCodePoints] table.
+//
+// Every rune has a width of 1, except for runes with the following properties
+// (evaluated in this order):
+//
+//   - Control, CR, LF, Extend, ZWJ: Width of 0
+//   - \u2e3a, TWO-EM DASH: Width of 3
+//   - \u2e3b, THREE-EM DASH: Width of 4
+//   - East-Asian width Fullwidth and Wide: Width of 2 (Ambiguous and Neutral
+//     have a width of 1)
+//   - Regional Indicator: Width of 2
+//   - Extended Pictographic: Width of 2, unless Emoji Presentation is "No".
+func runeWidth(r rune, graphemeProperty int) int {
+	switch graphemeProperty {
+	case prControl, prCR, prLF, prExtend, prZWJ:
+		return 0
+	case prRegionalIndicator:
+		return 2
+	case prExtendedPictographic:
+		if property(emojiPresentation, r) == prEmojiPresentation {
+			return 2
+		}
+		return 1
+	}
+
+	switch r {
+	case 0x2e3a:
+		return 3
+	case 0x2e3b:
+		return 4
+	}
+
+	switch property(eastAsianWidth, r) {
+	case prW, prF:
+		return 2
+	}
+
+	return 1
+}
+
+// StringWidth returns the monospace width for the given string, that is, the
+// number of same-size cells to be occupied by the string.
+func StringWidth(s string) (width int) {
+	state := -1
+	for len(s) > 0 {
+		var w int
+		_, s, w, state = FirstGraphemeClusterInString(s, state)
+		width += w
+	}
+	return
+}
diff --git a/vendor/github.com/rivo/uniseg/wordproperties.go b/vendor/github.com/rivo/uniseg/wordproperties.go
index 48697a433..805cc536c 100644
--- a/vendor/github.com/rivo/uniseg/wordproperties.go
+++ b/vendor/github.com/rivo/uniseg/wordproperties.go
@@ -7,7 +7,7 @@ package uniseg
 // and
 // https://unicode.org/Public/14.0.0/ucd/emoji/emoji-data.txt
 // ("Extended_Pictographic" only)
-// on July 25, 2022. See https://www.unicode.org/license.html for the Unicode
+// on September 10, 2022. See https://www.unicode.org/license.html for the Unicode
 // license agreement.
 var workBreakCodePoints = [][3]int{
 	{0x000A, 0x000A, prLF},                     // Cc       <control-000A>
@@ -624,8 +624,8 @@ var workBreakCodePoints = [][3]int{
 	{0x212A, 0x212D, prALetter},                // L&   [4] KELVIN SIGN..BLACK-LETTER CAPITAL C
 	{0x212F, 0x2134, prALetter},                // L&   [6] SCRIPT SMALL E..SCRIPT SMALL O
 	{0x2135, 0x2138, prALetter},                // Lo   [4] ALEF SYMBOL..DALET SYMBOL
-	{0x2139, 0x2139, prALetter},                // L&       INFORMATION SOURCE
 	{0x2139, 0x2139, prExtendedPictographic},   // E0.6   [1] (ℹ️)       information
+	{0x2139, 0x2139, prALetter},                // L&       INFORMATION SOURCE
 	{0x213C, 0x213F, prALetter},                // L&   [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
 	{0x2145, 0x2149, prALetter},                // L&   [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
 	{0x214E, 0x214E, prALetter},                // L&       TURNED SMALL F
diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
index bbaba18bc..f3eb993bf 100644
--- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go
+++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go
@@ -6,7 +6,10 @@ package cpu
 
 import "runtime"
 
-const cacheLineSize = 64
+// cacheLineSize is used to prevent false sharing of cache lines.
+// We choose 128 because Apple Silicon, a.k.a. M1, has 128-byte cache line size.
+// It doesn't cost much and is much more future-proof.
+const cacheLineSize = 128
 
 func initOptions() {
 	options = []option{
diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go
index a25223b8f..67e5b0115 100644
--- a/vendor/golang.org/x/sys/plan9/syscall.go
+++ b/vendor/golang.org/x/sys/plan9/syscall.go
@@ -29,8 +29,6 @@ import (
 	"bytes"
 	"strings"
 	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
 )
 
 // ByteSliceFromString returns a NUL-terminated slice of bytes
@@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
 		ptr = unsafe.Pointer(uintptr(ptr) + 1)
 	}
 
-	var s []byte
-	h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
-	h.Data = unsafe.Pointer(p)
-	h.Len = n
-	h.Cap = n
-
-	return string(s)
+	return string(unsafe.Slice(p, n))
 }
 
 // Single-word zero for use when we need a valid pointer to 0 bytes.
diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go
index 884430b81..0d12c0851 100644
--- a/vendor/golang.org/x/sys/unix/ioctl_linux.go
+++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go
@@ -4,9 +4,7 @@
 
 package unix
 
-import (
-	"unsafe"
-)
+import "unsafe"
 
 // IoctlRetInt performs an ioctl operation specified by req on a device
 // associated with opened file descriptor fd, and returns a non-negative
@@ -217,3 +215,19 @@ func IoctlKCMAttach(fd int, info KCMAttach) error {
 func IoctlKCMUnattach(fd int, info KCMUnattach) error {
 	return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))
 }
+
+// IoctlLoopGetStatus64 gets the status of the loop device associated with the
+// file descriptor fd using the LOOP_GET_STATUS64 operation.
+func IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {
+	var value LoopInfo64
+	if err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil {
+		return nil, err
+	}
+	return &value, nil
+}
+
+// IoctlLoopSetStatus64 sets the status of the loop device associated with the
+// file descriptor fd using the LOOP_SET_STATUS64 operation.
+func IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {
+	return ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))
+}
diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh
index 6fc18353d..1b2b424a7 100644
--- a/vendor/golang.org/x/sys/unix/mkall.sh
+++ b/vendor/golang.org/x/sys/unix/mkall.sh
@@ -156,10 +156,10 @@ openbsd_amd64)
 	mktypes="GOARCH=$GOARCH go tool cgo -godefs"
 	;;
 openbsd_arm)
+	mkasm="go run mkasm.go"
 	mkerrors="$mkerrors"
-	mksyscall="go run mksyscall.go -l32 -openbsd -arm"
+	mksyscall="go run mksyscall.go -l32 -openbsd -arm -libc"
 	mksysctl="go run mksysctl_openbsd.go"
-	mksysnum="go run mksysnum.go 'https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master'"
 	# Let the type of C char be signed for making the bare syscall
 	# API consistent across platforms.
 	mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
@@ -214,11 +214,6 @@ esac
 			if [ "$GOOSARCH" == "aix_ppc64" ]; then
 				# aix/ppc64 script generates files instead of writing to stdin.
 				echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_"$GOOSARCH"_gccgo.go && gofmt -w zsyscall_"$GOOSARCH"_gc.go " ;
-			elif [ "$GOOS" == "darwin" ]; then
-			        # 1.12 and later, syscalls via libSystem
-				echo "$mksyscall -tags $GOOS,$GOARCH,go1.12 $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go";
-				# 1.13 and later, syscalls via libSystem (including syscallPtr)
-				echo "$mksyscall -tags $GOOS,$GOARCH,go1.13 syscall_darwin.1_13.go |gofmt >zsyscall_$GOOSARCH.1_13.go";
 			elif [ "$GOOS" == "illumos" ]; then
 			        # illumos code generation requires a --illumos switch
 			        echo "$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go";
diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go
deleted file mode 100644
index 8ba89ed86..000000000
--- a/vendor/golang.org/x/sys/unix/str.go
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
-// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris
-
-package unix
-
-func itoa(val int) string { // do it here rather than with fmt to avoid dependency
-	if val < 0 {
-		return "-" + uitoa(uint(-val))
-	}
-	return uitoa(uint(val))
-}
-
-func uitoa(val uint) string {
-	var buf [32]byte // big enough for int64
-	i := len(buf) - 1
-	for val >= 10 {
-		buf[i] = byte(val%10 + '0')
-		i--
-		val /= 10
-	}
-	buf[i] = byte(val + '0')
-	return string(buf[i:])
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go
index 649fa8740..63e8c8383 100644
--- a/vendor/golang.org/x/sys/unix/syscall.go
+++ b/vendor/golang.org/x/sys/unix/syscall.go
@@ -29,8 +29,6 @@ import (
 	"bytes"
 	"strings"
 	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
 )
 
 // ByteSliceFromString returns a NUL-terminated slice of bytes
@@ -82,13 +80,7 @@ func BytePtrToString(p *byte) string {
 		ptr = unsafe.Pointer(uintptr(ptr) + 1)
 	}
 
-	var s []byte
-	h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
-	h.Data = unsafe.Pointer(p)
-	h.Len = n
-	h.Cap = n
-
-	return string(s)
+	return string(unsafe.Slice(p, n))
 }
 
 // Single-word zero for use when we need a valid pointer to 0 bytes.
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
deleted file mode 100644
index b0098607c..000000000
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_12.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build darwin && go1.12 && !go1.13
-// +build darwin,go1.12,!go1.13
-
-package unix
-
-import (
-	"unsafe"
-)
-
-const _SYS_GETDIRENTRIES64 = 344
-
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-	// To implement this using libSystem we'd need syscall_syscallPtr for
-	// fdopendir. However, syscallPtr was only added in Go 1.13, so we fall
-	// back to raw syscalls for this func on Go 1.12.
-	var p unsafe.Pointer
-	if len(buf) > 0 {
-		p = unsafe.Pointer(&buf[0])
-	} else {
-		p = unsafe.Pointer(&_zero)
-	}
-	r0, _, e1 := Syscall6(_SYS_GETDIRENTRIES64, uintptr(fd), uintptr(p), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)
-	n = int(r0)
-	if e1 != 0 {
-		return n, errnoErr(e1)
-	}
-	return n, nil
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
deleted file mode 100644
index 1596426b1..000000000
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright 2019 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-//go:build darwin && go1.13
-// +build darwin,go1.13
-
-package unix
-
-import (
-	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
-)
-
-//sys	closedir(dir uintptr) (err error)
-//sys	readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
-
-func fdopendir(fd int) (dir uintptr, err error) {
-	r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
-	dir = uintptr(r0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_fdopendir_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
-
-func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
-	// Simulate Getdirentries using fdopendir/readdir_r/closedir.
-	// We store the number of entries to skip in the seek
-	// offset of fd. See issue #31368.
-	// It's not the full required semantics, but should handle the case
-	// of calling Getdirentries or ReadDirent repeatedly.
-	// It won't handle assigning the results of lseek to *basep, or handle
-	// the directory being edited underfoot.
-	skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
-	if err != nil {
-		return 0, err
-	}
-
-	// We need to duplicate the incoming file descriptor
-	// because the caller expects to retain control of it, but
-	// fdopendir expects to take control of its argument.
-	// Just Dup'ing the file descriptor is not enough, as the
-	// result shares underlying state. Use Openat to make a really
-	// new file descriptor referring to the same directory.
-	fd2, err := Openat(fd, ".", O_RDONLY, 0)
-	if err != nil {
-		return 0, err
-	}
-	d, err := fdopendir(fd2)
-	if err != nil {
-		Close(fd2)
-		return 0, err
-	}
-	defer closedir(d)
-
-	var cnt int64
-	for {
-		var entry Dirent
-		var entryp *Dirent
-		e := readdir_r(d, &entry, &entryp)
-		if e != 0 {
-			return n, errnoErr(e)
-		}
-		if entryp == nil {
-			break
-		}
-		if skip > 0 {
-			skip--
-			cnt++
-			continue
-		}
-
-		reclen := int(entry.Reclen)
-		if reclen > len(buf) {
-			// Not enough room. Return for now.
-			// The counter will let us know where we should start up again.
-			// Note: this strategy for suspending in the middle and
-			// restarting is O(n^2) in the length of the directory. Oh well.
-			break
-		}
-
-		// Copy entry into return buffer.
-		var s []byte
-		hdr := (*unsafeheader.Slice)(unsafe.Pointer(&s))
-		hdr.Data = unsafe.Pointer(&entry)
-		hdr.Cap = reclen
-		hdr.Len = reclen
-		copy(buf, s)
-
-		buf = buf[reclen:]
-		n += reclen
-		cnt++
-	}
-	// Set the seek offset of the input fd to record
-	// how many files we've already returned.
-	_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
-	if err != nil {
-		return n, err
-	}
-
-	return n, nil
-}
diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go
index 4f87f16ea..1f6338218 100644
--- a/vendor/golang.org/x/sys/unix/syscall_darwin.go
+++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go
@@ -19,6 +19,96 @@ import (
 	"unsafe"
 )
 
+//sys	closedir(dir uintptr) (err error)
+//sys	readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)
+
+func fdopendir(fd int) (dir uintptr, err error) {
+	r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)
+	dir = uintptr(r0)
+	if e1 != 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
+var libc_fdopendir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib"
+
+func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {
+	// Simulate Getdirentries using fdopendir/readdir_r/closedir.
+	// We store the number of entries to skip in the seek
+	// offset of fd. See issue #31368.
+	// It's not the full required semantics, but should handle the case
+	// of calling Getdirentries or ReadDirent repeatedly.
+	// It won't handle assigning the results of lseek to *basep, or handle
+	// the directory being edited underfoot.
+	skip, err := Seek(fd, 0, 1 /* SEEK_CUR */)
+	if err != nil {
+		return 0, err
+	}
+
+	// We need to duplicate the incoming file descriptor
+	// because the caller expects to retain control of it, but
+	// fdopendir expects to take control of its argument.
+	// Just Dup'ing the file descriptor is not enough, as the
+	// result shares underlying state. Use Openat to make a really
+	// new file descriptor referring to the same directory.
+	fd2, err := Openat(fd, ".", O_RDONLY, 0)
+	if err != nil {
+		return 0, err
+	}
+	d, err := fdopendir(fd2)
+	if err != nil {
+		Close(fd2)
+		return 0, err
+	}
+	defer closedir(d)
+
+	var cnt int64
+	for {
+		var entry Dirent
+		var entryp *Dirent
+		e := readdir_r(d, &entry, &entryp)
+		if e != 0 {
+			return n, errnoErr(e)
+		}
+		if entryp == nil {
+			break
+		}
+		if skip > 0 {
+			skip--
+			cnt++
+			continue
+		}
+
+		reclen := int(entry.Reclen)
+		if reclen > len(buf) {
+			// Not enough room. Return for now.
+			// The counter will let us know where we should start up again.
+			// Note: this strategy for suspending in the middle and
+			// restarting is O(n^2) in the length of the directory. Oh well.
+			break
+		}
+
+		// Copy entry into return buffer.
+		s := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)
+		copy(buf, s)
+
+		buf = buf[reclen:]
+		n += reclen
+		cnt++
+	}
+	// Set the seek offset of the input fd to record
+	// how many files we've already returned.
+	_, err = Seek(fd, cnt, 0 /* SEEK_SET */)
+	if err != nil {
+		return n, err
+	}
+
+	return n, nil
+}
+
 // SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.
 type SockaddrDatalink struct {
 	Len    uint8
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
index c3c4c698e..b11ede89a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go
@@ -61,7 +61,7 @@ func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
 }
 
 func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
+	ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)}
 	err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 	return int(ioDesc.Len), err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
index 82be61a2f..9ed8eec6c 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go
@@ -61,7 +61,7 @@ func PtraceGetFsBase(pid int, fsbase *int64) (err error) {
 }
 
 func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
+	ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)}
 	err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 	return int(ioDesc.Len), err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
index cd58f1026..f8ac98247 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go
@@ -57,7 +57,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
 func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 
 func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint32(countin)}
+	ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint32(countin)}
 	err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 	return int(ioDesc.Len), err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
index d6f538f9e..8e932036e 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go
@@ -57,7 +57,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
 func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 
 func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
+	ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)}
 	err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 	return int(ioDesc.Len), err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go
index 8ea6e9610..cbe122278 100644
--- a/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go
@@ -57,7 +57,7 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e
 func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)
 
 func PtraceIO(req int, pid int, addr uintptr, out []byte, countin int) (count int, err error) {
-	ioDesc := PtraceIoDesc{Op: int32(req), Offs: (*byte)(unsafe.Pointer(addr)), Addr: (*byte)(unsafe.Pointer(&out[0])), Len: uint64(countin)}
+	ioDesc := PtraceIoDesc{Op: int32(req), Offs: uintptr(unsafe.Pointer(addr)), Addr: uintptr(unsafe.Pointer(&out[0])), Len: uint64(countin)}
 	err = ptrace(PT_IO, pid, uintptr(unsafe.Pointer(&ioDesc)), 0)
 	return int(ioDesc.Len), err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index ecb0f27fb..47146911f 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -13,6 +13,7 @@ package unix
 
 import (
 	"encoding/binary"
+	"strconv"
 	"syscall"
 	"time"
 	"unsafe"
@@ -233,7 +234,7 @@ func Futimesat(dirfd int, path string, tv []Timeval) error {
 func Futimes(fd int, tv []Timeval) (err error) {
 	// Believe it or not, this is the best we can do on Linux
 	// (and is what glibc does).
-	return Utimes("/proc/self/fd/"+itoa(fd), tv)
+	return Utimes("/proc/self/fd/"+strconv.Itoa(fd), tv)
 }
 
 const ImplementsGetwd = true
@@ -1891,17 +1892,28 @@ func PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uint
 	return int(ret), nil
 }
 
-// issue 1435.
-// On linux Setuid and Setgid only affects the current thread, not the process.
-// This does not match what most callers expect so we must return an error
-// here rather than letting the caller think that the call succeeded.
-
 func Setuid(uid int) (err error) {
-	return EOPNOTSUPP
+	return syscall.Setuid(uid)
 }
 
-func Setgid(uid int) (err error) {
-	return EOPNOTSUPP
+func Setgid(gid int) (err error) {
+	return syscall.Setgid(gid)
+}
+
+func Setreuid(ruid, euid int) (err error) {
+	return syscall.Setreuid(ruid, euid)
+}
+
+func Setregid(rgid, egid int) (err error) {
+	return syscall.Setregid(rgid, egid)
+}
+
+func Setresuid(ruid, euid, suid int) (err error) {
+	return syscall.Setresuid(ruid, euid, suid)
+}
+
+func Setresgid(rgid, egid, sgid int) (err error) {
+	return syscall.Setresgid(rgid, egid, sgid)
 }
 
 // SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
index 518e476e6..ff5b5899d 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go
@@ -41,10 +41,6 @@ func setTimeval(sec, usec int64) Timeval {
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 //sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
 //sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
-//sysnb	Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
-//sysnb	Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 //sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
 //sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
index f5e9d6bef..9b2703532 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go
@@ -46,11 +46,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
index c1a7778f1..856ad1d63 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go
@@ -62,10 +62,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 //sys	Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT
 //sys	setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32
 //sys	setfsuid(uid int) (prev int, err error) = SYS_SETFSUID32
-//sysnb	Setregid(rgid int, egid int) (err error) = SYS_SETREGID32
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32
-//sysnb	Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 //sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
index d83e2c657..6422704bc 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go
@@ -39,11 +39,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
index 0b69c3eff..59dab510e 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go
@@ -34,10 +34,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
index 98a2660b9..bfef09a39 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go
@@ -37,11 +37,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 //sys	Statfs(path string, buf *Statfs_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
index b8a18c0ad..ab3025096 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go
@@ -32,10 +32,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr,
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 //sys	SyncFileRange(fd int, off int64, n int64, flags int) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
index 4ed9e67c6..eac1cf1ac 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go
@@ -34,10 +34,6 @@ import (
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)
 //sys	Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
index db63d384c..4df56616b 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go
@@ -34,11 +34,7 @@ package unix
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 //sys	Stat(path string, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
index 925a748a3..5f4243dea 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go
@@ -38,11 +38,7 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
index 6fcf277b0..d0a7d4066 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go
@@ -34,11 +34,7 @@ import (
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 //sys	Stat(path string, stat *Stat_t) (err error)
 //sys	Statfs(path string, buf *Statfs_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
index 02a45d9cc..f5c793be2 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go
@@ -31,11 +31,7 @@ package unix
 //sys	sendfile(outfd int, infd int, offset *int64, count int) (written int, err error)
 //sys	setfsgid(gid int) (prev int, err error)
 //sys	setfsuid(uid int) (prev int, err error)
-//sysnb	Setregid(rgid int, egid int) (err error)
-//sysnb	Setresgid(rgid int, egid int, sgid int) (err error)
-//sysnb	Setresuid(ruid int, euid int, suid int) (err error)
 //sysnb	Setrlimit(resource int, rlim *Rlimit) (err error)
-//sysnb	Setreuid(ruid int, euid int) (err error)
 //sys	Shutdown(fd int, how int) (err error)
 //sys	Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
 //sys	Stat(path string, stat *Stat_t) (err error)
diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go
index e23c33de6..5930a8972 100644
--- a/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go
+++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm64)
-// +build openbsd,386 openbsd,amd64 openbsd,arm64
+//go:build (openbsd && 386) || (openbsd && amd64) || (openbsd && arm) || (openbsd && arm64)
+// +build openbsd,386 openbsd,amd64 openbsd,arm openbsd,arm64
 
 package unix
 
diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go
index b5ec457cd..8c6f4092a 100644
--- a/vendor/golang.org/x/sys/unix/syscall_solaris.go
+++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go
@@ -750,8 +750,8 @@ type EventPort struct {
 	// we should handle things gracefully. To do so, we need to keep an extra
 	// reference to the cookie around until the event is processed
 	// thus the otherwise seemingly extraneous "cookies" map
-	// The key of this map is a pointer to the corresponding &fCookie.cookie
-	cookies map[*interface{}]*fileObjCookie
+	// The key of this map is a pointer to the corresponding fCookie
+	cookies map[*fileObjCookie]struct{}
 }
 
 // PortEvent is an abstraction of the port_event C struct.
@@ -778,7 +778,7 @@ func NewEventPort() (*EventPort, error) {
 		port:    port,
 		fds:     make(map[uintptr]*fileObjCookie),
 		paths:   make(map[string]*fileObjCookie),
-		cookies: make(map[*interface{}]*fileObjCookie),
+		cookies: make(map[*fileObjCookie]struct{}),
 	}
 	return e, nil
 }
@@ -799,6 +799,7 @@ func (e *EventPort) Close() error {
 	}
 	e.fds = nil
 	e.paths = nil
+	e.cookies = nil
 	return nil
 }
 
@@ -826,17 +827,16 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo
 	if _, found := e.paths[path]; found {
 		return fmt.Errorf("%v is already associated with this Event Port", path)
 	}
-	fobj, err := createFileObj(path, stat)
+	fCookie, err := createFileObjCookie(path, stat, cookie)
 	if err != nil {
 		return err
 	}
-	fCookie := &fileObjCookie{fobj, cookie}
-	_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fobj)), events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
+	_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))
 	if err != nil {
 		return err
 	}
 	e.paths[path] = fCookie
-	e.cookies[&fCookie.cookie] = fCookie
+	e.cookies[fCookie] = struct{}{}
 	return nil
 }
 
@@ -858,7 +858,7 @@ func (e *EventPort) DissociatePath(path string) error {
 	if err == nil {
 		// dissociate was successful, safe to delete the cookie
 		fCookie := e.paths[path]
-		delete(e.cookies, &fCookie.cookie)
+		delete(e.cookies, fCookie)
 	}
 	delete(e.paths, path)
 	return err
@@ -871,13 +871,16 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro
 	if _, found := e.fds[fd]; found {
 		return fmt.Errorf("%v is already associated with this Event Port", fd)
 	}
-	fCookie := &fileObjCookie{nil, cookie}
-	_, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie)))
+	fCookie, err := createFileObjCookie("", nil, cookie)
+	if err != nil {
+		return err
+	}
+	_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))
 	if err != nil {
 		return err
 	}
 	e.fds[fd] = fCookie
-	e.cookies[&fCookie.cookie] = fCookie
+	e.cookies[fCookie] = struct{}{}
 	return nil
 }
 
@@ -896,27 +899,31 @@ func (e *EventPort) DissociateFd(fd uintptr) error {
 	if err == nil {
 		// dissociate was successful, safe to delete the cookie
 		fCookie := e.fds[fd]
-		delete(e.cookies, &fCookie.cookie)
+		delete(e.cookies, fCookie)
 	}
 	delete(e.fds, fd)
 	return err
 }
 
-func createFileObj(name string, stat os.FileInfo) (*fileObj, error) {
-	fobj := new(fileObj)
-	bs, err := ByteSliceFromString(name)
-	if err != nil {
-		return nil, err
+func createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {
+	fCookie := new(fileObjCookie)
+	fCookie.cookie = cookie
+	if name != "" && stat != nil {
+		fCookie.fobj = new(fileObj)
+		bs, err := ByteSliceFromString(name)
+		if err != nil {
+			return nil, err
+		}
+		fCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
+		s := stat.Sys().(*syscall.Stat_t)
+		fCookie.fobj.Atim.Sec = s.Atim.Sec
+		fCookie.fobj.Atim.Nsec = s.Atim.Nsec
+		fCookie.fobj.Mtim.Sec = s.Mtim.Sec
+		fCookie.fobj.Mtim.Nsec = s.Mtim.Nsec
+		fCookie.fobj.Ctim.Sec = s.Ctim.Sec
+		fCookie.fobj.Ctim.Nsec = s.Ctim.Nsec
 	}
-	fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))
-	s := stat.Sys().(*syscall.Stat_t)
-	fobj.Atim.Sec = s.Atim.Sec
-	fobj.Atim.Nsec = s.Atim.Nsec
-	fobj.Mtim.Sec = s.Mtim.Sec
-	fobj.Mtim.Nsec = s.Mtim.Nsec
-	fobj.Ctim.Sec = s.Ctim.Sec
-	fobj.Ctim.Nsec = s.Ctim.Nsec
-	return fobj, nil
+	return fCookie, nil
 }
 
 // GetOne wraps port_get(3c) and returns a single PortEvent.
@@ -929,44 +936,50 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {
 	p := new(PortEvent)
 	e.mu.Lock()
 	defer e.mu.Unlock()
-	e.peIntToExt(pe, p)
+	err = e.peIntToExt(pe, p)
+	if err != nil {
+		return nil, err
+	}
 	return p, nil
 }
 
 // peIntToExt converts a cgo portEvent struct into the friendlier PortEvent
 // NOTE: Always call this function while holding the e.mu mutex
-func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) {
+func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error {
+	if e.cookies == nil {
+		return fmt.Errorf("this EventPort is already closed")
+	}
 	peExt.Events = peInt.Events
 	peExt.Source = peInt.Source
-	cookie := (*interface{})(unsafe.Pointer(peInt.User))
-	peExt.Cookie = *cookie
+	fCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))
+	_, found := e.cookies[fCookie]
+
+	if !found {
+		panic("unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254")
+	}
+	peExt.Cookie = fCookie.cookie
+	delete(e.cookies, fCookie)
+
 	switch peInt.Source {
 	case PORT_SOURCE_FD:
-		delete(e.cookies, cookie)
 		peExt.Fd = uintptr(peInt.Object)
 		// Only remove the fds entry if it exists and this cookie matches
 		if fobj, ok := e.fds[peExt.Fd]; ok {
-			if &fobj.cookie == cookie {
+			if fobj == fCookie {
 				delete(e.fds, peExt.Fd)
 			}
 		}
 	case PORT_SOURCE_FILE:
-		if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) {
-			// Use our stashed reference rather than using unsafe on what we got back
-			// the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object)))
-			peExt.fobj = fCookie.fobj
-		} else {
-			panic("mismanaged memory")
-		}
-		delete(e.cookies, cookie)
+		peExt.fobj = fCookie.fobj
 		peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))
 		// Only remove the paths entry if it exists and this cookie matches
 		if fobj, ok := e.paths[peExt.Path]; ok {
-			if &fobj.cookie == cookie {
+			if fobj == fCookie {
 				delete(e.paths, peExt.Path)
 			}
 		}
 	}
+	return nil
 }
 
 // Pending wraps port_getn(3c) and returns how many events are pending.
@@ -990,7 +1003,7 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
 	got := uint32(min)
 	max := uint32(len(s))
 	var err error
-	ps := make([]portEvent, max, max)
+	ps := make([]portEvent, max)
 	_, err = port_getn(e.port, &ps[0], max, &got, timeout)
 	// got will be trustworthy with ETIME, but not any other error.
 	if err != nil && err != ETIME {
@@ -998,8 +1011,18 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error)
 	}
 	e.mu.Lock()
 	defer e.mu.Unlock()
+	valid := 0
 	for i := 0; i < int(got); i++ {
-		e.peIntToExt(&ps[i], &s[i])
+		err2 := e.peIntToExt(&ps[i], &s[i])
+		if err2 != nil {
+			if valid == 0 && err == nil {
+				// If err2 is the only error and there are no valid events
+				// to return, return it to the caller.
+				err = err2
+			}
+			break
+		}
+		valid = i + 1
 	}
-	return int(got), err
+	return valid, err
 }
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go
index 1ff5060b5..9f7535607 100644
--- a/vendor/golang.org/x/sys/unix/syscall_unix.go
+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go
@@ -13,8 +13,6 @@ import (
 	"sync"
 	"syscall"
 	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
 )
 
 var (
@@ -117,11 +115,7 @@ func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (d
 	}
 
 	// Use unsafe to convert addr into a []byte.
-	var b []byte
-	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
-	hdr.Data = unsafe.Pointer(addr)
-	hdr.Cap = length
-	hdr.Len = length
+	b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)
 
 	// Register mapping in m and return it.
 	p := &b[cap(b)-1]
diff --git a/vendor/golang.org/x/sys/unix/sysvshm_unix.go b/vendor/golang.org/x/sys/unix/sysvshm_unix.go
index 0bb4c8de5..5bb41d17b 100644
--- a/vendor/golang.org/x/sys/unix/sysvshm_unix.go
+++ b/vendor/golang.org/x/sys/unix/sysvshm_unix.go
@@ -7,11 +7,7 @@
 
 package unix
 
-import (
-	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
-)
+import "unsafe"
 
 // SysvShmAttach attaches the Sysv shared memory segment associated with the
 // shared memory identifier id.
@@ -34,12 +30,7 @@ func SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {
 	}
 
 	// Use unsafe to convert addr into a []byte.
-	// TODO: convert to unsafe.Slice once we can assume Go 1.17
-	var b []byte
-	hdr := (*unsafeheader.Slice)(unsafe.Pointer(&b))
-	hdr.Data = unsafe.Pointer(addr)
-	hdr.Cap = int(info.Segsz)
-	hdr.Len = int(info.Segsz)
+	b := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))
 	return b, nil
 }
 
diff --git a/vendor/golang.org/x/sys/unix/xattr_bsd.go b/vendor/golang.org/x/sys/unix/xattr_bsd.go
index 25df1e378..663b3779d 100644
--- a/vendor/golang.org/x/sys/unix/xattr_bsd.go
+++ b/vendor/golang.org/x/sys/unix/xattr_bsd.go
@@ -160,13 +160,12 @@ func Lremovexattr(link string, attr string) (err error) {
 }
 
 func Listxattr(file string, dest []byte) (sz int, err error) {
-	d := initxattrdest(dest, 0)
 	destsiz := len(dest)
 
 	// FreeBSD won't allow you to list xattrs from multiple namespaces
-	s := 0
+	s, pos := 0, 0
 	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-		stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
+		stmp, e := ListxattrNS(file, nsid, dest[pos:])
 
 		/* Errors accessing system attrs are ignored so that
 		 * we can implement the Linux-like behavior of omitting errors that
@@ -175,66 +174,102 @@ func Listxattr(file string, dest []byte) (sz int, err error) {
 		 * Linux will still error if we ask for user attributes on a file that
 		 * we don't have read permissions on, so don't ignore those errors
 		 */
-		if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-			continue
-		} else if e != nil {
+		if e != nil {
+			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+				continue
+			}
 			return s, e
 		}
 
 		s += stmp
-		destsiz -= s
-		if destsiz < 0 {
-			destsiz = 0
+		pos = s
+		if pos > destsiz {
+			pos = destsiz
 		}
-		d = initxattrdest(dest, s)
+	}
+
+	return s, nil
+}
+
+func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {
+	d := initxattrdest(dest, 0)
+	destsiz := len(dest)
+
+	s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
+	if e != nil {
+		return 0, err
 	}
 
 	return s, nil
 }
 
 func Flistxattr(fd int, dest []byte) (sz int, err error) {
-	d := initxattrdest(dest, 0)
 	destsiz := len(dest)
 
-	s := 0
+	s, pos := 0, 0
 	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-		stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
-		if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-			continue
-		} else if e != nil {
+		stmp, e := FlistxattrNS(fd, nsid, dest[pos:])
+
+		if e != nil {
+			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+				continue
+			}
 			return s, e
 		}
 
 		s += stmp
-		destsiz -= s
-		if destsiz < 0 {
-			destsiz = 0
+		pos = s
+		if pos > destsiz {
+			pos = destsiz
 		}
-		d = initxattrdest(dest, s)
+	}
+
+	return s, nil
+}
+
+func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {
+	d := initxattrdest(dest, 0)
+	destsiz := len(dest)
+
+	s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
+	if e != nil {
+		return 0, err
 	}
 
 	return s, nil
 }
 
 func Llistxattr(link string, dest []byte) (sz int, err error) {
-	d := initxattrdest(dest, 0)
 	destsiz := len(dest)
 
-	s := 0
+	s, pos := 0, 0
 	for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {
-		stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
-		if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
-			continue
-		} else if e != nil {
+		stmp, e := LlistxattrNS(link, nsid, dest[pos:])
+
+		if e != nil {
+			if e == EPERM && nsid != EXTATTR_NAMESPACE_USER {
+				continue
+			}
 			return s, e
 		}
 
 		s += stmp
-		destsiz -= s
-		if destsiz < 0 {
-			destsiz = 0
+		pos = s
+		if pos > destsiz {
+			pos = destsiz
 		}
-		d = initxattrdest(dest, s)
+	}
+
+	return s, nil
+}
+
+func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {
+	d := initxattrdest(dest, 0)
+	destsiz := len(dest)
+
+	s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
+	if e != nil {
+		return 0, err
 	}
 
 	return s, nil
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
deleted file mode 100644
index a06eb0932..000000000
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// go run mksyscall.go -tags darwin,amd64,go1.13 syscall_darwin.1_13.go
-// Code generated by the command above; see README.md. DO NOT EDIT.
-
-//go:build darwin && amd64 && go1.13
-// +build darwin,amd64,go1.13
-
-package unix
-
-import (
-	"syscall"
-	"unsafe"
-)
-
-var _ syscall.Errno
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func closedir(dir uintptr) (err error) {
-	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_closedir_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-	res = Errno(r0)
-	return
-}
-
-var libc_readdir_r_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
deleted file mode 100644
index f5bb40eda..000000000
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s
+++ /dev/null
@@ -1,25 +0,0 @@
-// go run mkasm.go darwin amd64
-// Code generated by the command above; DO NOT EDIT.
-
-//go:build go1.13
-// +build go1.13
-
-#include "textflag.h"
-
-TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_fdopendir(SB)
-
-GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
-DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
-
-TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_closedir(SB)
-
-GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
-DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
-
-TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_readdir_r(SB)
-
-GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
-DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
index 467deed76..c2461c496 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go
@@ -1,8 +1,8 @@
-// go run mksyscall.go -tags darwin,amd64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
+// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go
 // Code generated by the command above; see README.md. DO NOT EDIT.
 
-//go:build darwin && amd64 && go1.12
-// +build darwin,amd64,go1.12
+//go:build darwin && amd64
+// +build darwin,amd64
 
 package unix
 
@@ -463,6 +463,32 @@ var libc_munlockall_trampoline_addr uintptr
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func closedir(dir uintptr) (err error) {
+	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
+	if e1 != 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
+var libc_closedir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
+	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
+	res = Errno(r0)
+	return
+}
+
+var libc_readdir_r_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func pipe(p *[2]int32) (err error) {
 	_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
index b41467a0e..95fe4c0eb 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s
@@ -1,11 +1,14 @@
 // go run mkasm.go darwin amd64
 // Code generated by the command above; DO NOT EDIT.
 
-//go:build go1.12
-// +build go1.12
-
 #include "textflag.h"
 
+TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fdopendir(SB)
+
+GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
+DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
+
 TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_getgroups(SB)
 
@@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
 GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
 DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)
 
+TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_closedir(SB)
+
+GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
+DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
+
+TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_readdir_r(SB)
+
+GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
+DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
+
 TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_pipe(SB)
 
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
deleted file mode 100644
index cec595d55..000000000
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// go run mksyscall.go -tags darwin,arm64,go1.13 syscall_darwin.1_13.go
-// Code generated by the command above; see README.md. DO NOT EDIT.
-
-//go:build darwin && arm64 && go1.13
-// +build darwin,arm64,go1.13
-
-package unix
-
-import (
-	"syscall"
-	"unsafe"
-)
-
-var _ syscall.Errno
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func closedir(dir uintptr) (err error) {
-	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-var libc_closedir_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
-	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
-	res = Errno(r0)
-	return
-}
-
-var libc_readdir_r_trampoline_addr uintptr
-
-//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
deleted file mode 100644
index 0c3f76bc2..000000000
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s
+++ /dev/null
@@ -1,25 +0,0 @@
-// go run mkasm.go darwin arm64
-// Code generated by the command above; DO NOT EDIT.
-
-//go:build go1.13
-// +build go1.13
-
-#include "textflag.h"
-
-TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_fdopendir(SB)
-
-GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
-DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
-
-TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_closedir(SB)
-
-GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
-DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
-
-TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
-	JMP	libc_readdir_r(SB)
-
-GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
-DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
index 35938d34f..26a0fdc50 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go
@@ -1,8 +1,8 @@
-// go run mksyscall.go -tags darwin,arm64,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
+// go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go
 // Code generated by the command above; see README.md. DO NOT EDIT.
 
-//go:build darwin && arm64 && go1.12
-// +build darwin,arm64,go1.12
+//go:build darwin && arm64
+// +build darwin,arm64
 
 package unix
 
@@ -463,6 +463,32 @@ var libc_munlockall_trampoline_addr uintptr
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func closedir(dir uintptr) (err error) {
+	_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)
+	if e1 != 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
+var libc_closedir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {
+	r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))
+	res = Errno(r0)
+	return
+}
+
+var libc_readdir_r_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib"
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func pipe(p *[2]int32) (err error) {
 	_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
index e1f9204a2..efa5b4c98 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
+++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s
@@ -1,11 +1,14 @@
 // go run mkasm.go darwin arm64
 // Code generated by the command above; DO NOT EDIT.
 
-//go:build go1.12
-// +build go1.12
-
 #include "textflag.h"
 
+TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fdopendir(SB)
+
+GLOBL	·libc_fdopendir_trampoline_addr(SB), RODATA, $8
+DATA	·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)
+
 TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_getgroups(SB)
 
@@ -174,6 +177,18 @@ TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
 GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $8
 DATA	·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)
 
+TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_closedir(SB)
+
+GLOBL	·libc_closedir_trampoline_addr(SB), RODATA, $8
+DATA	·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)
+
+TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_readdir_r(SB)
+
+GLOBL	·libc_readdir_r_trampoline_addr(SB), RODATA, $8
+DATA	·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)
+
 TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0
 	JMP	libc_pipe(SB)
 
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
index 88af526b7..c81b0ad47 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go
@@ -287,46 +287,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {
 	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
 	n = int(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
index 2a0c4aa6a..2206bce7f 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go
@@ -334,36 +334,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -374,16 +344,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
index 4882bde3a..edf6b39f1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go
@@ -412,46 +412,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
index 9f8c24e43..190609f21 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go
@@ -289,36 +289,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -329,16 +299,6 @@ func setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
index 523f2ba03..806ffd1e1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go
@@ -223,46 +223,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
index d7d6f4244..5f984cbb1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go
@@ -248,46 +248,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
index 7f1f8e653..46fc380a4 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go
@@ -278,36 +278,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -318,16 +288,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
index f933d0f51..cbd0d4dad 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go
@@ -278,36 +278,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -318,16 +288,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
index 297d0a998..0c13d15f0 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go
@@ -248,46 +248,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
index 2e32e7a44..e01432aed 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go
@@ -308,46 +308,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
index 3c5317046..13c7ee7ba 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go
@@ -349,36 +349,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -389,16 +359,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
index a00c6744e..02d0c0fd6 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go
@@ -349,36 +349,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -389,16 +359,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
index 1239cc2de..9fee3b1d2 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go
@@ -269,36 +269,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -309,16 +279,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
index e0dabc602..647bbfecd 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go
@@ -319,36 +319,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -359,16 +329,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
 	r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))
 	n = int64(r0)
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
index 368623c0f..ada057f89 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go
@@ -329,36 +329,6 @@ func setfsuid(uid int) (prev int, err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
-func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Setrlimit(resource int, rlim *Rlimit) (err error) {
 	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)
 	if e1 != 0 {
@@ -369,16 +339,6 @@ func Setrlimit(resource int, rlim *Rlimit) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
-	if e1 != 0 {
-		err = errnoErr(e1)
-	}
-	return
-}
-
-// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
-
 func Shutdown(fd int, how int) (err error) {
 	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
index 69f803006..8da6791d1 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go
@@ -1,4 +1,4 @@
-// go run mksyscall.go -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
+// go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go
 // Code generated by the command above; see README.md. DO NOT EDIT.
 
 //go:build openbsd && arm
@@ -16,7 +16,7 @@ var _ syscall.Errno
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
-	r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+	r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -24,20 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) {
 	return
 }
 
+var libc_getgroups_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getgroups getgroups "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func setgroups(ngid int, gid *_Gid_t) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
+	_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setgroups_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setgroups setgroups "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {
-	r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
+	r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)
 	wpid = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -45,10 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err
 	return
 }
 
+var libc_wait4_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_wait4 wait4 "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
-	r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+	r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
 	fd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -56,30 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {
 	return
 }
 
+var libc_accept_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_accept accept "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-	_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))
+	_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_bind_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_bind bind "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {
-	_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))
+	_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_connect_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_connect connect "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func socket(domain int, typ int, proto int) (fd int, err error) {
-	r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))
+	r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))
 	fd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -87,66 +111,94 @@ func socket(domain int, typ int, proto int) (fd int, err error) {
 	return
 }
 
+var libc_socket_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_socket socket "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {
-	_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
+	_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_getsockopt_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getsockopt getsockopt "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {
-	_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
+	_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setsockopt_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setsockopt setsockopt "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-	_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+	_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_getpeername_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getpeername getpeername "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {
-	_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
+	_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_getsockname_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getsockname getsockname "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Shutdown(s int, how int) (err error) {
-	_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)
+	_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_shutdown_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_shutdown shutdown "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {
-	_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
+	_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_socketpair_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_socketpair socketpair "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {
@@ -156,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
+	r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -164,6 +216,10 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl
 	return
 }
 
+var libc_recvfrom_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_recvfrom recvfrom "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {
@@ -173,17 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
+	_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_sendto_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_sendto sendto "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-	r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+	r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -191,10 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {
 	return
 }
 
+var libc_recvmsg_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_recvmsg recvmsg "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
-	r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
+	r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -202,10 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {
 	return
 }
 
+var libc_sendmsg_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_sendmsg sendmsg "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {
-	r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
+	r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -213,6 +281,10 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne
 	return
 }
 
+var libc_kevent_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_kevent kevent "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func utimes(path string, timeval *[2]Timeval) (err error) {
@@ -221,27 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
+	_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_utimes_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_utimes utimes "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func futimes(fd int, timeval *[2]Timeval) (err error) {
-	_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
+	_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_futimes_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_futimes futimes "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
-	r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
+	r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -249,6 +329,10 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) {
 	return
 }
 
+var libc_poll_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_poll poll "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Madvise(b []byte, behav int) (err error) {
@@ -258,13 +342,17 @@ func Madvise(b []byte, behav int) (err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))
+	_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_madvise_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_madvise madvise "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mlock(b []byte) (err error) {
@@ -274,23 +362,31 @@ func Mlock(b []byte) (err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)
+	_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mlock_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mlock mlock "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mlockall(flags int) (err error) {
-	_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)
+	_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mlockall_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mlockall mlockall "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mprotect(b []byte, prot int) (err error) {
@@ -300,13 +396,17 @@ func Mprotect(b []byte, prot int) (err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))
+	_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mprotect_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mprotect mprotect "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Msync(b []byte, flags int) (err error) {
@@ -316,13 +416,17 @@ func Msync(b []byte, flags int) (err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))
+	_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_msync_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_msync msync "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Munlock(b []byte) (err error) {
@@ -332,33 +436,45 @@ func Munlock(b []byte) (err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)
+	_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_munlock_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_munlock munlock "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Munlockall() (err error) {
-	_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)
+	_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_munlockall_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_munlockall munlockall "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func pipe2(p *[2]_C_int, flags int) (err error) {
-	_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
+	_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_pipe2_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_pipe2 pipe2 "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getdents(fd int, buf []byte) (n int, err error) {
@@ -368,7 +484,7 @@ func Getdents(fd int, buf []byte) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
+	r0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -376,6 +492,10 @@ func Getdents(fd int, buf []byte) (n int, err error) {
 	return
 }
 
+var libc_getdents_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getdents getdents "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getcwd(buf []byte) (n int, err error) {
@@ -385,7 +505,7 @@ func Getcwd(buf []byte) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)
+	r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -393,16 +513,24 @@ func Getcwd(buf []byte) (n int, err error) {
 	return
 }
 
+var libc_getcwd_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getcwd getcwd "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func ioctl(fd int, req uint, arg uintptr) (err error) {
-	_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))
+	_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_ioctl_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_ioctl ioctl "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {
@@ -412,17 +540,21 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr)
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
+	_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_sysctl_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_sysctl sysctl "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {
-	r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
+	r0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -430,6 +562,10 @@ func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int,
 	return
 }
 
+var libc_ppoll_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_ppoll ppoll "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Access(path string, mode uint32) (err error) {
@@ -438,23 +574,31 @@ func Access(path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+	_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_access_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_access access "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Adjtime(delta *Timeval, olddelta *Timeval) (err error) {
-	_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
+	_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_adjtime_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_adjtime adjtime "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Chdir(path string) (err error) {
@@ -463,13 +607,17 @@ func Chdir(path string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_chdir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_chdir chdir "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Chflags(path string, flags int) (err error) {
@@ -478,13 +626,17 @@ func Chflags(path string, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+	_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_chflags_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_chflags chflags "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Chmod(path string, mode uint32) (err error) {
@@ -493,13 +645,17 @@ func Chmod(path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+	_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_chmod_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_chmod chmod "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Chown(path string, uid int, gid int) (err error) {
@@ -508,13 +664,17 @@ func Chown(path string, uid int, gid int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+	_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_chown_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_chown chown "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Chroot(path string) (err error) {
@@ -523,27 +683,35 @@ func Chroot(path string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_chroot_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_chroot chroot "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Close(fd int) (err error) {
-	_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)
+	_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_close_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_close close "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Dup(fd int) (nfd int, err error) {
-	r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)
+	r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)
 	nfd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -551,33 +719,49 @@ func Dup(fd int) (nfd int, err error) {
 	return
 }
 
+var libc_dup_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_dup dup "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Dup2(from int, to int) (err error) {
-	_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)
+	_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_dup2_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_dup2 dup2 "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Dup3(from int, to int, flags int) (err error) {
-	_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))
+	_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_dup3_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_dup3 dup3 "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Exit(code int) {
-	Syscall(SYS_EXIT, uintptr(code), 0, 0)
+	syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)
 	return
 }
 
+var libc_exit_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_exit exit "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -586,43 +770,59 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_faccessat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_faccessat faccessat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchdir(fd int) (err error) {
-	_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)
+	_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchdir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchdir fchdir "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchflags(fd int, flags int) (err error) {
-	_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)
+	_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchflags_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchflags fchflags "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchmod(fd int, mode uint32) (err error) {
-	_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)
+	_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchmod_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchmod fchmod "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
@@ -631,23 +831,31 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchmodat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchown(fd int, uid int, gid int) (err error) {
-	_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))
+	_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchown_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchown fchown "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
@@ -656,27 +864,35 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
+	_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fchownat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fchownat fchownat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Flock(fd int, how int) (err error) {
-	_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)
+	_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_flock_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_flock flock "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fpathconf(fd int, name int) (val int, err error) {
-	r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)
+	r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)
 	val = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -684,16 +900,24 @@ func Fpathconf(fd int, name int) (val int, err error) {
 	return
 }
 
+var libc_fpathconf_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fstat(fd int, stat *Stat_t) (err error) {
-	_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+	_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fstat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fstat fstat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
@@ -702,71 +926,99 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fstatat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fstatat fstatat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fstatfs(fd int, stat *Statfs_t) (err error) {
-	_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
+	_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fstatfs_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fstatfs fstatfs "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Fsync(fd int) (err error) {
-	_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)
+	_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_fsync_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_fsync fsync "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Ftruncate(fd int, length int64) (err error) {
-	_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_ftruncate_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getegid() (egid int) {
-	r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)
 	egid = int(r0)
 	return
 }
 
+var libc_getegid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getegid getegid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Geteuid() (uid int) {
-	r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)
 	uid = int(r0)
 	return
 }
 
+var libc_geteuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_geteuid geteuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getgid() (gid int) {
-	r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)
 	gid = int(r0)
 	return
 }
 
+var libc_getgid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getgid getgid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getpgid(pid int) (pgid int, err error) {
-	r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)
+	r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)
 	pgid = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -774,34 +1026,50 @@ func Getpgid(pid int) (pgid int, err error) {
 	return
 }
 
+var libc_getpgid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getpgid getpgid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getpgrp() (pgrp int) {
-	r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)
 	pgrp = int(r0)
 	return
 }
 
+var libc_getpgrp_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getpid() (pid int) {
-	r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)
 	pid = int(r0)
 	return
 }
 
+var libc_getpid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getpid getpid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getppid() (ppid int) {
-	r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)
 	ppid = int(r0)
 	return
 }
 
+var libc_getppid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getppid getppid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getpriority(which int, who int) (prio int, err error) {
-	r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)
+	r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)
 	prio = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -809,20 +1077,28 @@ func Getpriority(which int, who int) (prio int, err error) {
 	return
 }
 
+var libc_getpriority_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getpriority getpriority "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getrlimit(which int, lim *Rlimit) (err error) {
-	_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+	_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_getrlimit_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getrtable() (rtable int, err error) {
-	r0, _, e1 := RawSyscall(SYS_GETRTABLE, 0, 0, 0)
+	r0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)
 	rtable = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -830,20 +1106,28 @@ func Getrtable() (rtable int, err error) {
 	return
 }
 
+var libc_getrtable_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getrtable getrtable "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getrusage(who int, rusage *Rusage) (err error) {
-	_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
+	_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_getrusage_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getrusage getrusage "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getsid(pid int) (sid int, err error) {
-	r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)
+	r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)
 	sid = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -851,46 +1135,66 @@ func Getsid(pid int) (sid int, err error) {
 	return
 }
 
+var libc_getsid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getsid getsid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Gettimeofday(tv *Timeval) (err error) {
-	_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_gettimeofday_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Getuid() (uid int) {
-	r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)
+	r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)
 	uid = int(r0)
 	return
 }
 
+var libc_getuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_getuid getuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Issetugid() (tainted bool) {
-	r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)
+	r0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)
 	tainted = bool(r0 != 0)
 	return
 }
 
+var libc_issetugid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_issetugid issetugid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Kill(pid int, signum syscall.Signal) (err error) {
-	_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)
+	_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_kill_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_kill kill "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Kqueue() (fd int, err error) {
-	r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)
+	r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)
 	fd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -898,6 +1202,10 @@ func Kqueue() (fd int, err error) {
 	return
 }
 
+var libc_kqueue_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_kqueue kqueue "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Lchown(path string, uid int, gid int) (err error) {
@@ -906,13 +1214,17 @@ func Lchown(path string, uid int, gid int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
+	_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_lchown_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_lchown lchown "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Link(path string, link string) (err error) {
@@ -926,13 +1238,17 @@ func Link(path string, link string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+	_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_link_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_link link "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {
@@ -946,23 +1262,31 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
+	_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_linkat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_linkat linkat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Listen(s int, backlog int) (err error) {
-	_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)
+	_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_listen_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_listen listen "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Lstat(path string, stat *Stat_t) (err error) {
@@ -971,13 +1295,17 @@ func Lstat(path string, stat *Stat_t) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+	_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_lstat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_lstat lstat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mkdir(path string, mode uint32) (err error) {
@@ -986,13 +1314,17 @@ func Mkdir(path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+	_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mkdir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mkdir mkdir "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mkdirat(dirfd int, path string, mode uint32) (err error) {
@@ -1001,13 +1333,17 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+	_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mkdirat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mkfifo(path string, mode uint32) (err error) {
@@ -1016,13 +1352,17 @@ func Mkfifo(path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
+	_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mkfifo_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
@@ -1031,13 +1371,17 @@ func Mkfifoat(dirfd int, path string, mode uint32) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+	_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mkfifoat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mknod(path string, mode uint32, dev int) (err error) {
@@ -1046,13 +1390,17 @@ func Mknod(path string, mode uint32, dev int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
+	_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mknod_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mknod mknod "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
@@ -1061,23 +1409,31 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_mknodat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mknodat mknodat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Nanosleep(time *Timespec, leftover *Timespec) (err error) {
-	_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
+	_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_nanosleep_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Open(path string, mode int, perm uint32) (fd int, err error) {
@@ -1086,7 +1442,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
 	if err != nil {
 		return
 	}
-	r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
+	r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))
 	fd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1094,6 +1450,10 @@ func Open(path string, mode int, perm uint32) (fd int, err error) {
 	return
 }
 
+var libc_open_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_open open "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
@@ -1102,7 +1462,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
 	if err != nil {
 		return
 	}
-	r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
+	r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)
 	fd = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1110,6 +1470,10 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {
 	return
 }
 
+var libc_openat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_openat openat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Pathconf(path string, name int) (val int, err error) {
@@ -1118,7 +1482,7 @@ func Pathconf(path string, name int) (val int, err error) {
 	if err != nil {
 		return
 	}
-	r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
+	r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)
 	val = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1126,6 +1490,10 @@ func Pathconf(path string, name int) (val int, err error) {
 	return
 }
 
+var libc_pathconf_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_pathconf pathconf "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func pread(fd int, p []byte, offset int64) (n int, err error) {
@@ -1135,7 +1503,7 @@ func pread(fd int, p []byte, offset int64) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
+	r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1143,6 +1511,10 @@ func pread(fd int, p []byte, offset int64) (n int, err error) {
 	return
 }
 
+var libc_pread_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_pread pread "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func pwrite(fd int, p []byte, offset int64) (n int, err error) {
@@ -1152,7 +1524,7 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
+	r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1160,6 +1532,10 @@ func pwrite(fd int, p []byte, offset int64) (n int, err error) {
 	return
 }
 
+var libc_pwrite_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_pwrite pwrite "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func read(fd int, p []byte) (n int, err error) {
@@ -1169,7 +1545,7 @@ func read(fd int, p []byte) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1177,6 +1553,10 @@ func read(fd int, p []byte) (n int, err error) {
 	return
 }
 
+var libc_read_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_read read "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Readlink(path string, buf []byte) (n int, err error) {
@@ -1191,7 +1571,7 @@ func Readlink(path string, buf []byte) (n int, err error) {
 	} else {
 		_p1 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
+	r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1199,6 +1579,10 @@ func Readlink(path string, buf []byte) (n int, err error) {
 	return
 }
 
+var libc_readlink_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_readlink readlink "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
@@ -1213,7 +1597,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
 	} else {
 		_p1 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
+	r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1221,6 +1605,10 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {
 	return
 }
 
+var libc_readlinkat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_readlinkat readlinkat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Rename(from string, to string) (err error) {
@@ -1234,13 +1622,17 @@ func Rename(from string, to string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+	_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_rename_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_rename rename "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Renameat(fromfd int, from string, tofd int, to string) (err error) {
@@ -1254,13 +1646,17 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_renameat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_renameat renameat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Revoke(path string) (err error) {
@@ -1269,13 +1665,17 @@ func Revoke(path string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_revoke_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_revoke revoke "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Rmdir(path string) (err error) {
@@ -1284,17 +1684,21 @@ func Rmdir(path string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_rmdir_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_rmdir rmdir "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
-	r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
+	r0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)
 	newoffset = int64(int64(r1)<<32 | int64(r0))
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1302,10 +1706,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
 	return
 }
 
+var libc_lseek_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_lseek lseek "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {
-	r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
+	r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1313,36 +1721,52 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err
 	return
 }
 
+var libc_select_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_select select "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setegid(egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setegid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setegid setegid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Seteuid(euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_seteuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_seteuid seteuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setgid(gid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setgid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setgid setgid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setlogin(name string) (err error) {
@@ -1351,97 +1775,133 @@ func Setlogin(name string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setlogin_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setlogin setlogin "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setpgid(pid int, pgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)
+	_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setpgid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setpgid setpgid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setpriority(which int, who int, prio int) (err error) {
-	_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))
+	_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setpriority_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setpriority setpriority "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setregid(rgid int, egid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)
+	_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setregid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setregid setregid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setreuid(ruid int, euid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)
+	_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setreuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setreuid setreuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setresgid(rgid int, egid int, sgid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))
+	_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setresgid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setresgid setresgid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setresuid(ruid int, euid int, suid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))
+	_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setresuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setresuid setresuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setrlimit(which int, lim *Rlimit) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
+	_, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setrlimit_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setrtable(rtable int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETRTABLE, uintptr(rtable), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setrtable_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setrtable setrtable "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setsid() (pid int, err error) {
-	r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)
+	r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)
 	pid = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1449,26 +1909,38 @@ func Setsid() (pid int, err error) {
 	return
 }
 
+var libc_setsid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setsid setsid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Settimeofday(tp *Timeval) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_settimeofday_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_settimeofday settimeofday "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Setuid(uid int) (err error) {
-	_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)
+	_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_setuid_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_setuid setuid "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Stat(path string, stat *Stat_t) (err error) {
@@ -1477,13 +1949,17 @@ func Stat(path string, stat *Stat_t) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+	_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_stat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_stat stat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Statfs(path string, stat *Statfs_t) (err error) {
@@ -1492,13 +1968,17 @@ func Statfs(path string, stat *Statfs_t) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
+	_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_statfs_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_statfs statfs "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Symlink(path string, link string) (err error) {
@@ -1512,13 +1992,17 @@ func Symlink(path string, link string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
+	_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_symlink_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_symlink symlink "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
@@ -1532,23 +2016,31 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
+	_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_symlinkat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_symlinkat symlinkat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Sync() (err error) {
-	_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)
+	_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_sync_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_sync sync "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Truncate(path string, length int64) (err error) {
@@ -1557,21 +2049,29 @@ func Truncate(path string, length int64) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_truncate_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_truncate truncate "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Umask(newmask int) (oldmask int) {
-	r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)
+	r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)
 	oldmask = int(r0)
 	return
 }
 
+var libc_umask_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_umask umask "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Unlink(path string) (err error) {
@@ -1580,13 +2080,17 @@ func Unlink(path string) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)
+	_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_unlink_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_unlink unlink "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Unlinkat(dirfd int, path string, flags int) (err error) {
@@ -1595,13 +2099,17 @@ func Unlinkat(dirfd int, path string, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
+	_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_unlinkat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func Unmount(path string, flags int) (err error) {
@@ -1610,13 +2118,17 @@ func Unmount(path string, flags int) (err error) {
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
+	_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_unmount_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_unmount unmount "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func write(fd int, p []byte) (n int, err error) {
@@ -1626,7 +2138,7 @@ func write(fd int, p []byte) (n int, err error) {
 	} else {
 		_p0 = unsafe.Pointer(&_zero)
 	}
-	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))
+	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1634,10 +2146,14 @@ func write(fd int, p []byte) (n int, err error) {
 	return
 }
 
+var libc_write_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_write write "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
-	r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
+	r0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)
 	ret = uintptr(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1645,20 +2161,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (
 	return
 }
 
+var libc_mmap_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_mmap mmap "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func munmap(addr uintptr, length uintptr) (err error) {
-	_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
+	_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
 
+var libc_munmap_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_munmap munmap "libc.so"
+
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
-	r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+	r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1669,7 +2193,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
 func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
-	r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
+	r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
 	n = int(r0)
 	if e1 != 0 {
 		err = errnoErr(e1)
@@ -1685,9 +2209,13 @@ func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error
 	if err != nil {
 		return
 	}
-	_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
+	_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)
 	if e1 != 0 {
 		err = errnoErr(e1)
 	}
 	return
 }
+
+var libc_utimensat_trampoline_addr uintptr
+
+//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s
new file mode 100644
index 000000000..9ad116d9f
--- /dev/null
+++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s
@@ -0,0 +1,796 @@
+// go run mkasm.go openbsd arm
+// Code generated by the command above; DO NOT EDIT.
+
+#include "textflag.h"
+
+TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getgroups(SB)
+
+GLOBL	·libc_getgroups_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)
+
+TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setgroups(SB)
+
+GLOBL	·libc_setgroups_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)
+
+TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_wait4(SB)
+
+GLOBL	·libc_wait4_trampoline_addr(SB), RODATA, $4
+DATA	·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)
+
+TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_accept(SB)
+
+GLOBL	·libc_accept_trampoline_addr(SB), RODATA, $4
+DATA	·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)
+
+TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_bind(SB)
+
+GLOBL	·libc_bind_trampoline_addr(SB), RODATA, $4
+DATA	·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)
+
+TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_connect(SB)
+
+GLOBL	·libc_connect_trampoline_addr(SB), RODATA, $4
+DATA	·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)
+
+TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_socket(SB)
+
+GLOBL	·libc_socket_trampoline_addr(SB), RODATA, $4
+DATA	·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)
+
+TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getsockopt(SB)
+
+GLOBL	·libc_getsockopt_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)
+
+TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setsockopt(SB)
+
+GLOBL	·libc_setsockopt_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)
+
+TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getpeername(SB)
+
+GLOBL	·libc_getpeername_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)
+
+TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getsockname(SB)
+
+GLOBL	·libc_getsockname_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)
+
+TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_shutdown(SB)
+
+GLOBL	·libc_shutdown_trampoline_addr(SB), RODATA, $4
+DATA	·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)
+
+TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_socketpair(SB)
+
+GLOBL	·libc_socketpair_trampoline_addr(SB), RODATA, $4
+DATA	·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)
+
+TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_recvfrom(SB)
+
+GLOBL	·libc_recvfrom_trampoline_addr(SB), RODATA, $4
+DATA	·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)
+
+TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_sendto(SB)
+
+GLOBL	·libc_sendto_trampoline_addr(SB), RODATA, $4
+DATA	·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)
+
+TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_recvmsg(SB)
+
+GLOBL	·libc_recvmsg_trampoline_addr(SB), RODATA, $4
+DATA	·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)
+
+TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_sendmsg(SB)
+
+GLOBL	·libc_sendmsg_trampoline_addr(SB), RODATA, $4
+DATA	·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)
+
+TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_kevent(SB)
+
+GLOBL	·libc_kevent_trampoline_addr(SB), RODATA, $4
+DATA	·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)
+
+TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_utimes(SB)
+
+GLOBL	·libc_utimes_trampoline_addr(SB), RODATA, $4
+DATA	·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)
+
+TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_futimes(SB)
+
+GLOBL	·libc_futimes_trampoline_addr(SB), RODATA, $4
+DATA	·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)
+
+TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_poll(SB)
+
+GLOBL	·libc_poll_trampoline_addr(SB), RODATA, $4
+DATA	·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)
+
+TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_madvise(SB)
+
+GLOBL	·libc_madvise_trampoline_addr(SB), RODATA, $4
+DATA	·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)
+
+TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mlock(SB)
+
+GLOBL	·libc_mlock_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)
+
+TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mlockall(SB)
+
+GLOBL	·libc_mlockall_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)
+
+TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mprotect(SB)
+
+GLOBL	·libc_mprotect_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)
+
+TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_msync(SB)
+
+GLOBL	·libc_msync_trampoline_addr(SB), RODATA, $4
+DATA	·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)
+
+TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_munlock(SB)
+
+GLOBL	·libc_munlock_trampoline_addr(SB), RODATA, $4
+DATA	·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)
+
+TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_munlockall(SB)
+
+GLOBL	·libc_munlockall_trampoline_addr(SB), RODATA, $4
+DATA	·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)
+
+TEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_pipe2(SB)
+
+GLOBL	·libc_pipe2_trampoline_addr(SB), RODATA, $4
+DATA	·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)
+
+TEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getdents(SB)
+
+GLOBL	·libc_getdents_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)
+
+TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getcwd(SB)
+
+GLOBL	·libc_getcwd_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)
+
+TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_ioctl(SB)
+
+GLOBL	·libc_ioctl_trampoline_addr(SB), RODATA, $4
+DATA	·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)
+
+TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_sysctl(SB)
+
+GLOBL	·libc_sysctl_trampoline_addr(SB), RODATA, $4
+DATA	·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)
+
+TEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_ppoll(SB)
+
+GLOBL	·libc_ppoll_trampoline_addr(SB), RODATA, $4
+DATA	·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)
+
+TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_access(SB)
+
+GLOBL	·libc_access_trampoline_addr(SB), RODATA, $4
+DATA	·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)
+
+TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_adjtime(SB)
+
+GLOBL	·libc_adjtime_trampoline_addr(SB), RODATA, $4
+DATA	·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)
+
+TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_chdir(SB)
+
+GLOBL	·libc_chdir_trampoline_addr(SB), RODATA, $4
+DATA	·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)
+
+TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_chflags(SB)
+
+GLOBL	·libc_chflags_trampoline_addr(SB), RODATA, $4
+DATA	·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)
+
+TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_chmod(SB)
+
+GLOBL	·libc_chmod_trampoline_addr(SB), RODATA, $4
+DATA	·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)
+
+TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_chown(SB)
+
+GLOBL	·libc_chown_trampoline_addr(SB), RODATA, $4
+DATA	·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)
+
+TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_chroot(SB)
+
+GLOBL	·libc_chroot_trampoline_addr(SB), RODATA, $4
+DATA	·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)
+
+TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_close(SB)
+
+GLOBL	·libc_close_trampoline_addr(SB), RODATA, $4
+DATA	·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)
+
+TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_dup(SB)
+
+GLOBL	·libc_dup_trampoline_addr(SB), RODATA, $4
+DATA	·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)
+
+TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_dup2(SB)
+
+GLOBL	·libc_dup2_trampoline_addr(SB), RODATA, $4
+DATA	·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)
+
+TEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_dup3(SB)
+
+GLOBL	·libc_dup3_trampoline_addr(SB), RODATA, $4
+DATA	·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)
+
+TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_exit(SB)
+
+GLOBL	·libc_exit_trampoline_addr(SB), RODATA, $4
+DATA	·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)
+
+TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_faccessat(SB)
+
+GLOBL	·libc_faccessat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)
+
+TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchdir(SB)
+
+GLOBL	·libc_fchdir_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)
+
+TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchflags(SB)
+
+GLOBL	·libc_fchflags_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)
+
+TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchmod(SB)
+
+GLOBL	·libc_fchmod_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)
+
+TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchmodat(SB)
+
+GLOBL	·libc_fchmodat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)
+
+TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchown(SB)
+
+GLOBL	·libc_fchown_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)
+
+TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fchownat(SB)
+
+GLOBL	·libc_fchownat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)
+
+TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_flock(SB)
+
+GLOBL	·libc_flock_trampoline_addr(SB), RODATA, $4
+DATA	·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)
+
+TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fpathconf(SB)
+
+GLOBL	·libc_fpathconf_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)
+
+TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fstat(SB)
+
+GLOBL	·libc_fstat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)
+
+TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fstatat(SB)
+
+GLOBL	·libc_fstatat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)
+
+TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fstatfs(SB)
+
+GLOBL	·libc_fstatfs_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)
+
+TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_fsync(SB)
+
+GLOBL	·libc_fsync_trampoline_addr(SB), RODATA, $4
+DATA	·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)
+
+TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_ftruncate(SB)
+
+GLOBL	·libc_ftruncate_trampoline_addr(SB), RODATA, $4
+DATA	·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)
+
+TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getegid(SB)
+
+GLOBL	·libc_getegid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)
+
+TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_geteuid(SB)
+
+GLOBL	·libc_geteuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)
+
+TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getgid(SB)
+
+GLOBL	·libc_getgid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)
+
+TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getpgid(SB)
+
+GLOBL	·libc_getpgid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)
+
+TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getpgrp(SB)
+
+GLOBL	·libc_getpgrp_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)
+
+TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getpid(SB)
+
+GLOBL	·libc_getpid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)
+
+TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getppid(SB)
+
+GLOBL	·libc_getppid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)
+
+TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getpriority(SB)
+
+GLOBL	·libc_getpriority_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)
+
+TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getrlimit(SB)
+
+GLOBL	·libc_getrlimit_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)
+
+TEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getrtable(SB)
+
+GLOBL	·libc_getrtable_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)
+
+TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getrusage(SB)
+
+GLOBL	·libc_getrusage_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)
+
+TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getsid(SB)
+
+GLOBL	·libc_getsid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)
+
+TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_gettimeofday(SB)
+
+GLOBL	·libc_gettimeofday_trampoline_addr(SB), RODATA, $4
+DATA	·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)
+
+TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_getuid(SB)
+
+GLOBL	·libc_getuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)
+
+TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_issetugid(SB)
+
+GLOBL	·libc_issetugid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)
+
+TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_kill(SB)
+
+GLOBL	·libc_kill_trampoline_addr(SB), RODATA, $4
+DATA	·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)
+
+TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_kqueue(SB)
+
+GLOBL	·libc_kqueue_trampoline_addr(SB), RODATA, $4
+DATA	·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)
+
+TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_lchown(SB)
+
+GLOBL	·libc_lchown_trampoline_addr(SB), RODATA, $4
+DATA	·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)
+
+TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_link(SB)
+
+GLOBL	·libc_link_trampoline_addr(SB), RODATA, $4
+DATA	·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)
+
+TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_linkat(SB)
+
+GLOBL	·libc_linkat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)
+
+TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_listen(SB)
+
+GLOBL	·libc_listen_trampoline_addr(SB), RODATA, $4
+DATA	·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)
+
+TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_lstat(SB)
+
+GLOBL	·libc_lstat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)
+
+TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mkdir(SB)
+
+GLOBL	·libc_mkdir_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)
+
+TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mkdirat(SB)
+
+GLOBL	·libc_mkdirat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)
+
+TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mkfifo(SB)
+
+GLOBL	·libc_mkfifo_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)
+
+TEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mkfifoat(SB)
+
+GLOBL	·libc_mkfifoat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)
+
+TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mknod(SB)
+
+GLOBL	·libc_mknod_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)
+
+TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mknodat(SB)
+
+GLOBL	·libc_mknodat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)
+
+TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_nanosleep(SB)
+
+GLOBL	·libc_nanosleep_trampoline_addr(SB), RODATA, $4
+DATA	·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)
+
+TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_open(SB)
+
+GLOBL	·libc_open_trampoline_addr(SB), RODATA, $4
+DATA	·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)
+
+TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_openat(SB)
+
+GLOBL	·libc_openat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)
+
+TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_pathconf(SB)
+
+GLOBL	·libc_pathconf_trampoline_addr(SB), RODATA, $4
+DATA	·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)
+
+TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_pread(SB)
+
+GLOBL	·libc_pread_trampoline_addr(SB), RODATA, $4
+DATA	·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)
+
+TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_pwrite(SB)
+
+GLOBL	·libc_pwrite_trampoline_addr(SB), RODATA, $4
+DATA	·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)
+
+TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_read(SB)
+
+GLOBL	·libc_read_trampoline_addr(SB), RODATA, $4
+DATA	·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)
+
+TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_readlink(SB)
+
+GLOBL	·libc_readlink_trampoline_addr(SB), RODATA, $4
+DATA	·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)
+
+TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_readlinkat(SB)
+
+GLOBL	·libc_readlinkat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)
+
+TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_rename(SB)
+
+GLOBL	·libc_rename_trampoline_addr(SB), RODATA, $4
+DATA	·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)
+
+TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_renameat(SB)
+
+GLOBL	·libc_renameat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)
+
+TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_revoke(SB)
+
+GLOBL	·libc_revoke_trampoline_addr(SB), RODATA, $4
+DATA	·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)
+
+TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_rmdir(SB)
+
+GLOBL	·libc_rmdir_trampoline_addr(SB), RODATA, $4
+DATA	·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)
+
+TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_lseek(SB)
+
+GLOBL	·libc_lseek_trampoline_addr(SB), RODATA, $4
+DATA	·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)
+
+TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_select(SB)
+
+GLOBL	·libc_select_trampoline_addr(SB), RODATA, $4
+DATA	·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)
+
+TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setegid(SB)
+
+GLOBL	·libc_setegid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)
+
+TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_seteuid(SB)
+
+GLOBL	·libc_seteuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)
+
+TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setgid(SB)
+
+GLOBL	·libc_setgid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)
+
+TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setlogin(SB)
+
+GLOBL	·libc_setlogin_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)
+
+TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setpgid(SB)
+
+GLOBL	·libc_setpgid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)
+
+TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setpriority(SB)
+
+GLOBL	·libc_setpriority_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)
+
+TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setregid(SB)
+
+GLOBL	·libc_setregid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)
+
+TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setreuid(SB)
+
+GLOBL	·libc_setreuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)
+
+TEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setresgid(SB)
+
+GLOBL	·libc_setresgid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)
+
+TEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setresuid(SB)
+
+GLOBL	·libc_setresuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)
+
+TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setrlimit(SB)
+
+GLOBL	·libc_setrlimit_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setrlimit_trampoline_addr(SB)/4, $libc_setrlimit_trampoline<>(SB)
+
+TEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setrtable(SB)
+
+GLOBL	·libc_setrtable_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)
+
+TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setsid(SB)
+
+GLOBL	·libc_setsid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)
+
+TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_settimeofday(SB)
+
+GLOBL	·libc_settimeofday_trampoline_addr(SB), RODATA, $4
+DATA	·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)
+
+TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_setuid(SB)
+
+GLOBL	·libc_setuid_trampoline_addr(SB), RODATA, $4
+DATA	·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)
+
+TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_stat(SB)
+
+GLOBL	·libc_stat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)
+
+TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_statfs(SB)
+
+GLOBL	·libc_statfs_trampoline_addr(SB), RODATA, $4
+DATA	·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)
+
+TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_symlink(SB)
+
+GLOBL	·libc_symlink_trampoline_addr(SB), RODATA, $4
+DATA	·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)
+
+TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_symlinkat(SB)
+
+GLOBL	·libc_symlinkat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)
+
+TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_sync(SB)
+
+GLOBL	·libc_sync_trampoline_addr(SB), RODATA, $4
+DATA	·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)
+
+TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_truncate(SB)
+
+GLOBL	·libc_truncate_trampoline_addr(SB), RODATA, $4
+DATA	·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)
+
+TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_umask(SB)
+
+GLOBL	·libc_umask_trampoline_addr(SB), RODATA, $4
+DATA	·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)
+
+TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_unlink(SB)
+
+GLOBL	·libc_unlink_trampoline_addr(SB), RODATA, $4
+DATA	·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)
+
+TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_unlinkat(SB)
+
+GLOBL	·libc_unlinkat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)
+
+TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_unmount(SB)
+
+GLOBL	·libc_unmount_trampoline_addr(SB), RODATA, $4
+DATA	·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)
+
+TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_write(SB)
+
+GLOBL	·libc_write_trampoline_addr(SB), RODATA, $4
+DATA	·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)
+
+TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_mmap(SB)
+
+GLOBL	·libc_mmap_trampoline_addr(SB), RODATA, $4
+DATA	·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)
+
+TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_munmap(SB)
+
+GLOBL	·libc_munmap_trampoline_addr(SB), RODATA, $4
+DATA	·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)
+
+TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0
+	JMP	libc_utimensat(SB)
+
+GLOBL	·libc_utimensat_trampoline_addr(SB), RODATA, $4
+DATA	·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)
diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
index 467971eed..f59b18a97 100644
--- a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go
@@ -6,6 +6,7 @@
 
 package unix
 
+// Deprecated: Use libc wrappers instead of direct syscalls.
 const (
 	SYS_EXIT           = 1   // { void sys_exit(int rval); }
 	SYS_FORK           = 2   // { int sys_fork(void); }
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
index dea0c9a60..d9c78cdcb 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go
@@ -294,7 +294,7 @@ type PtraceLwpInfoStruct struct {
 	Flags        int32
 	Sigmask      Sigset_t
 	Siglist      Sigset_t
-	Siginfo      __Siginfo
+	Siginfo      __PtraceSiginfo
 	Tdname       [20]int8
 	Child_pid    int32
 	Syscall_code uint32
@@ -312,6 +312,17 @@ type __Siginfo struct {
 	Value  [4]byte
 	_      [32]byte
 }
+type __PtraceSiginfo struct {
+	Signo  int32
+	Errno  int32
+	Code   int32
+	Pid    int32
+	Uid    uint32
+	Status int32
+	Addr   uintptr
+	Value  [4]byte
+	_      [32]byte
+}
 
 type Sigset_t struct {
 	Val [4]uint32
@@ -350,8 +361,8 @@ type FpExtendedPrecision struct{}
 
 type PtraceIoDesc struct {
 	Op   int32
-	Offs *byte
-	Addr *byte
+	Offs uintptr
+	Addr uintptr
 	Len  uint32
 }
 
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
index da0ea0d60..26991b165 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go
@@ -291,7 +291,7 @@ type PtraceLwpInfoStruct struct {
 	Flags        int32
 	Sigmask      Sigset_t
 	Siglist      Sigset_t
-	Siginfo      __Siginfo
+	Siginfo      __PtraceSiginfo
 	Tdname       [20]int8
 	Child_pid    int32
 	Syscall_code uint32
@@ -310,6 +310,18 @@ type __Siginfo struct {
 	_      [40]byte
 }
 
+type __PtraceSiginfo struct {
+	Signo  int32
+	Errno  int32
+	Code   int32
+	Pid    int32
+	Uid    uint32
+	Status int32
+	Addr   uintptr
+	Value  [8]byte
+	_      [40]byte
+}
+
 type Sigset_t struct {
 	Val [4]uint32
 }
@@ -354,8 +366,8 @@ type FpExtendedPrecision struct{}
 
 type PtraceIoDesc struct {
 	Op   int32
-	Offs *byte
-	Addr *byte
+	Offs uintptr
+	Addr uintptr
 	Len  uint64
 }
 
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
index da8f74045..f8324e7e7 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go
@@ -293,7 +293,7 @@ type PtraceLwpInfoStruct struct {
 	Flags        int32
 	Sigmask      Sigset_t
 	Siglist      Sigset_t
-	Siginfo      __Siginfo
+	Siginfo      __PtraceSiginfo
 	Tdname       [20]int8
 	Child_pid    int32
 	Syscall_code uint32
@@ -312,6 +312,18 @@ type __Siginfo struct {
 	_      [32]byte
 }
 
+type __PtraceSiginfo struct {
+	Signo  int32
+	Errno  int32
+	Code   int32
+	Pid    int32
+	Uid    uint32
+	Status int32
+	Addr   uintptr
+	Value  [4]byte
+	_      [32]byte
+}
+
 type Sigset_t struct {
 	Val [4]uint32
 }
@@ -337,8 +349,8 @@ type FpExtendedPrecision struct {
 
 type PtraceIoDesc struct {
 	Op   int32
-	Offs *byte
-	Addr *byte
+	Offs uintptr
+	Addr uintptr
 	Len  uint32
 }
 
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
index d69988e5e..4220411f3 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go
@@ -291,7 +291,7 @@ type PtraceLwpInfoStruct struct {
 	Flags        int32
 	Sigmask      Sigset_t
 	Siglist      Sigset_t
-	Siginfo      __Siginfo
+	Siginfo      __PtraceSiginfo
 	Tdname       [20]int8
 	Child_pid    int32
 	Syscall_code uint32
@@ -310,6 +310,18 @@ type __Siginfo struct {
 	_      [40]byte
 }
 
+type __PtraceSiginfo struct {
+	Signo  int32
+	Errno  int32
+	Code   int32
+	Pid    int32
+	Uid    uint32
+	Status int32
+	Addr   uintptr
+	Value  [8]byte
+	_      [40]byte
+}
+
 type Sigset_t struct {
 	Val [4]uint32
 }
@@ -334,8 +346,8 @@ type FpExtendedPrecision struct{}
 
 type PtraceIoDesc struct {
 	Op   int32
-	Offs *byte
-	Addr *byte
+	Offs uintptr
+	Addr uintptr
 	Len  uint64
 }
 
diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go
index d6fd9e883..0660fd45c 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go
@@ -291,7 +291,7 @@ type PtraceLwpInfoStruct struct {
 	Flags        int32
 	Sigmask      Sigset_t
 	Siglist      Sigset_t
-	Siginfo      __Siginfo
+	Siginfo      __PtraceSiginfo
 	Tdname       [20]int8
 	Child_pid    int32
 	Syscall_code uint32
@@ -310,6 +310,18 @@ type __Siginfo struct {
 	_      [40]byte
 }
 
+type __PtraceSiginfo struct {
+	Signo  int32
+	Errno  int32
+	Code   int32
+	Pid    int32
+	Uid    uint32
+	Status int32
+	Addr   uintptr
+	Value  [8]byte
+	_      [40]byte
+}
+
 type Sigset_t struct {
 	Val [4]uint32
 }
@@ -335,8 +347,8 @@ type FpExtendedPrecision struct{}
 
 type PtraceIoDesc struct {
 	Op   int32
-	Offs *byte
-	Addr *byte
+	Offs uintptr
+	Addr uintptr
 	Len  uint64
 }
 
diff --git a/vendor/golang.org/x/sys/windows/setupapi_windows.go b/vendor/golang.org/x/sys/windows/setupapi_windows.go
index 14027da3f..f8126482f 100644
--- a/vendor/golang.org/x/sys/windows/setupapi_windows.go
+++ b/vendor/golang.org/x/sys/windows/setupapi_windows.go
@@ -296,7 +296,7 @@ const (
 	// Flag to indicate that the sorting from the INF file should be used.
 	DI_INF_IS_SORTED DI_FLAGS = 0x00008000
 
-	// Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched.
+	// Flag to indicate that only the INF specified by SP_DEVINSTALL_PARAMS.DriverPath should be searched.
 	DI_ENUMSINGLEINF DI_FLAGS = 0x00010000
 
 	// Flag that prevents ConfigMgr from removing/re-enumerating devices during device
diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go
index 72074d582..8732cdb95 100644
--- a/vendor/golang.org/x/sys/windows/syscall.go
+++ b/vendor/golang.org/x/sys/windows/syscall.go
@@ -30,8 +30,6 @@ import (
 	"strings"
 	"syscall"
 	"unsafe"
-
-	"golang.org/x/sys/internal/unsafeheader"
 )
 
 // ByteSliceFromString returns a NUL-terminated slice of bytes
@@ -83,13 +81,7 @@ func BytePtrToString(p *byte) string {
 		ptr = unsafe.Pointer(uintptr(ptr) + 1)
 	}
 
-	var s []byte
-	h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
-	h.Data = unsafe.Pointer(p)
-	h.Len = n
-	h.Cap = n
-
-	return string(s)
+	return string(unsafe.Slice(p, n))
 }
 
 // Single-word zero for use when we need a valid pointer to 0 bytes.
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index e27913817..29737b200 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -138,13 +138,7 @@ func UTF16PtrToString(p *uint16) string {
 		ptr = unsafe.Pointer(uintptr(ptr) + unsafe.Sizeof(*p))
 	}
 
-	var s []uint16
-	h := (*unsafeheader.Slice)(unsafe.Pointer(&s))
-	h.Data = unsafe.Pointer(p)
-	h.Len = n
-	h.Cap = n
-
-	return string(utf16.Decode(s))
+	return string(utf16.Decode(unsafe.Slice(p, n)))
 }
 
 func Getpagesize() int { return 4096 }
@@ -364,6 +358,15 @@ func NewCallbackCDecl(fn interface{}) uintptr {
 //sys	SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
 //sys	GetActiveProcessorCount(groupNumber uint16) (ret uint32)
 //sys	GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
+//sys	EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows
+//sys	EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows
+//sys	GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW
+//sys	GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow
+//sys	GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow
+//sys	IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow
+//sys	IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode
+//sys	IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible
+//sys	GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo
 
 // Volume Management Functions
 //sys	DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index f9eaca528..ef489f546 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -3213,3 +3213,22 @@ type ModuleInfo struct {
 }
 
 const ALL_PROCESSOR_GROUPS = 0xFFFF
+
+type Rect struct {
+	Left   int32
+	Top    int32
+	Right  int32
+	Bottom int32
+}
+
+type GUIThreadInfo struct {
+	Size        uint32
+	Flags       uint32
+	Active      HWND
+	Focus       HWND
+	Capture     HWND
+	MenuOwner   HWND
+	MoveSize    HWND
+	CaretHandle HWND
+	CaretRect   Rect
+}
diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
index 52d4742cb..6c6f27ba5 100644
--- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
@@ -444,9 +444,18 @@ var (
 	procCommandLineToArgvW                                   = modshell32.NewProc("CommandLineToArgvW")
 	procSHGetKnownFolderPath                                 = modshell32.NewProc("SHGetKnownFolderPath")
 	procShellExecuteW                                        = modshell32.NewProc("ShellExecuteW")
+	procEnumChildWindows                                     = moduser32.NewProc("EnumChildWindows")
+	procEnumWindows                                          = moduser32.NewProc("EnumWindows")
 	procExitWindowsEx                                        = moduser32.NewProc("ExitWindowsEx")
+	procGetClassNameW                                        = moduser32.NewProc("GetClassNameW")
+	procGetDesktopWindow                                     = moduser32.NewProc("GetDesktopWindow")
+	procGetForegroundWindow                                  = moduser32.NewProc("GetForegroundWindow")
+	procGetGUIThreadInfo                                     = moduser32.NewProc("GetGUIThreadInfo")
 	procGetShellWindow                                       = moduser32.NewProc("GetShellWindow")
 	procGetWindowThreadProcessId                             = moduser32.NewProc("GetWindowThreadProcessId")
+	procIsWindow                                             = moduser32.NewProc("IsWindow")
+	procIsWindowUnicode                                      = moduser32.NewProc("IsWindowUnicode")
+	procIsWindowVisible                                      = moduser32.NewProc("IsWindowVisible")
 	procMessageBoxW                                          = moduser32.NewProc("MessageBoxW")
 	procCreateEnvironmentBlock                               = moduserenv.NewProc("CreateEnvironmentBlock")
 	procDestroyEnvironmentBlock                              = moduserenv.NewProc("DestroyEnvironmentBlock")
@@ -3802,6 +3811,19 @@ func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *ui
 	return
 }
 
+func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) {
+	syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param))
+	return
+}
+
+func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) {
+	r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0)
+	if r1 == 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
 func ExitWindowsEx(flags uint32, reason uint32) (err error) {
 	r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0)
 	if r1 == 0 {
@@ -3810,6 +3832,35 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) {
 	return
 }
 
+func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) {
+	r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount))
+	copied = int32(r0)
+	if copied == 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
+func GetDesktopWindow() (hwnd HWND) {
+	r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0)
+	hwnd = HWND(r0)
+	return
+}
+
+func GetForegroundWindow() (hwnd HWND) {
+	r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0)
+	hwnd = HWND(r0)
+	return
+}
+
+func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) {
+	r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0)
+	if r1 == 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
+
 func GetShellWindow() (shellWindow HWND) {
 	r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0)
 	shellWindow = HWND(r0)
@@ -3825,6 +3876,24 @@ func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {
 	return
 }
 
+func IsWindow(hwnd HWND) (isWindow bool) {
+	r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0)
+	isWindow = r0 != 0
+	return
+}
+
+func IsWindowUnicode(hwnd HWND) (isUnicode bool) {
+	r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0)
+	isUnicode = r0 != 0
+	return
+}
+
+func IsWindowVisible(hwnd HWND) (isVisible bool) {
+	r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0)
+	isVisible = r0 != 0
+	return
+}
+
 func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) {
 	r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0)
 	ret = int32(r0)
diff --git a/vendor/modules.txt b/vendor/modules.txt
index e7ae53317..aa1d34c6c 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -39,7 +39,7 @@ github.com/fsnotify/fsnotify
 # github.com/gdamore/encoding v1.0.0
 ## explicit; go 1.9
 github.com/gdamore/encoding
-# github.com/gdamore/tcell/v2 v2.5.2
+# github.com/gdamore/tcell/v2 v2.5.3
 ## explicit; go 1.12
 github.com/gdamore/tcell/v2
 github.com/gdamore/tcell/v2/terminfo
@@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
 github.com/jesseduffield/go-git/v5/utils/merkletrie/index
 github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
 github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20220815095708-156fda5e0419
+# github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6
 ## explicit; go 1.12
 github.com/jesseduffield/gocui
 # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
@@ -229,7 +229,7 @@ github.com/petermattis/goid
 # github.com/pmezard/go-difflib v1.0.0
 ## explicit
 github.com/pmezard/go-difflib/difflib
-# github.com/rivo/uniseg v0.3.4
+# github.com/rivo/uniseg v0.4.2
 ## explicit; go 1.18
 github.com/rivo/uniseg
 # github.com/sahilm/fuzzy v0.1.0
@@ -291,7 +291,7 @@ golang.org/x/exp/slices
 golang.org/x/net/context
 golang.org/x/net/internal/socks
 golang.org/x/net/proxy
-# golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
+# golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41
 ## explicit; go 1.17
 golang.org/x/sys/cpu
 golang.org/x/sys/internal/unsafeheader

From 9351af382933d456de65acab1451b17677ddb171 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Fri, 16 Sep 2022 08:55:16 -0700
Subject: [PATCH 13/44] yet another retry to reduce flakiness

---
 pkg/integration/deprecated/integration.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkg/integration/deprecated/integration.go b/pkg/integration/deprecated/integration.go
index 9527d1a45..2f9b2ab8c 100644
--- a/pkg/integration/deprecated/integration.go
+++ b/pkg/integration/deprecated/integration.go
@@ -310,7 +310,7 @@ func getTestSpeeds(testStartSpeed float64, mode Mode, speedStr string) []float64
 	if startSpeed > 5 {
 		speeds = append(speeds, 5)
 	}
-	speeds = append(speeds, 1, 0.5)
+	speeds = append(speeds, 1, 0.5, 0.5)
 
 	return speeds
 }

From 74acb3e86a3b171c79c06e3d5d02abcfe5c8cdd0 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Fri, 16 Sep 2022 22:15:02 -0700
Subject: [PATCH 14/44] add integration tests for cherry picking

---
 pkg/gui/modes.go                              |  11 +-
 pkg/i18n/english.go                           |   4 +
 pkg/integration/components/assert.go          |   2 +-
 pkg/integration/components/input.go           |   5 +
 pkg/integration/tests/branch/rebase.go        |  47 +-----
 .../tests/branch/rebase_and_drop.go           |   3 +-
 .../tests/cherry_pick/cherry_pick.go          |  66 ++++++++
 .../cherry_pick/cherry_pick_conflicts.go      |  87 ++++++++++
 pkg/integration/tests/shared/README.md        |   1 +
 pkg/integration/tests/shared/conflicts.go     |  49 ++++++
 pkg/integration/tests/tests.go                |   8 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |  15 --
 .../expected/repo/.git_keep/HEAD              |   1 -
 .../expected/repo/.git_keep/ORIG_HEAD         |   1 -
 .../expected/repo/.git_keep/REBASE_HEAD       |   1 -
 .../expected/repo/.git_keep/index             | Bin 1356 -> 0 bytes
 .../expected/repo/.git_keep/logs/HEAD         |  40 -----
 .../.git_keep/logs/refs/heads/base_branch     |   3 -
 .../repo/.git_keep/logs/refs/heads/develop    |   5 -
 .../logs/refs/heads/feature/cherry-picking    |   9 -
 .../repo/.git_keep/logs/refs/heads/master     |   5 -
 .../.git_keep/logs/refs/heads/other_branch    |   3 -
 .../05/56e5da1cda4e150d6cc1182be6efdb061f59fe | Bin 158 -> 0 bytes
 .../09/cbe8c6717c06a61876b7b641a46a62bf3c585d | Bin 112 -> 0 bytes
 .../16/f2bcca6ce7bcc17277103a5555072a6c3322a2 |   4 -
 .../17/3a40ed58e33060166ccbfb7d0ccc0387be5f09 | Bin 34 -> 0 bytes
 .../17/4a8c9444cfa700682d74059d9fa9be5749242c | Bin 177 -> 0 bytes
 .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes
 .../18/f469bc737f6c2a589205e2ddefceb32a7cc3a7 | Bin 66 -> 0 bytes
 .../19/079c78db18112c5a2720896a040014a2d05f6d | Bin 153 -> 0 bytes
 .../1b/9ae5f5dff631baaa180a30afd9983f83dc27ca | Bin 50 -> 0 bytes
 .../20/85c8dd0a80e95ed959e4db2ab98f66b970ad77 | Bin 144 -> 0 bytes
 .../21/28c3c3def18d6e2a389957252fdb69ba85fce0 | Bin 208 -> 0 bytes
 .../21/78af7503938665881174069be4d48fa483e4af | Bin 117 -> 0 bytes
 .../22/b0fd807dd5e428c2d818aef6a2311d7c11e885 | Bin 66 -> 0 bytes
 .../23/4e2fa9a01b8d7e849b0c2a1bbd550e788ea18d |   2 -
 .../24/6f7487e08e6330ccbec4053e701145d53f64d4 | Bin 327 -> 0 bytes
 .../24/93c87610e0a9b8edfca592cb01a027f60ce587 |   3 -
 .../2c/f63d6da8c52131dd79622f8572b44a1267e420 | Bin 121 -> 0 bytes
 .../2e/cced19ece4424e0d3f26eb3ea2ccb6bfeafaa8 | Bin 150 -> 0 bytes
 .../33/9e2d062760be9ecdb4bb90f97bdb0e634e7831 |   2 -
 .../34/c74161eef968fc951cf170a011fa8abfeddbcd | Bin 120 -> 0 bytes
 .../36/e0ef3e52c6e29e64980c71defbab6064d2da8c | Bin 252 -> 0 bytes
 .../3e/0d4389ab458a8643281e494e3ebae7ce307eec |   1 -
 .../45/20f99d650662a3f597a200fea5f2599f528180 |   3 -
 .../4f/80ec0c7b09eeeb580d0c19947477c02bc88c25 |   1 -
 .../5d/2484f3cb6ce658e296526c48e1a376b2790dfc | Bin 147 -> 0 bytes
 .../5d/a4d9200457542d875fe4def54ac98c16332db0 | Bin 33 -> 0 bytes
 .../5f/3e4598b46a912f0f95a4898743e979343c82f3 | Bin 86 -> 0 bytes
 .../60/91d709b275e712111d016d9b3a4fb44e63f1f6 | Bin 54 -> 0 bytes
 .../61/01e935461d4cd862ae4a720846e87880d198b9 | Bin 66 -> 0 bytes
 .../65/c0438e428cd1aa94588eaa52eb7ebad7ec62fd | Bin 168 -> 0 bytes
 .../68/728b56ed31d03ca94496b9e2a45c62ba0f4e8f |   2 -
 .../69/6a8fd43c580b3bed203977faab4566b052a4e4 | Bin 156 -> 0 bytes
 .../6b/6092c6840d05583489cc32a1260db0d5390a98 | Bin 233 -> 0 bytes
 .../73/17cf7580efd92f974c8dfb3cde84eded8dafec |   2 -
 .../78/3666de4acbb22a9efc205197667f5136118c54 | Bin 328 -> 0 bytes
 .../78/a5ec82970200538b70f5ac61c18acb45ccb8ee |   2 -
 .../79/23e4a952f4b169373b0389be6a9db3cd929547 |   3 -
 .../88/9b0fdfe5f2ae3d7df3066f3bc1e181fa712c8d | Bin 66 -> 0 bytes
 .../88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8 | Bin 65 -> 0 bytes
 .../90/a84fd62f8033027fab3e567a81d5ed2a6a71cd | Bin 66 -> 0 bytes
 .../95/9d7a10da71acf97b17300b40a3b4f30903e09c | Bin 358 -> 0 bytes
 .../9b/b8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 | Bin 154 -> 0 bytes
 .../9d/e8260b738a34a74533df54f2e404276aa96242 | Bin 54 -> 0 bytes
 .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes
 .../af/a76754c933269d7cd45630a7184a20849dbe9c | Bin 66 -> 0 bytes
 .../b4/121e2d6aa156227b6541431ddfb8594904b520 | Bin 66 -> 0 bytes
 .../b8/ab98a9ab0599193a3f41a9cc5cb988283e6722 | Bin 162 -> 0 bytes
 .../bd/6f34089ba29cbae102003bd973e9f37a235c2e | Bin 254 -> 0 bytes
 .../bf/cc5725cd2ef871ff804996f4e02beef3e4dec2 |   2 -
 .../c1/dd146476a4a37fff75b88612a718281ea83b58 | Bin 277 -> 0 bytes
 .../ce/ecbe69460104e09eb2cd7c865df520c5679a68 | Bin 183 -> 0 bytes
 .../d0/60f7226715ca55b04e91fad2b8aca01badd993 | Bin 303 -> 0 bytes
 .../d8/a7c50dcab42b2b62e5c77cdcece620d3964bd4 | Bin 201 -> 0 bytes
 .../d8/e5ca46d2bbd7c115e5849e637efe2361203368 |   2 -
 .../da/72a6dd6fbaaa4a2803a3c867437ab81a1a99a0 | Bin 227 -> 0 bytes
 .../dc/d348507ba1da8f6479b9d964daa302b2fb9d9c |   1 -
 .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes
 .../e3/ae5c6d8407e8307b9bc77923be78c901408f6e | Bin 50 -> 0 bytes
 .../e4/48ae5bf6371d80ebee24a22b6df341797a6511 | Bin 66 -> 0 bytes
 .../e4/666ba294866d5c16f9afebcacf8f4adfee7439 | Bin 86 -> 0 bytes
 .../e4/aa98b835d0a871d9ea02e6d286f0fbb2204cdc |   2 -
 .../ea/a48cb1e3d47e1b8b8df47bdc248e991207cc3d | Bin 361 -> 0 bytes
 .../eb/90e8d7b137a1d89480c9b22fd03199da77c9c7 | Bin 66 -> 0 bytes
 .../ef/029771f117b5f31c972dfa546037662e243ca7 | Bin 162 -> 0 bytes
 .../f1/46c7f7b874778c1ad0cf9aebe45ec2427c7de2 | Bin 144 -> 0 bytes
 .../f3/7d8713ef1390c277b45a084a08c0c142ff7ed9 |   2 -
 .../f3/f762af4429ae89fa0dae3d0a5b500ca11630c4 | Bin 54 -> 0 bytes
 .../f4/ffac820a371104fe611d81bc13a45b70a3ebb3 | Bin 158 -> 0 bytes
 .../fa/cb56c48e4718f71c08116153c93d87bc699671 |   2 -
 .../fd/31cea7e0b6e8d334280be34db8dd86cdda3007 | Bin 352 -> 0 bytes
 .../repo/.git_keep/refs/heads/base_branch     |   1 -
 .../repo/.git_keep/refs/heads/develop         |   1 -
 .../refs/heads/feature/cherry-picking         |   1 -
 .../expected/repo/.git_keep/refs/heads/master |   1 -
 .../repo/.git_keep/refs/heads/other_branch    |   1 -
 .../expected/repo/cherrypicking3              |   1 -
 .../expected/repo/cherrypicking4              |   1 -
 .../expected/repo/cherrypicking5              |   1 -
 .../expected/repo/directory/file              |   1 -
 .../expected/repo/directory/file2             |   1 -
 .../cherryPicking/expected/repo/file          |   1 -
 .../cherryPicking/expected/repo/file1         |  63 -------
 .../cherryPicking/expected/repo/file3         |   1 -
 .../cherryPicking/expected/repo/file4         |   1 -
 .../cherryPicking/expected/repo/file5         |   1 -
 test/integration/cherryPicking/recording.json |   1 -
 test/integration/cherryPicking/setup.sh       | 157 ------------------
 test/integration/cherryPicking/test.json      |   1 -
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../cherry_pick/expected/repo/.git_keep/HEAD  |   1 +
 .../expected/repo/.git_keep/ORIG_HEAD         |   1 +
 .../expected/repo/.git_keep/config            |   2 +
 .../expected/repo/.git_keep/description       |   0
 .../cherry_pick/expected/repo/.git_keep/index | Bin 0 -> 65 bytes
 .../expected/repo/.git_keep/info/exclude      |   0
 .../expected/repo/.git_keep/logs/HEAD         |  14 ++
 .../.git_keep/logs/refs/heads/first-branch    |   4 +
 .../repo/.git_keep/logs/refs/heads/master     |   1 +
 .../.git_keep/logs/refs/heads/second-branch   |   3 +
 .../19/7a799a14b2ca7478cfe339e7c83f7cdea4918b | Bin 0 -> 147 bytes
 .../19/8998809e08270eebeb746d6aed45df9faee6a2 |   2 +
 .../2b/10745f8823e1d49edc446ea1440d7730a6625b | Bin 0 -> 146 bytes
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../5b/06c6c8d51ba89367991cc7b40dda5d827bb95a |   2 +
 .../5d/9c4c2ff245b2b0112cfa90a529baa3f3e12c6f | Bin 0 -> 151 bytes
 .../9c/f3d6426fc20e3ccf1a9b0e3fa593f136fee92e | Bin 0 -> 150 bytes
 .../c3/7c09bdd6f969542d7e94829662c5ac19f5fb7e | Bin 0 -> 145 bytes
 .../repo/.git_keep/refs/heads/first-branch    |   1 +
 .../expected/repo/.git_keep/refs/heads/master |   1 +
 .../repo/.git_keep/refs/heads/second-branch   |   1 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |  15 ++
 .../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            |  12 ++
 .../expected/repo/.git_keep/description       |   1 +
 .../expected/repo/.git_keep/index             | Bin 0 -> 231 bytes
 .../expected/repo/.git_keep/info/exclude      |   7 +
 .../expected/repo/.git_keep/logs/HEAD         |  15 ++
 .../logs/refs/heads/first-change-branch       |   3 +
 .../.git_keep/logs/refs/heads/original-branch |   4 +
 .../logs/refs/heads/second-change-branch      |   3 +
 .../00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 | Bin 0 -> 49 bytes
 .../10/91767dde559ffdc97b64f1536955253b931e50 |   3 +
 .../11/0d6e0b946c9d9b9b5e44c29d98692e925c368c | Bin 0 -> 48 bytes
 .../16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 | Bin 0 -> 46 bytes
 .../1f/332f64cb03c06913491af20cd407158776bd55 | Bin 0 -> 49 bytes
 .../1f/9963859d30c1bfe620e9121f3d689a07a35519 | Bin 0 -> 147 bytes
 .../2a/ccf5d0d5f4c2501627da4aebeda580cd86f0eb | Bin 0 -> 85 bytes
 .../3a/ac30738b0dda38d964abe6c2386603f9309a65 | Bin 0 -> 43 bytes
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../4c/16472189d1db34cb67b99439725202216e26d9 | Bin 0 -> 41 bytes
 .../94/8965327ab8404a12fb80d9490ded95969431d1 | Bin 0 -> 169 bytes
 .../97/7cb37e46b9a00e19e6f99c5c179a30b990ca3d | Bin 0 -> 151 bytes
 .../ad/9b1c669fdc039038e54fc497f3e888cc4654e0 | Bin 0 -> 145 bytes
 .../cc/c8b929484ac23c527c54d1a109f20b16f5a006 |   2 +
 .../da/e6bc03641275886fa12a2a00c01edd6e975d99 |   3 +
 .../dd/df38b00920854961ad30512b3b174141e877b4 |   2 +
 .../e0/10d664020f79e46ef7f8bf2a1508fe0864109c |   2 +
 .../.git_keep/refs/heads/first-change-branch  |   1 +
 .../repo/.git_keep/refs/heads/original-branch |   1 +
 .../.git_keep/refs/heads/second-change-branch |   1 +
 .../cherry_pick_conflicts/expected/repo/file  |   6 +
 166 files changed, 351 insertions(+), 404 deletions(-)
 create mode 100644 pkg/integration/tests/cherry_pick/cherry_pick.go
 create mode 100644 pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
 create mode 100644 pkg/integration/tests/shared/README.md
 create mode 100644 pkg/integration/tests/shared/conflicts.go
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/COMMIT_EDITMSG
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/HEAD
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/ORIG_HEAD
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/REBASE_HEAD
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/index
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/HEAD
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/base_branch
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/develop
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/feature/cherry-picking
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/master
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/other_branch
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/05/56e5da1cda4e150d6cc1182be6efdb061f59fe
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/16/f2bcca6ce7bcc17277103a5555072a6c3322a2
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/17/3a40ed58e33060166ccbfb7d0ccc0387be5f09
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/17/4a8c9444cfa700682d74059d9fa9be5749242c
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/18/f469bc737f6c2a589205e2ddefceb32a7cc3a7
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/19/079c78db18112c5a2720896a040014a2d05f6d
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/20/85c8dd0a80e95ed959e4db2ab98f66b970ad77
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/21/28c3c3def18d6e2a389957252fdb69ba85fce0
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/22/b0fd807dd5e428c2d818aef6a2311d7c11e885
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/23/4e2fa9a01b8d7e849b0c2a1bbd550e788ea18d
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/24/6f7487e08e6330ccbec4053e701145d53f64d4
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/24/93c87610e0a9b8edfca592cb01a027f60ce587
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/2c/f63d6da8c52131dd79622f8572b44a1267e420
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/2e/cced19ece4424e0d3f26eb3ea2ccb6bfeafaa8
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/33/9e2d062760be9ecdb4bb90f97bdb0e634e7831
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/36/e0ef3e52c6e29e64980c71defbab6064d2da8c
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/3e/0d4389ab458a8643281e494e3ebae7ce307eec
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/45/20f99d650662a3f597a200fea5f2599f528180
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/5d/2484f3cb6ce658e296526c48e1a376b2790dfc
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/5d/a4d9200457542d875fe4def54ac98c16332db0
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/61/01e935461d4cd862ae4a720846e87880d198b9
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/65/c0438e428cd1aa94588eaa52eb7ebad7ec62fd
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/68/728b56ed31d03ca94496b9e2a45c62ba0f4e8f
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/69/6a8fd43c580b3bed203977faab4566b052a4e4
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/6b/6092c6840d05583489cc32a1260db0d5390a98
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/73/17cf7580efd92f974c8dfb3cde84eded8dafec
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/78/3666de4acbb22a9efc205197667f5136118c54
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/78/a5ec82970200538b70f5ac61c18acb45ccb8ee
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/79/23e4a952f4b169373b0389be6a9db3cd929547
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/88/9b0fdfe5f2ae3d7df3066f3bc1e181fa712c8d
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/90/a84fd62f8033027fab3e567a81d5ed2a6a71cd
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/95/9d7a10da71acf97b17300b40a3b4f30903e09c
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/9b/b8cd97914c8e8a7b8a6ec6f94bca0b09fa0048
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/af/a76754c933269d7cd45630a7184a20849dbe9c
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/b4/121e2d6aa156227b6541431ddfb8594904b520
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/b8/ab98a9ab0599193a3f41a9cc5cb988283e6722
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/bd/6f34089ba29cbae102003bd973e9f37a235c2e
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/bf/cc5725cd2ef871ff804996f4e02beef3e4dec2
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/c1/dd146476a4a37fff75b88612a718281ea83b58
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/ce/ecbe69460104e09eb2cd7c865df520c5679a68
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/d0/60f7226715ca55b04e91fad2b8aca01badd993
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/a7c50dcab42b2b62e5c77cdcece620d3964bd4
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/e5ca46d2bbd7c115e5849e637efe2361203368
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/da/72a6dd6fbaaa4a2803a3c867437ab81a1a99a0
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/48ae5bf6371d80ebee24a22b6df341797a6511
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/aa98b835d0a871d9ea02e6d286f0fbb2204cdc
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/ea/a48cb1e3d47e1b8b8df47bdc248e991207cc3d
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/eb/90e8d7b137a1d89480c9b22fd03199da77c9c7
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/ef/029771f117b5f31c972dfa546037662e243ca7
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/f1/46c7f7b874778c1ad0cf9aebe45ec2427c7de2
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/7d8713ef1390c277b45a084a08c0c142ff7ed9
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/f4/ffac820a371104fe611d81bc13a45b70a3ebb3
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/fa/cb56c48e4718f71c08116153c93d87bc699671
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/objects/fd/31cea7e0b6e8d334280be34db8dd86cdda3007
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/base_branch
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/develop
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/feature/cherry-picking
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/master
 delete mode 100644 test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/other_branch
 delete mode 100644 test/integration/cherryPicking/expected/repo/cherrypicking3
 delete mode 100644 test/integration/cherryPicking/expected/repo/cherrypicking4
 delete mode 100644 test/integration/cherryPicking/expected/repo/cherrypicking5
 delete mode 100644 test/integration/cherryPicking/expected/repo/directory/file
 delete mode 100644 test/integration/cherryPicking/expected/repo/directory/file2
 delete mode 100644 test/integration/cherryPicking/expected/repo/file
 delete mode 100644 test/integration/cherryPicking/expected/repo/file1
 delete mode 100644 test/integration/cherryPicking/expected/repo/file3
 delete mode 100644 test/integration/cherryPicking/expected/repo/file4
 delete mode 100644 test/integration/cherryPicking/expected/repo/file5
 delete mode 100644 test/integration/cherryPicking/recording.json
 delete mode 100644 test/integration/cherryPicking/setup.sh
 delete mode 100644 test/integration/cherryPicking/test.json
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/COMMIT_EDITMSG
 rename test/{integration/cherryPicking => integration_new/cherry_pick/cherry_pick}/expected/repo/.git_keep/FETCH_HEAD (100%)
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/ORIG_HEAD
 rename test/{integration/cherryPicking => integration_new/cherry_pick/cherry_pick}/expected/repo/.git_keep/config (87%)
 rename test/{integration/cherryPicking => integration_new/cherry_pick/cherry_pick}/expected/repo/.git_keep/description (100%)
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/index
 rename test/{integration/cherryPicking => integration_new/cherry_pick/cherry_pick}/expected/repo/.git_keep/info/exclude (100%)
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/first-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/master
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/second-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/7a799a14b2ca7478cfe339e7c83f7cdea4918b
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/8998809e08270eebeb746d6aed45df9faee6a2
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/2b/10745f8823e1d49edc446ea1440d7730a6625b
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5b/06c6c8d51ba89367991cc7b40dda5d827bb95a
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5d/9c4c2ff245b2b0112cfa90a529baa3f3e12c6f
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/9c/f3d6426fc20e3ccf1a9b0e3fa593f136fee92e
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/c3/7c09bdd6f969542d7e94829662c5ac19f5fb7e
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/first-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/master
 create mode 100644 test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/second-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/COMMIT_EDITMSG
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/FETCH_HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/ORIG_HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/config
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/description
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/index
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/info/exclude
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/first-change-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/original-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/second-change-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/10/91767dde559ffdc97b64f1536955253b931e50
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/9963859d30c1bfe620e9121f3d689a07a35519
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/2a/ccf5d0d5f4c2501627da4aebeda580cd86f0eb
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/94/8965327ab8404a12fb80d9490ded95969431d1
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/97/7cb37e46b9a00e19e6f99c5c179a30b990ca3d
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/ad/9b1c669fdc039038e54fc497f3e888cc4654e0
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/cc/c8b929484ac23c527c54d1a109f20b16f5a006
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/da/e6bc03641275886fa12a2a00c01edd6e975d99
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/dd/df38b00920854961ad30512b3b174141e877b4
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/e0/10d664020f79e46ef7f8bf2a1508fe0864109c
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/first-change-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/original-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/second-change-branch
 create mode 100644 test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/file

diff --git a/pkg/gui/modes.go b/pkg/gui/modes.go
index 3a3bc51a6..70d403db2 100644
--- a/pkg/gui/modes.go
+++ b/pkg/gui/modes.go
@@ -53,10 +53,17 @@ func (gui *Gui) modeStatuses() []modeStatus {
 		{
 			isActive: gui.State.Modes.CherryPicking.Active,
 			description: func() string {
+				copiedCount := len(gui.State.Modes.CherryPicking.CherryPickedCommits)
+				text := gui.c.Tr.LcCommitsCopied
+				if copiedCount == 1 {
+					text = gui.c.Tr.LcCommitCopied
+				}
+
 				return gui.withResetButton(
 					fmt.Sprintf(
-						"%d commits copied",
-						len(gui.State.Modes.CherryPicking.CherryPickedCommits),
+						"%d %s",
+						copiedCount,
+						text,
 					),
 					style.FgCyan,
 				)
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 608ad2f45..08f737a51 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -507,6 +507,8 @@ type TranslationSet struct {
 	EmptyOutput                         string
 	Patch                               string
 	CustomPatch                         string
+	LcCommitsCopied                     string
+	LcCommitCopied                      string
 	Actions                             Actions
 	Bisect                              Bisect
 }
@@ -1147,6 +1149,8 @@ func EnglishTranslationSet() TranslationSet {
 		EmptyOutput:                         "<empty output>",
 		Patch:                               "Patch",
 		CustomPatch:                         "Custom patch",
+		LcCommitsCopied:                     "commits copied",
+		LcCommitCopied:                      "commit copied",
 		Actions: Actions{
 			// TODO: combine this with the original keybinding descriptions (those are all in lowercase atm)
 			CheckoutCommit:                    "Checkout commit",
diff --git a/pkg/integration/components/assert.go b/pkg/integration/components/assert.go
index 28be134a6..daa376c66 100644
--- a/pkg/integration/components/assert.go
+++ b/pkg/integration/components/assert.go
@@ -217,7 +217,7 @@ func (self *Assert) matchString(matcher *matcher, context string, getValue func(
 }
 
 func (self *Assert) assertWithRetries(test func() (bool, string)) {
-	waitTimes := []int{0, 1, 5, 10, 200, 500, 1000, 2000}
+	waitTimes := []int{0, 1, 5, 10, 200, 500, 1000, 2000, 4000}
 
 	var message string
 	for _, waitTime := range waitTimes {
diff --git a/pkg/integration/components/input.go b/pkg/integration/components/input.go
index 45ffdfc5d..61c78e9eb 100644
--- a/pkg/integration/components/input.go
+++ b/pkg/integration/components/input.go
@@ -76,6 +76,11 @@ func (self *Input) Confirm() {
 	self.pressKey(self.keys.Universal.Confirm)
 }
 
+// i.e. same as Confirm
+func (self *Input) Enter() {
+	self.pressKey(self.keys.Universal.Confirm)
+}
+
 // i.e. pressing escape
 func (self *Input) Cancel() {
 	self.pressKey(self.keys.Universal.Return)
diff --git a/pkg/integration/tests/branch/rebase.go b/pkg/integration/tests/branch/rebase.go
index 8b414b794..efaa07c88 100644
--- a/pkg/integration/tests/branch/rebase.go
+++ b/pkg/integration/tests/branch/rebase.go
@@ -3,59 +3,16 @@ package branch
 import (
 	"github.com/jesseduffield/lazygit/pkg/config"
 	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+	"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
 )
 
-var originalFileContent = `
-This
-Is
-The
-Original
-File
-`
-
-var firstChangeFileContent = `
-This
-Is
-The
-First Change
-File
-`
-
-var secondChangeFileContent = `
-This
-Is
-The
-Second Change
-File
-`
-
-// prepares us for a rebase that has conflicts
-var commonRebaseSetup = func(shell *Shell) {
-	shell.
-		NewBranch("original-branch").
-		EmptyCommit("one").
-		EmptyCommit("two").
-		EmptyCommit("three").
-		CreateFileAndAdd("file", originalFileContent).
-		Commit("original").
-		NewBranch("first-change-branch").
-		UpdateFileAndAdd("file", firstChangeFileContent).
-		Commit("first change").
-		Checkout("original-branch").
-		NewBranch("second-change-branch").
-		UpdateFileAndAdd("file", secondChangeFileContent).
-		Commit("second change").
-		EmptyCommit("second-change-branch unrelated change").
-		Checkout("first-change-branch")
-}
-
 var Rebase = NewIntegrationTest(NewIntegrationTestArgs{
 	Description:  "Rebase onto another branch, deal with the conflicts.",
 	ExtraCmdArgs: "",
 	Skip:         false,
 	SetupConfig:  func(config *config.AppConfig) {},
 	SetupRepo: func(shell *Shell) {
-		commonRebaseSetup(shell)
+		shared.MergeConflictsSetup(shell)
 	},
 	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
 		input.SwitchToBranchesWindow()
diff --git a/pkg/integration/tests/branch/rebase_and_drop.go b/pkg/integration/tests/branch/rebase_and_drop.go
index d87919a0a..853ed692d 100644
--- a/pkg/integration/tests/branch/rebase_and_drop.go
+++ b/pkg/integration/tests/branch/rebase_and_drop.go
@@ -3,6 +3,7 @@ package branch
 import (
 	"github.com/jesseduffield/lazygit/pkg/config"
 	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+	"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
 )
 
 var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
@@ -11,7 +12,7 @@ var RebaseAndDrop = NewIntegrationTest(NewIntegrationTestArgs{
 	Skip:         false,
 	SetupConfig:  func(config *config.AppConfig) {},
 	SetupRepo: func(shell *Shell) {
-		commonRebaseSetup(shell)
+		shared.MergeConflictsSetup(shell)
 		// addin a couple additional commits so that we can drop one
 		shell.EmptyCommit("to remove")
 		shell.EmptyCommit("to keep")
diff --git a/pkg/integration/tests/cherry_pick/cherry_pick.go b/pkg/integration/tests/cherry_pick/cherry_pick.go
new file mode 100644
index 000000000..0f5715434
--- /dev/null
+++ b/pkg/integration/tests/cherry_pick/cherry_pick.go
@@ -0,0 +1,66 @@
+package cherry_pick
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var CherryPick = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Cherry pick commits from the subcommits view, without conflicts",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		shell.
+			EmptyCommit("base").
+			NewBranch("first-branch").
+			NewBranch("second-branch").
+			Checkout("first-branch").
+			EmptyCommit("one").
+			EmptyCommit("two").
+			Checkout("second-branch").
+			EmptyCommit("three").
+			EmptyCommit("four").
+			Checkout("first-branch")
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		input.SwitchToBranchesWindow()
+		assert.CurrentViewName("localBranches")
+
+		assert.MatchSelectedLine(Contains("first-branch"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second-branch"))
+
+		input.Enter()
+
+		assert.CurrentViewName("subCommits")
+		assert.MatchSelectedLine(Contains("four"))
+		input.PressKeys(keys.Commits.CherryPickCopy)
+		assert.MatchViewContent("information", Contains("1 commit copied"))
+
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("three"))
+		input.PressKeys(keys.Commits.CherryPickCopy)
+		assert.MatchViewContent("information", Contains("2 commits copied"))
+
+		input.SwitchToCommitsWindow()
+		assert.CurrentViewName("commits")
+
+		assert.MatchSelectedLine(Contains("two"))
+		input.PressKeys(keys.Commits.PasteCommits)
+		assert.InAlert()
+		assert.MatchCurrentViewContent(Contains("Are you sure you want to cherry-pick the copied commits onto this branch?"))
+
+		input.Confirm()
+		assert.CurrentViewName("commits")
+		assert.MatchSelectedLine(Contains("four"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("three"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("two"))
+
+		assert.MatchViewContent("information", Contains("2 commits copied"))
+		input.PressKeys(keys.Universal.Return)
+		assert.MatchViewContent("information", NotContains("commits copied"))
+	},
+})
diff --git a/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
new file mode 100644
index 000000000..e747d8e4d
--- /dev/null
+++ b/pkg/integration/tests/cherry_pick/cherry_pick_conflicts.go
@@ -0,0 +1,87 @@
+package cherry_pick
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+	"github.com/jesseduffield/lazygit/pkg/integration/tests/shared"
+)
+
+var CherryPickConflicts = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Cherry pick commits from the subcommits view, with conflicts",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		shared.MergeConflictsSetup(shell)
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		input.SwitchToBranchesWindow()
+		assert.CurrentViewName("localBranches")
+
+		assert.MatchSelectedLine(Contains("first-change-branch"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second-change-branch"))
+
+		input.Enter()
+
+		assert.CurrentViewName("subCommits")
+		assert.MatchSelectedLine(Contains("second-change-branch unrelated change"))
+		input.PressKeys(keys.Commits.CherryPickCopy)
+		assert.MatchViewContent("information", Contains("1 commit copied"))
+
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second change"))
+		input.PressKeys(keys.Commits.CherryPickCopy)
+		assert.MatchViewContent("information", Contains("2 commits copied"))
+
+		input.SwitchToCommitsWindow()
+		assert.CurrentViewName("commits")
+
+		assert.MatchSelectedLine(Contains("first change"))
+		input.PressKeys(keys.Commits.PasteCommits)
+		assert.InAlert()
+		assert.MatchCurrentViewContent(Contains("Are you sure you want to cherry-pick the copied commits onto this branch?"))
+
+		input.Confirm()
+
+		assert.MatchCurrentViewContent(Contains("Conflicts!"))
+		input.Confirm()
+
+		assert.CurrentViewName("files")
+		assert.MatchSelectedLine(Contains("file"))
+
+		// not using Confirm() convenience method because I suspect we might change this
+		// keybinding to something more bespoke
+		input.PressKeys(keys.Universal.Confirm)
+
+		assert.CurrentViewName("mergeConflicts")
+		// picking 'Second change'
+		input.NextItem()
+		input.PrimaryAction()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewContent(Contains("all merge conflicts resolved. Continue?"))
+		input.Confirm()
+
+		assert.CurrentViewName("files")
+		assert.WorkingTreeFileCount(0)
+
+		input.SwitchToCommitsWindow()
+		assert.CurrentViewName("commits")
+
+		assert.MatchSelectedLine(Contains("second-change-branch unrelated change"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("second change"))
+		// because we picked 'Second change' when resolving the conflict,
+		// we now see this commit as having replaced First Change with Second Change,
+		// as opposed to replacing 'Original' with 'Second change'
+		assert.MatchMainViewContent(Contains("-First Change"))
+		assert.MatchMainViewContent(Contains("+Second Change"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("first change"))
+
+		assert.MatchViewContent("information", Contains("2 commits copied"))
+		input.PressKeys(keys.Universal.Return)
+		assert.MatchViewContent("information", NotContains("commits copied"))
+	},
+})
diff --git a/pkg/integration/tests/shared/README.md b/pkg/integration/tests/shared/README.md
new file mode 100644
index 000000000..2dc27a428
--- /dev/null
+++ b/pkg/integration/tests/shared/README.md
@@ -0,0 +1 @@
+This package contains shared helper functions for tests. It is not intended to contain any actual tests itself.
diff --git a/pkg/integration/tests/shared/conflicts.go b/pkg/integration/tests/shared/conflicts.go
new file mode 100644
index 000000000..f01125c91
--- /dev/null
+++ b/pkg/integration/tests/shared/conflicts.go
@@ -0,0 +1,49 @@
+package shared
+
+import (
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var OriginalFileContent = `
+This
+Is
+The
+Original
+File
+`
+
+var FirstChangeFileContent = `
+This
+Is
+The
+First Change
+File
+`
+
+var SecondChangeFileContent = `
+This
+Is
+The
+Second Change
+File
+`
+
+// prepares us for a rebase/merge that has conflicts
+var MergeConflictsSetup = func(shell *Shell) {
+	shell.
+		NewBranch("original-branch").
+		EmptyCommit("one").
+		EmptyCommit("two").
+		EmptyCommit("three").
+		CreateFileAndAdd("file", OriginalFileContent).
+		Commit("original").
+		NewBranch("first-change-branch").
+		UpdateFileAndAdd("file", FirstChangeFileContent).
+		Commit("first change").
+		Checkout("original-branch").
+		NewBranch("second-change-branch").
+		UpdateFileAndAdd("file", SecondChangeFileContent).
+		Commit("second change").
+		EmptyCommit("second-change-branch unrelated change").
+		Checkout("first-change-branch")
+}
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 0721fbf17..9280347be 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -11,6 +11,7 @@ import (
 	"github.com/jesseduffield/lazygit/pkg/integration/components"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/bisect"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/branch"
+	"github.com/jesseduffield/lazygit/pkg/integration/tests/cherry_pick"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/commit"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/custom_commands"
 	"github.com/jesseduffield/lazygit/pkg/integration/tests/interactive_rebase"
@@ -33,6 +34,8 @@ var tests = []*components.IntegrationTest{
 	custom_commands.MenuFromCommand,
 	bisect.Basic,
 	bisect.FromOtherBranch,
+	cherry_pick.CherryPick,
+	cherry_pick.CherryPickConflicts,
 }
 
 func GetTests() []*components.IntegrationTest {
@@ -55,6 +58,11 @@ func GetTests() []*components.IntegrationTest {
 				return nil
 			}
 
+			// the shared directory won't itself contain tests: only shared helper functions
+			if filepath.Base(filepath.Dir(path)) == "shared" {
+				return nil
+			}
+
 			nameFromPath := components.TestNameFromFilePath(path)
 			if !testNamesSet.Includes(nameFromPath) {
 				missingTestNames = append(missingTestNames, nameFromPath)
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration/cherryPicking/expected/repo/.git_keep/COMMIT_EDITMSG
deleted file mode 100644
index e4df020f1..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/COMMIT_EDITMSG
+++ /dev/null
@@ -1,15 +0,0 @@
-fourth commit on develop
-
-# Please enter the commit message for your changes. Lines starting
-# with '#' will be ignored, and an empty message aborts the commit.
-#
-# interactive rebase in progress; onto 696a8fd
-# Last commands done (2 commands done):
-#    pick 234e2fa third commit on develop
-#    pick 0556e5d fourth commit on develop
-# No commands remaining.
-# You are currently rebasing branch 'other_branch' on '696a8fd'.
-#
-# Changes to be committed:
-#	modified:   file5
-#
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/HEAD b/test/integration/cherryPicking/expected/repo/.git_keep/HEAD
deleted file mode 100644
index 904a2e296..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/HEAD
+++ /dev/null
@@ -1 +0,0 @@
-ref: refs/heads/other_branch
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/ORIG_HEAD b/test/integration/cherryPicking/expected/repo/.git_keep/ORIG_HEAD
deleted file mode 100644
index 343995424..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/ORIG_HEAD
+++ /dev/null
@@ -1 +0,0 @@
-696a8fd43c580b3bed203977faab4566b052a4e4
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/REBASE_HEAD b/test/integration/cherryPicking/expected/repo/.git_keep/REBASE_HEAD
deleted file mode 100644
index 40c059dd4..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/REBASE_HEAD
+++ /dev/null
@@ -1 +0,0 @@
-0556e5da1cda4e150d6cc1182be6efdb061f59fe
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/index b/test/integration/cherryPicking/expected/repo/.git_keep/index
deleted file mode 100644
index f68534e4edc11c99a7b9d7b1f5359499aab97f70..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1356
zcmZ?q402{*U|<4bu7vE}WlS{(#bGof0|N`2Zr*AJhQ=if42)laYD9q8<n@FX*EgCk
zyfLNW<R<+KhBI%KpFGaMmz<GWR8(1znVg-Omu?JH#{f3x{<%^Z4K;5sx_MiK<aDzZ
zhACC2Iy%eV-x2A_vQ+`iJQJ9C%tk_2LFR#IsCj46&0D`bJ>;aZ+T5BeVFt@3ycAmI
z?wf;Vo+;G40wvYt13>e@G}OF6H1pW*XY*>GDSP&Y|CGWZbpbDbja^5i8Te8%i&B$I
z@{20<(=u~X;pS;7Hi69p(opk)h%%2K)jT6e_!X#InN0_o2cn_o^`V)k5WD220!w&^
zZhQQbdtbdy_J|qlZeU=6xe6Q)1xh;WLcs0<(ol1PQO#k@xpUbgpnBo0{*=m{H&bpc
zX4>?7?i>bIkU54R?}6g8KuQ1SLl_M;Cj`|T2Ia@=Vscy9Ul>%+K3=K3ui_-5Lw_E`
z9B{G#nN!EM>5CeShMMz_cyqwX0c1|S^^E8FFdAY`z970e(zBj^z5mT{*D47vgY`FO
z*f-x%KLv3QI2ka61i88by=TK<XrN%owKv~{WA>ssyB;zzSl=vu`MF9tMh_l03`PnD
zT%W%ut#{E}*ZGTgoh?^%0M9}(gCjw%p}>5^_yQ#t7y?Z+Ff%b>Fn}=<8DE;Z$@<(#
zTIW^7;r61U;o^*)*u+qbF@oua8`CkH|NhfY>uhU3v*lYKeAxJ_P^TB07>Y4w7{*9^
z$=p+1pQ9BqiS^Ol_vbci)f`@qO$@~ta|~mic&v;5W-i<C`kl%m?cC3fl~t*N*u+qb
zvA{59!V3Ru`VGcR^{ef|sv57p)ygV7i%ks07)uOels5crsJ;3`<IoL>b>9{l%GL<J
rXvHQ5O4p`{n1RL=wzP{a{iGb`T3)p4;x3~%Z?B))To&-UXX8`=X^`Mf

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/HEAD b/test/integration/cherryPicking/expected/repo/.git_keep/logs/HEAD
deleted file mode 100644
index d580b5c16..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/HEAD
+++ /dev/null
@@ -1,40 +0,0 @@
-0000000000000000000000000000000000000000 2cf63d6da8c52131dd79622f8572b44a1267e420 CI <CI@example.com> 1617673072 +1000	commit (initial): first commit
-2cf63d6da8c52131dd79622f8572b44a1267e420 2cf63d6da8c52131dd79622f8572b44a1267e420 CI <CI@example.com> 1617673072 +1000	checkout: moving from master to feature/cherry-picking
-2cf63d6da8c52131dd79622f8572b44a1267e420 e4aa98b835d0a871d9ea02e6d286f0fbb2204cdc CI <CI@example.com> 1617673072 +1000	commit: first commit freshman year
-e4aa98b835d0a871d9ea02e6d286f0fbb2204cdc ef029771f117b5f31c972dfa546037662e243ca7 CI <CI@example.com> 1617673072 +1000	commit: second commit subway eat fresh
-ef029771f117b5f31c972dfa546037662e243ca7 2493c87610e0a9b8edfca592cb01a027f60ce587 CI <CI@example.com> 1617673072 +1000	commit: third commit fresh
-2493c87610e0a9b8edfca592cb01a027f60ce587 d8e5ca46d2bbd7c115e5849e637efe2361203368 CI <CI@example.com> 1617673072 +1000	commit: fourth commit cool
-d8e5ca46d2bbd7c115e5849e637efe2361203368 78a5ec82970200538b70f5ac61c18acb45ccb8ee CI <CI@example.com> 1617673072 +1000	commit: fifth commit nice
-78a5ec82970200538b70f5ac61c18acb45ccb8ee 19079c78db18112c5a2720896a040014a2d05f6d CI <CI@example.com> 1617673072 +1000	commit: sixth commit haha
-19079c78db18112c5a2720896a040014a2d05f6d 4520f99d650662a3f597a200fea5f2599f528180 CI <CI@example.com> 1617673072 +1000	commit: seventh commit yeah
-4520f99d650662a3f597a200fea5f2599f528180 9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 CI <CI@example.com> 1617673072 +1000	commit: eighth commit woo
-9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 CI <CI@example.com> 1617673072 +1000	checkout: moving from feature/cherry-picking to develop
-9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 7923e4a952f4b169373b0389be6a9db3cd929547 CI <CI@example.com> 1617673072 +1000	commit: first commit on develop
-7923e4a952f4b169373b0389be6a9db3cd929547 2cf63d6da8c52131dd79622f8572b44a1267e420 CI <CI@example.com> 1617673072 +1000	checkout: moving from develop to master
-2cf63d6da8c52131dd79622f8572b44a1267e420 bfcc5725cd2ef871ff804996f4e02beef3e4dec2 CI <CI@example.com> 1617673072 +1000	commit: first commit on master
-bfcc5725cd2ef871ff804996f4e02beef3e4dec2 7923e4a952f4b169373b0389be6a9db3cd929547 CI <CI@example.com> 1617673072 +1000	checkout: moving from master to develop
-7923e4a952f4b169373b0389be6a9db3cd929547 7317cf7580efd92f974c8dfb3cde84eded8dafec CI <CI@example.com> 1617673072 +1000	commit: second commit on develop
-7317cf7580efd92f974c8dfb3cde84eded8dafec bfcc5725cd2ef871ff804996f4e02beef3e4dec2 CI <CI@example.com> 1617673072 +1000	checkout: moving from develop to master
-bfcc5725cd2ef871ff804996f4e02beef3e4dec2 f4ffac820a371104fe611d81bc13a45b70a3ebb3 CI <CI@example.com> 1617673072 +1000	commit: second commit on master
-f4ffac820a371104fe611d81bc13a45b70a3ebb3 7317cf7580efd92f974c8dfb3cde84eded8dafec CI <CI@example.com> 1617673072 +1000	checkout: moving from master to develop
-7317cf7580efd92f974c8dfb3cde84eded8dafec 234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d CI <CI@example.com> 1617673072 +1000	commit: third commit on develop
-234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d f4ffac820a371104fe611d81bc13a45b70a3ebb3 CI <CI@example.com> 1617673072 +1000	checkout: moving from develop to master
-f4ffac820a371104fe611d81bc13a45b70a3ebb3 facb56c48e4718f71c08116153c93d87bc699671 CI <CI@example.com> 1617673072 +1000	commit: third commit on master
-facb56c48e4718f71c08116153c93d87bc699671 234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d CI <CI@example.com> 1617673072 +1000	checkout: moving from master to develop
-234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d 0556e5da1cda4e150d6cc1182be6efdb061f59fe CI <CI@example.com> 1617673072 +1000	commit: fourth commit on develop
-0556e5da1cda4e150d6cc1182be6efdb061f59fe facb56c48e4718f71c08116153c93d87bc699671 CI <CI@example.com> 1617673072 +1000	checkout: moving from develop to master
-facb56c48e4718f71c08116153c93d87bc699671 339e2d062760be9ecdb4bb90f97bdb0e634e7831 CI <CI@example.com> 1617673072 +1000	commit: fourth commit on master
-339e2d062760be9ecdb4bb90f97bdb0e634e7831 339e2d062760be9ecdb4bb90f97bdb0e634e7831 CI <CI@example.com> 1617673072 +1000	checkout: moving from master to base_branch
-339e2d062760be9ecdb4bb90f97bdb0e634e7831 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	commit: file
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	checkout: moving from base_branch to other_branch
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	checkout: moving from other_branch to base_branch
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 68728b56ed31d03ca94496b9e2a45c62ba0f4e8f CI <CI@example.com> 1617673072 +1000	commit: file changed
-68728b56ed31d03ca94496b9e2a45c62ba0f4e8f 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	checkout: moving from base_branch to other_branch
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673078 +1000	rebase -i (start): checkout HEAD
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 65c0438e428cd1aa94588eaa52eb7ebad7ec62fd CI <CI@example.com> 1617673078 +1000	rebase -i (pick): second commit subway eat fresh
-65c0438e428cd1aa94588eaa52eb7ebad7ec62fd 16f2bcca6ce7bcc17277103a5555072a6c3322a2 CI <CI@example.com> 1617673078 +1000	rebase -i (pick): third commit fresh
-16f2bcca6ce7bcc17277103a5555072a6c3322a2 696a8fd43c580b3bed203977faab4566b052a4e4 CI <CI@example.com> 1617673078 +1000	rebase -i (pick): fourth commit cool
-696a8fd43c580b3bed203977faab4566b052a4e4 696a8fd43c580b3bed203977faab4566b052a4e4 CI <CI@example.com> 1617673078 +1000	rebase -i (finish): returning to refs/heads/other_branch
-696a8fd43c580b3bed203977faab4566b052a4e4 696a8fd43c580b3bed203977faab4566b052a4e4 CI <CI@example.com> 1617673084 +1000	rebase -i (start): checkout HEAD
-696a8fd43c580b3bed203977faab4566b052a4e4 b8ab98a9ab0599193a3f41a9cc5cb988283e6722 CI <CI@example.com> 1617673088 +1000	rebase -i (continue): fourth commit on develop
-b8ab98a9ab0599193a3f41a9cc5cb988283e6722 b8ab98a9ab0599193a3f41a9cc5cb988283e6722 CI <CI@example.com> 1617673088 +1000	rebase -i (finish): returning to refs/heads/other_branch
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/base_branch b/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/base_branch
deleted file mode 100644
index fbcf4b8c5..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/base_branch
+++ /dev/null
@@ -1,3 +0,0 @@
-0000000000000000000000000000000000000000 339e2d062760be9ecdb4bb90f97bdb0e634e7831 CI <CI@example.com> 1617673072 +1000	branch: Created from HEAD
-339e2d062760be9ecdb4bb90f97bdb0e634e7831 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	commit: file
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 68728b56ed31d03ca94496b9e2a45c62ba0f4e8f CI <CI@example.com> 1617673072 +1000	commit: file changed
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/develop b/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/develop
deleted file mode 100644
index 3a497aff3..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/develop
+++ /dev/null
@@ -1,5 +0,0 @@
-0000000000000000000000000000000000000000 9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 CI <CI@example.com> 1617673072 +1000	branch: Created from HEAD
-9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 7923e4a952f4b169373b0389be6a9db3cd929547 CI <CI@example.com> 1617673072 +1000	commit: first commit on develop
-7923e4a952f4b169373b0389be6a9db3cd929547 7317cf7580efd92f974c8dfb3cde84eded8dafec CI <CI@example.com> 1617673072 +1000	commit: second commit on develop
-7317cf7580efd92f974c8dfb3cde84eded8dafec 234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d CI <CI@example.com> 1617673072 +1000	commit: third commit on develop
-234e2fa9a01b8d7e849b0c2a1bbd550e788ea18d 0556e5da1cda4e150d6cc1182be6efdb061f59fe CI <CI@example.com> 1617673072 +1000	commit: fourth commit on develop
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/feature/cherry-picking b/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/feature/cherry-picking
deleted file mode 100644
index 73326cc0a..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/feature/cherry-picking
+++ /dev/null
@@ -1,9 +0,0 @@
-0000000000000000000000000000000000000000 2cf63d6da8c52131dd79622f8572b44a1267e420 CI <CI@example.com> 1617673072 +1000	branch: Created from HEAD
-2cf63d6da8c52131dd79622f8572b44a1267e420 e4aa98b835d0a871d9ea02e6d286f0fbb2204cdc CI <CI@example.com> 1617673072 +1000	commit: first commit freshman year
-e4aa98b835d0a871d9ea02e6d286f0fbb2204cdc ef029771f117b5f31c972dfa546037662e243ca7 CI <CI@example.com> 1617673072 +1000	commit: second commit subway eat fresh
-ef029771f117b5f31c972dfa546037662e243ca7 2493c87610e0a9b8edfca592cb01a027f60ce587 CI <CI@example.com> 1617673072 +1000	commit: third commit fresh
-2493c87610e0a9b8edfca592cb01a027f60ce587 d8e5ca46d2bbd7c115e5849e637efe2361203368 CI <CI@example.com> 1617673072 +1000	commit: fourth commit cool
-d8e5ca46d2bbd7c115e5849e637efe2361203368 78a5ec82970200538b70f5ac61c18acb45ccb8ee CI <CI@example.com> 1617673072 +1000	commit: fifth commit nice
-78a5ec82970200538b70f5ac61c18acb45ccb8ee 19079c78db18112c5a2720896a040014a2d05f6d CI <CI@example.com> 1617673072 +1000	commit: sixth commit haha
-19079c78db18112c5a2720896a040014a2d05f6d 4520f99d650662a3f597a200fea5f2599f528180 CI <CI@example.com> 1617673072 +1000	commit: seventh commit yeah
-4520f99d650662a3f597a200fea5f2599f528180 9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 CI <CI@example.com> 1617673072 +1000	commit: eighth commit woo
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/master b/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/master
deleted file mode 100644
index 5222ab232..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/master
+++ /dev/null
@@ -1,5 +0,0 @@
-0000000000000000000000000000000000000000 2cf63d6da8c52131dd79622f8572b44a1267e420 CI <CI@example.com> 1617673072 +1000	commit (initial): first commit
-2cf63d6da8c52131dd79622f8572b44a1267e420 bfcc5725cd2ef871ff804996f4e02beef3e4dec2 CI <CI@example.com> 1617673072 +1000	commit: first commit on master
-bfcc5725cd2ef871ff804996f4e02beef3e4dec2 f4ffac820a371104fe611d81bc13a45b70a3ebb3 CI <CI@example.com> 1617673072 +1000	commit: second commit on master
-f4ffac820a371104fe611d81bc13a45b70a3ebb3 facb56c48e4718f71c08116153c93d87bc699671 CI <CI@example.com> 1617673072 +1000	commit: third commit on master
-facb56c48e4718f71c08116153c93d87bc699671 339e2d062760be9ecdb4bb90f97bdb0e634e7831 CI <CI@example.com> 1617673072 +1000	commit: fourth commit on master
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/other_branch b/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/other_branch
deleted file mode 100644
index eaa61b313..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/logs/refs/heads/other_branch
+++ /dev/null
@@ -1,3 +0,0 @@
-0000000000000000000000000000000000000000 5d2484f3cb6ce658e296526c48e1a376b2790dfc CI <CI@example.com> 1617673072 +1000	branch: Created from HEAD
-5d2484f3cb6ce658e296526c48e1a376b2790dfc 696a8fd43c580b3bed203977faab4566b052a4e4 CI <CI@example.com> 1617673078 +1000	rebase -i (finish): refs/heads/other_branch onto 5d2484f3cb6ce658e296526c48e1a376b2790dfc
-696a8fd43c580b3bed203977faab4566b052a4e4 b8ab98a9ab0599193a3f41a9cc5cb988283e6722 CI <CI@example.com> 1617673088 +1000	rebase -i (finish): refs/heads/other_branch onto 696a8fd43c580b3bed203977faab4566b052a4e4
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/05/56e5da1cda4e150d6cc1182be6efdb061f59fe b/test/integration/cherryPicking/expected/repo/.git_keep/objects/05/56e5da1cda4e150d6cc1182be6efdb061f59fe
deleted file mode 100644
index 5b38a6350a26839446fc86d6214dd213ea9a85a5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 158
zcmV;P0Ac@l0gaA93d0}}0DJZodoL7MO;jkQkW-$q>V_0z3}Q;3U!fo9b(n#PCFfTI
zg?MR|8JNhp7?5=`mNB^C(qe2#Q5nbHqmnj8oy0+v_a17)Y9UXuyUDUMKFFvDLrB9Q
z**eFBE(to@S}II4+^6};AIitZw^;H6a6~&=Ev<qpN-0IBeX8-Fx>(9t+X}x7$_|O&
Myp=<I0k0iF<&G*yT>t<8

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d b/test/integration/cherryPicking/expected/repo/.git_keep/objects/09/cbe8c6717c06a61876b7b641a46a62bf3c585d
deleted file mode 100644
index 8d42c4c9e2f8c317030a30193aef9945f0c8afa2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 112
zcmV-$0FVE80V^p=O;s>7Fk&z<00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
SE0y<EoMd$9&jSDutt>;F6gC_H

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/16/f2bcca6ce7bcc17277103a5555072a6c3322a2 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/16/f2bcca6ce7bcc17277103a5555072a6c3322a2
deleted file mode 100644
index ad4358bf6..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/16/f2bcca6ce7bcc17277103a5555072a6c3322a2
+++ /dev/null
@@ -1,4 +0,0 @@
-x���
-�0�a�y���L��]�1&Ʉ
-Ɩ��7�{������ZoP�Cò
-}�Ig.�g�Hڇ`,9�ɛ�X��?:X��=O�eE&�=��8Rv�젂^}������o���Oi�PV9�tG%�c�:���/}��_��s��?�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/17/3a40ed58e33060166ccbfb7d0ccc0387be5f09 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/17/3a40ed58e33060166ccbfb7d0ccc0387be5f09
deleted file mode 100644
index 25389c9d662fa3c7c7b5b9b2c4a41240d70f394f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 34
qcmb<m^geacKghr+{e-u!dC$qy`lo!(pYc9p=w#5lli^l7PapsTKMwZ*

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/17/4a8c9444cfa700682d74059d9fa9be5749242c b/test/integration/cherryPicking/expected/repo/.git_keep/objects/17/4a8c9444cfa700682d74059d9fa9be5749242c
deleted file mode 100644
index fd879a5f36e2b2568af78c7df87f1bc95fc0b6d8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 177
zcmV;i08amS0V^p=O;s?oG-WU}FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkxQPJ}D5PW-r6!l;7gaJOOuWvysr0#!pe$qVY%BjQe#sxdK}}1`%t<w5
f=r}y*j^@d!KOQc#IqUI!_qCfjJ9Yp79nMzA8M#!i

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827
deleted file mode 100644
index f74bf2335bbc5999ad0faff94fb04165d8ab5c7d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@DUS(>~ZE#08nZNMgRZ+

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/18/f469bc737f6c2a589205e2ddefceb32a7cc3a7 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/18/f469bc737f6c2a589205e2ddefceb32a7cc3a7
deleted file mode 100644
index 9b8af5fe783f2a13adddbc268c1af837ab15412a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>Gli0j#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09}X_Dl{Y^6951J

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/19/079c78db18112c5a2720896a040014a2d05f6d b/test/integration/cherryPicking/expected/repo/.git_keep/objects/19/079c78db18112c5a2720896a040014a2d05f6d
deleted file mode 100644
index 6bca3706389c51d187a52e5df9074d4aadef8c3a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 153
zcmV;K0A~Mq0gaA93c^4P06p(3au+1o?rtK82%h?kY)q+OZK*5xd<%ZS>o5aj^EBNX
zL`=K3x`WZ}MyVt&nzZ9#7&upvLQ$C{3b{&GvxG%ge>Pyz>?ZNZ7!h+Pm2t>wg^Wb4
zrfgQlJ?OiQ^9t7<PS^h8ADxzmA8ek^K!vz)ha6!~h!{4yO*Q{h53l>Djqs~r)KSA1
H03<!&<~T>i

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca b/test/integration/cherryPicking/expected/repo/.git_keep/objects/1b/9ae5f5dff631baaa180a30afd9983f83dc27ca
deleted file mode 100644
index 2b02dc3d14b4aef3343737214a03a09457e21e38..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmb<m^geacKghr=^~8B^zfcX`6X%0HLNrdE@eS2D>7nZts^PE0#`Wacbg|_{j0{$>
Gd}ROuKoaKw

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/20/85c8dd0a80e95ed959e4db2ab98f66b970ad77 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/20/85c8dd0a80e95ed959e4db2ab98f66b970ad77
deleted file mode 100644
index 1cafb95f9172da116f05816fbf223f92099aebbf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 144
zcmV;B0B`?z0V^p=O;s>5Fkmn-00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^REF3kHx*dILv-8YpWOTEb+SjySa$=GydlG#%N_yM3vczORPMZ)
ya%(Zurr&etASp0rc)Ttqw}t(MLG|q8mCE}nPBJ?5=OHODA*8?*s{#O;Tv8UZnMM@=

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/21/28c3c3def18d6e2a389957252fdb69ba85fce0 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/21/28c3c3def18d6e2a389957252fdb69ba85fce0
deleted file mode 100644
index 117d85d235f0e5b1a3cbf8de625568836c7c8b39..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 208
zcmV;>05AV|0V^p=O;s?mFkvt>FfcPQQAo~6Eh?%k$V|@8%u6?Bcs=38^^N8WZ%k=8
zxk>+m;mlj*Cy!%OX~M8YNKQ9vVVF{Ns-v^){T-2>EL#;!41ho(C9^0sxg@`+lHv3B
zr1dVE>pFk&uCwKe4&YfRW^e>*T3TjKDnsm&n+h!9A-e7HPwsv7I@u#;th)h8-jLzW
zWsiXBg}3@sDtF#YxwV*S)9<-+kQ5j*JYE-*+rs|BpnCT4O67eOCm9|3^N<vn5K>@@
KRRI91qI3pn2V^n;

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af b/test/integration/cherryPicking/expected/repo/.git_keep/objects/21/78af7503938665881174069be4d48fa483e4af
deleted file mode 100644
index 27c11bb26067e0a43b68d14777da3f61ddfcceac..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 117
zcmV-*0E+*30V^p=O;s>7Hf1m|00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
XE0y<EoMd$9&qGpRf>i+kh=VyFxv@AV

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/22/b0fd807dd5e428c2d818aef6a2311d7c11e885 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/22/b0fd807dd5e428c2d818aef6a2311d7c11e885
deleted file mode 100644
index 99177464395aa927a36557643ce3e4e536679578..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>ONEk*#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?0A1)5EjYg+jsO4v

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/23/4e2fa9a01b8d7e849b0c2a1bbd550e788ea18d b/test/integration/cherryPicking/expected/repo/.git_keep/objects/23/4e2fa9a01b8d7e849b0c2a1bbd550e788ea18d
deleted file mode 100644
index d3b98775c..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/23/4e2fa9a01b8d7e849b0c2a1bbd550e788ea18d
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0E��)f_(3&:J)��13AA�HZz�z�n��_�۶h/�T�z�@(�)��y"����`'�,z��>�#��`K�=j�T��^�d�h�TTz	I�	�2������O؎Uo1o����/����TZ���97e^N��yѷ��0_-Ax
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/24/6f7487e08e6330ccbec4053e701145d53f64d4 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/24/6f7487e08e6330ccbec4053e701145d53f64d4
deleted file mode 100644
index 864410e1ec99041ddc8d8eac524028f2dea2a2bc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 327
zcmV-N0l5Bn0V^p=O;s>4F=sF|FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMDu~m6i-j8~!%bUVWl*=!V3)Z;K3N
zYXo1kniv3qLP};)YH~?_Q6<CN7i!$aT_($2jqitidcvZfwKB;GYFb)mPO2e;f5RJ|
ZYR-4BBY1fvr<9Z*&_2<l3IGQPwRo7roJs%y

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/24/93c87610e0a9b8edfca592cb01a027f60ce587 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/24/93c87610e0a9b8edfca592cb01a027f60ce587
deleted file mode 100644
index 2279fe5fe..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/24/93c87610e0a9b8edfca592cb01a027f60ce587
+++ /dev/null
@@ -1,3 +0,0 @@
-x��K
-�0@]��d2����#�L�`m�<�/���<Y��ށ0zS�rN,���)S��A����F���s�fKM��"
̶Z�9Tge`*5�q�s�N�����`��2N7��e{�I��
-6Z��	��N������V�WAm�����>�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/2c/f63d6da8c52131dd79622f8572b44a1267e420 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/2c/f63d6da8c52131dd79622f8572b44a1267e420
deleted file mode 100644
index 6738ae2c27138fe3e505e1a242148c4a337b0b7e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 121
zcmV-<0EYi~0ga783c@fD06pgwdlw|zrke&tgr540ZMusELrPr1=UeatUWXYb*HShE
z9PngK1SAmA!d(g@(K=)#O{}tH&N^z~RYhXxljFBNYJ+Kp>onix!)1TUCD(ETB#ab$
bA3Hds_ud`!n3(*jJKfsL;8(dXb$c(hItDk+

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/2e/cced19ece4424e0d3f26eb3ea2ccb6bfeafaa8 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/2e/cced19ece4424e0d3f26eb3ea2ccb6bfeafaa8
deleted file mode 100644
index ed74cea0ac22b5cf303dbcf79e5b7208e6720d90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 150
zcmV;H0BQet0V^p=O;s>7HD)k0FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^Z_#00<OPGK*4^OY(~<84@O5
z=iF5KTu4xsF?Y6={}#XGkKdrCrDf)%8ZvYoo^wa@<kTMzm)V^4c)t7E&72)O0AC?O
E`ATU<?EnA(

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/33/9e2d062760be9ecdb4bb90f97bdb0e634e7831 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/33/9e2d062760be9ecdb4bb90f97bdb0e634e7831
deleted file mode 100644
index 9a510fb59..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/33/9e2d062760be9ecdb4bb90f97bdb0e634e7831
+++ /dev/null
@@ -1,2 +0,0 @@
-x��M
-� ��=���ɏ�PJ!�CǑj
�@�_����}������Ԫ�ӄE�36�����1y�C�G��*��s�
OV&B�Y[�~ٍ�R`�!T�h[���p]ֻ||ޟr�o�s24j��Zk��~�ɟ�J�m�����]�/�@�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd b/test/integration/cherryPicking/expected/repo/.git_keep/objects/34/c74161eef968fc951cf170a011fa8abfeddbcd
deleted file mode 100644
index e8d63bced5a790cf612ba77d98cf03e888d91233..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 120
zcmV-;0Ehp00V^p=O;s>7vtTeW00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R6~Y4mpuZi7vAbmsoZ%p<<?@RO~2>PK~iAM@OWKJZVUShgX-DG
aE0y<EoMd$9&qGpRLP&urRs{g5uSNWs5ju+i

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/36/e0ef3e52c6e29e64980c71defbab6064d2da8c b/test/integration/cherryPicking/expected/repo/.git_keep/objects/36/e0ef3e52c6e29e64980c71defbab6064d2da8c
deleted file mode 100644
index 394c5a2944bf36c1c25fa0709e723b9a7cac0348..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 252
zcmV<Y00aMc0V^p=O;s>9GGs6`FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHZejog3MrXIsmUezMU@N*6R&e_
zDt#^_D9e~T+sc27U-HLqP}9;fb5ac%Iu6gdqj_@bkB7@_&U!rGeeGt>jvWBSN{0B<
C>3I79

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/3e/0d4389ab458a8643281e494e3ebae7ce307eec b/test/integration/cherryPicking/expected/repo/.git_keep/objects/3e/0d4389ab458a8643281e494e3ebae7ce307eec
deleted file mode 100644
index 3863853b0..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/3e/0d4389ab458a8643281e494e3ebae7ce307eec
+++ /dev/null
@@ -1 +0,0 @@
-x}��	�0=��� ��QA�6�>1`|���o w����j����yF��JH7_0���A�𚐇�} ��U�)�}����FJ�{�oX�9�o6z��[|G�,�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/45/20f99d650662a3f597a200fea5f2599f528180 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/45/20f99d650662a3f597a200fea5f2599f528180
deleted file mode 100644
index 009c19542..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/45/20f99d650662a3f597a200fea5f2599f528180
+++ /dev/null
@@ -1,3 +0,0 @@
-x��K
-�0@]��df��@D��cL�)�-5��ނp�x^�k�6`t���BA��gv�lk�i��)H�$��ؙEV�7��>fJ�@��
-{��`�H�pA;�b�٦y����rַ�妇<��#�|��aO�h6�M5�S7}m/�:��L�QR>8
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
deleted file mode 100644
index e0670d284..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/4f/80ec0c7b09eeeb580d0c19947477c02bc88c25
+++ /dev/null
@@ -1 +0,0 @@
-x��	�0C�v�L��\�j�V�W��=�������M<�i�f.���PU�M�HT�3T�`Q���9�"�^��h�d[�����i+B��;�~�/ Y:/��<P�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/5d/2484f3cb6ce658e296526c48e1a376b2790dfc b/test/integration/cherryPicking/expected/repo/.git_keep/objects/5d/2484f3cb6ce658e296526c48e1a376b2790dfc
deleted file mode 100644
index 6cf71737a4b6471f90fb06bde3c8d777e6440960..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 147
zcmV;E0Brww0gcW<3d0}}K+&!}h5JGoHE|p$rI1yQ;W!f-h)oa+J$`e9Za;7F%U<i+
zts{5oP1SlxV@V>A6DW-;G?EU&J~O2yMka(Th~~&m-`$2l>II_52&|+<cwi=22w503
zhCwj}XY!}N_GYKq-lzGg-&~JPZ)L9!>!QPm0npp40|0Z@bE@l~+$`&+<_Bp0IiO2%
BL~H;6

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

literal 33
pcmb<m^geacKghr=>4g3%pYvzD&lvWcY&Pr_@JZHVP-@|e008rm4L|?@

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/5f/3e4598b46a912f0f95a4898743e979343c82f3
deleted file mode 100644
index 27ac61738744e4923b0d928f7521dd5707074712..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86
zcmV-c0IC0Y0V^p=O;s?nWH2!R0)>>!qSWM){Gv*R&)<{QyJ)WK{KdP@mMc1dXQ7zE
s5kmt5GZPbqw9K4TLxww-Jp!s1-s(@O+<7zQ)?%hjzvs>Y05^djO6CqI%>V!Z

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/60/91d709b275e712111d016d9b3a4fb44e63f1f6
deleted file mode 100644
index bfb5376c67ba79deb64b9463958ebd99b0ed9f64..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWmvlB@n6-{8($(qqj>V2E(CbBbYDf1
MH^Qm_0Pdw7o*~;6`~Uy|

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/61/01e935461d4cd862ae4a720846e87880d198b9 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/61/01e935461d4cd862ae4a720846e87880d198b9
deleted file mode 100644
index 236b6cdf4f4a62168a2e0b0b9b49cdcdbc22c808..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>Lxqxz#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09@!4B{z#9eE<Le

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/65/c0438e428cd1aa94588eaa52eb7ebad7ec62fd b/test/integration/cherryPicking/expected/repo/.git_keep/objects/65/c0438e428cd1aa94588eaa52eb7ebad7ec62fd
deleted file mode 100644
index 653c6633b26f643662ce364c73956e9800b2593d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 168
zcmV;Z09XHb0fmmiYQr!P1#{L{?7dJ{vb2&Qgn&=}3~BXD3UM54g`|JqKzr|Xn1RuC
zS-v_s8xMU0NCB;o?1e3Ra7K07q9zG#4vsZQ%tey9mkqa0p*f%YJZKe#ganr*I8mQq
z%Mhiyn7Per%A;S_jmC+N<8;QWEcYuubzM$m#YTw(M@Ju)na!KNr#k-8)1Pj3=z44P
Wo6-KL&+<(uo#qYu#ry!I3qu*!W>PKy

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/68/728b56ed31d03ca94496b9e2a45c62ba0f4e8f b/test/integration/cherryPicking/expected/repo/.git_keep/objects/68/728b56ed31d03ca94496b9e2a45c62ba0f4e8f
deleted file mode 100644
index dc3380093..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/68/728b56ed31d03ca94496b9e2a45c62ba0f4e8f
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-� @Ѯ=��Bщ�(�R�*��ql5	�B�����[|�Z[��1^�!��u�T)rD�m*�kL��yap@LE@�鐵k_�W�Ȃ>D���4f�hJe�>}�=N�>NO������[{h���C�����zNu�����E�֗�Y{<�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/69/6a8fd43c580b3bed203977faab4566b052a4e4 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/69/6a8fd43c580b3bed203977faab4566b052a4e4
deleted file mode 100644
index cd43a8fa07691fe88f3be92c53dee5f1524a724f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 156
zcmV;N0Av4n0fmmu3c@fDggxgeau;N?Y5qV&=&6sf-KJD9ri2uHd>8cYTn2`3hT&Su
zqiY0r>MdvOXAcS4#{m{_F4`d`W{YId!!pC-YywJA?bPzCYvWg(naOhw;wE4S1}r%d
z1eDxbL_$SJ-)ht2q_5+2&u=RGGheutn{1figB4t#4FD)f<y6mq@c6^kT94K@{jG`B
Kr}_Y<!97%@i%i4-

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/6b/6092c6840d05583489cc32a1260db0d5390a98 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/6b/6092c6840d05583489cc32a1260db0d5390a98
deleted file mode 100644
index ab233877fea48a0172d814ab3881e01064ab2b9a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 233
zcmV<F02cpv0V^p=O;s>9GGj0_FfcPQQAo~6Eh?%k$V|@8%u6?Bcs=38^^N8WZ%k=8
zxk>+m;mlj*Cy!%OX~M8YNKQ9vVVF{Ns-v^){T-2>EL#<@sWfF+zdSwUq_NuEnk!)j
z%O$)NTITMXV`2aV3MrXIsmUezMU@PnzbCDC(OlR0i+7zZS9Ac+LNS9QP}9;fb5a>%
zm)ulf2@lb2kAHIStJldMF=O2gNb-gZcP@JbR4=^MpHjK=X3DL_Oq+hsor9#nnBnod
jnA{fj7Y5a{k5?-1t2oK%(4U8-z=V(jQ>+RAhvkGrKT2<8

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/73/17cf7580efd92f974c8dfb3cde84eded8dafec b/test/integration/cherryPicking/expected/repo/.git_keep/objects/73/17cf7580efd92f974c8dfb3cde84eded8dafec
deleted file mode 100644
index 8d1ef58f3..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/73/17cf7580efd92f974c8dfb3cde84eded8dafec
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K
-�0@]��d�I���#�LQ0M�Q<�/�����j�w0Z�&3�.��`v�Ț�Y�r���D�^�i�����Ħ8��f�"y�H!fq)r�����z�^��6'8��U>��9�V/����zG��j��T�?u����_m��<ڪ�/:@�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/78/3666de4acbb22a9efc205197667f5136118c54 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/78/3666de4acbb22a9efc205197667f5136118c54
deleted file mode 100644
index c41ae5c621a9bf45b6c82cc55ae9068918c3caa0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 328
zcmV-O0k{5m0V^p=O;s>4F=sF|FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMDu~m6i-j8~!%bUVWl*=!V3)Z;K3N
zYXo1kniv3qLP};)YH~?_Q6)pd#Os`!N}me}$};B8w({TNm;CV?)U>qBoK!=Gj>B{A
aXr7$<<KZ%!vmVcPU%Q#JV+Q~)Ho7|0F``2N

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/78/a5ec82970200538b70f5ac61c18acb45ccb8ee b/test/integration/cherryPicking/expected/repo/.git_keep/objects/78/a5ec82970200538b70f5ac61c18acb45ccb8ee
deleted file mode 100644
index e7f686ab1..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/78/a5ec82970200538b70f5ac61c18acb45ccb8ee
+++ /dev/null
@@ -1,2 +0,0 @@
-x��I
-�@]�)�^��C~w@D�*���5	��Ђ�7��UPy[���awi@V�����C\8{]PSL��)1d��k���褘���Zw�;;�Qa�h��JP�ݦ��a��0>����-o˃�h/޲7t�̬NzN5���:�6ѯ�u�P_�?>c
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/79/23e4a952f4b169373b0389be6a9db3cd929547 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/79/23e4a952f4b169373b0389be6a9db3cd929547
deleted file mode 100644
index 61b9dcca7..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/79/23e4a952f4b169373b0389be6a9db3cd929547
+++ /dev/null
@@ -1,3 +0,0 @@
-x��K
-�0@]��d�L���#�N��6%F������{��ܠ�xjU:�ّw�^�1Ȝ�	{#��~�M�4��c��AH��\��^|t�G+ls���ɫ�j�Ra�:�w��u_��e����Yg�upֈ�zL5�SWy���
-���e)���f@f
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/88/9b0fdfe5f2ae3d7df3066f3bc1e181fa712c8d b/test/integration/cherryPicking/expected/repo/.git_keep/objects/88/9b0fdfe5f2ae3d7df3066f3bc1e181fa712c8d
deleted file mode 100644
index d63de558bc9f6f0096d5c3091fc31b9d8b2630eb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>BZZQT#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09^<aCNNMSe*gdg

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/88/c39cdc29c995f8e1a63ccd48e7bbd6d96cb8b8
deleted file mode 100644
index ea7fa53039077c16fa43ab0244a322d4d24fe9f5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 65
zcmb<m^geacKghr|>4S%^SLg|yFpm%oy_5Q@LNrc#=mehd019~do(<MGdES$eOZ4gV
Vv?a_hLt2k~xss&Ekdh(N4**9y8ax01

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

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>3x$%5#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?0A0uwEH54*EdT%j

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/95/9d7a10da71acf97b17300b40a3b4f30903e09c b/test/integration/cherryPicking/expected/repo/.git_keep/objects/95/9d7a10da71acf97b17300b40a3b4f30903e09c
deleted file mode 100644
index 1befd67ac5bd6c07ba69162c2e962eb5035fcf02..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 358
zcmV-s0h#`I0V^p=O;s>8G-fa~FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMDu~m6i-j8~!%bUVWl*=!V3)Z;K3N
zYXo1kniv3qLP};)YH~?_Q6<CN7i!$aT_($2jqitidcvZfwKB;GYFb)mPO2e;f5RJ|
zYR-4BBY1fvr<9Z*&_2<lilo4pL3-BHulK(h?ph_mWw8F{4EyFg>Zgztm|#@^04{ye
Es|G`_Y5)KL

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/9b/b8cd97914c8e8a7b8a6ec6f94bca0b09fa0048 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/9b/b8cd97914c8e8a7b8a6ec6f94bca0b09fa0048
deleted file mode 100644
index 0cbe05fdae85f04ddee527ca824ffac7c1323024..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 154
zcmV;L0A>Gp0gaA93c@fD06pgwdlzK0?QRkf5qjz~(sW}5V@iqW^DX!Rufq&Xs-@f;
z5cY?*se<#Jh|Jo@G)+V?XikJ|gA;L?Z70_H#JySLrq2dF6Xp<RVHBa*WezS9V%Er+
zIE2jPtw$4IZK)d!Bb<lvs-IZahn`X`7qDWTxDFk`(ITSR=|0u;Pu=MKwzLI)8N6#X
IUt>o+tw<wD9RL6T

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/9d/e8260b738a34a74533df54f2e404276aa96242
deleted file mode 100644
index ffc277c86c56c088175e46f1590082f30deb89cd..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWsu<cVbq|s@7&8(i^8k=TV83;w@^ot
MH^Qm_0H#zMoMT`Zd;kCd

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5
deleted file mode 100644
index 285df3e5fbab12262e28d85e78af8a31cd0024c1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@Cg%x>`~^A08nuUMF0Q*

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/af/a76754c933269d7cd45630a7184a20849dbe9c b/test/integration/cherryPicking/expected/repo/.git_keep/objects/af/a76754c933269d7cd45630a7184a20849dbe9c
deleted file mode 100644
index 7302ca34e9d34bcda37b5a408f6b509933d555f2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>Q-zX@#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09|MlDL7*x5&!@I

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/b4/121e2d6aa156227b6541431ddfb8594904b520 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/b4/121e2d6aa156227b6541431ddfb8594904b520
deleted file mode 100644
index 4aa46eb8cb9607b2fafdb34605c784ea03cecd58..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>6NQqD#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09{BFC@#Vvu>b%7

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

literal 162
zcmV;T0A2rh0ez0k3c@fD06pg`_AbaKo8|!`f~S7QCfQJ-HKj!H^DXGv>o5b8+p^p{
z7_AR|6M<A*C5s^@HZdm_jRuiYiJl}@@@#0xM%2oiJUY1OIMiY(4*?S;DF!KeUzw8~
zoJ%+uwqg}O`_wkLjc~q=S9$ZY&T`6axqx=sJ5T5h95o`Uo$gaz{_7$9bXD7P>l1u4
QXb&jzlDVzw0}BE`^Tg^&IsgCw

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/bd/6f34089ba29cbae102003bd973e9f37a235c2e b/test/integration/cherryPicking/expected/repo/.git_keep/objects/bd/6f34089ba29cbae102003bd973e9f37a235c2e
deleted file mode 100644
index e6bbae5e8b8359e0bc366ab8e4e5fb6fb386629d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 254
zcmV<a00IAa0V^p=O;s>9GGj0_FfcPQQAo~6Eh?%k$V|@8%u6?Bcs=38^^N8WZ%k=8
zxk>+m;mlj*Cy!%OX~M8YNKQ9vVVF{Ns-v^){T-2>EL#<@sWfF+zdSwUq_NuEnk!)j
z%O$)NTITMXV`2aV3MrXIsmUezMU@PnzbCDC(OlR0i+7zZS9Ac+LNS9QP}9;fb5a>%
zm)ulf2@lb2kAHIStJldMF=O2gNb-gZcP@JbR4=^MpHjK=X3DL_Oq+hsor9#nnBnod
znA{fj7Y5a{k5?-1t2oK%(4U8-z=V(jQwHf-Pru&(X1HsW1ed}3n=|a2@2H;w0FzgR
Eiv8ewr~m)}

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/bf/cc5725cd2ef871ff804996f4e02beef3e4dec2 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/bf/cc5725cd2ef871ff804996f4e02beef3e4dec2
deleted file mode 100644
index 0f08b620f..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/bf/cc5725cd2ef871ff804996f4e02beef3e4dec2
+++ /dev/null
@@ -1,2 +0,0 @@
-x��M
-�0�a�9��I&?����U���,S�߀p��>�Z��e8��6k66�Ÿf����OFs���N�{l�0e�W�F�,*�֕�C��.�D��ؠ����4�u����e�%�r�9Ғ�JJ)�:Nu�3ykG����������>�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/c1/dd146476a4a37fff75b88612a718281ea83b58 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/c1/dd146476a4a37fff75b88612a718281ea83b58
deleted file mode 100644
index 008bb1a6567766c154b88180e8aa85b15392362c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 277
zcmV+w0qXvE0V^p=O;s>9GiER}FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRnWu$2ozE>i&B$I@{1}N5++{f+*JBpNKlqBcea)P7Qf_=-=L<YW#*(BGISiC
bb4T;!)E^I**_`!wzWdtEoE<v=$GDftUG$0l

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/ce/ecbe69460104e09eb2cd7c865df520c5679a68 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/ce/ecbe69460104e09eb2cd7c865df520c5679a68
deleted file mode 100644
index a5c693b798c289f22fe60bb002ca48985eab7cc8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 183
zcmV;o07(CM0V^p=O;s>5F=8+@FfcPQQAo~6Eh?%k$V|@8%u6?Bcs=38^^N8WZ%k=8
zxk>+m;mlj*Cy$#L0D(eEW>IQ#Nq$i!!{_fw>s>V0b^hXAXUi2Gz_U=y;0V;Tw9K4T
zhS()H6<ESUblc;f-23WvvPaBVcLS2VA;X=^9s$)0Z}q2C?!1|DYcbQN-*e|6DKKVu
lye=lUh5dy=_3Y!7%KIu#GCK6<At^8+q`(xb0sz^)W#mlqSy%u7

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/d0/60f7226715ca55b04e91fad2b8aca01badd993 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/d0/60f7226715ca55b04e91fad2b8aca01badd993
deleted file mode 100644
index ab357ec23a607497ddef075b5880fd9579922e8d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 303
zcmV+~0nq+<0V^p=O;s>4Fl8__FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMIIe0T3vpWEQ0+m*f{!G9*mA&bg`d
zxsaeNWA1D#|1EyWAHP9OOUukjHDu^GJm-$)$*DgcF0(o7@qG8Sn>jmn003Pvs7;ya
BlW+h4

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/a7c50dcab42b2b62e5c77cdcece620d3964bd4 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/a7c50dcab42b2b62e5c77cdcece620d3964bd4
deleted file mode 100644
index 198bff1ec786820e0c2f41db6e2bed90f1e103fa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 201
zcmV;)05<=40V^p=O;s>5HfJz2FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRl&pn2ozE>i&B$I@{1}N5++{f
z+*JBpNKlqBcea)P7Qf_=-=L<YW#*(BGISiCb4T;!)E^I**_`!wzWdtEoE<v=OtNI)
D5L{sz

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/e5ca46d2bbd7c115e5849e637efe2361203368 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/e5ca46d2bbd7c115e5849e637efe2361203368
deleted file mode 100644
index b69d3a536..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/d8/e5ca46d2bbd7c115e5849e637efe2361203368
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-� D����k�B)��r�QH!�!��+�]
̼�ʶ���4\�!�3��������ԡK�q�1�70�v�nb��ΐB���!�ɀ,ώ��κ�C�����S>��Un�lm�a���WCD���T�?q5���i-ʪ��?
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/da/72a6dd6fbaaa4a2803a3c867437ab81a1a99a0 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/da/72a6dd6fbaaa4a2803a3c867437ab81a1a99a0
deleted file mode 100644
index af687b6201a28d6535fb8323c61b1d78ce5d3141..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 227
zcmV<90382#0V^p=O;s>5w`4FhFfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GxD20);Yl3A3RT#{c@$&fJdI_IX+=R$(AjJdO|{I~cefBXhDEiE%A)sUg%
d@SHoEC#U{+xXk9P$MfCSZszRR0RVyibtbb-a`^xN

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c b/test/integration/cherryPicking/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
deleted file mode 100644
index 74c919681..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/dc/d348507ba1da8f6479b9d964daa302b2fb9d9c
+++ /dev/null
@@ -1 +0,0 @@
-x��	�0C����?�3�ƵV�=iO��=������,�8tW��@h*��&R$j�*y��ʑs-ܜ��8v)��u㧱��V�H�����"��
��P�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b b/test/integration/cherryPicking/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b
deleted file mode 100644
index 9b771fc2f6f41f91b00976b4ff3f8f9935f7931e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21
ccmb<m^geacKgb|i!&6t!@EH?>>`CU&08otwO#lD@

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e b/test/integration/cherryPicking/expected/repo/.git_keep/objects/e3/ae5c6d8407e8307b9bc77923be78c901408f6e
deleted file mode 100644
index 3a7ee91eab601eb205b04a6e1e62c58599193222..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 50
zcmb<m^geacKghr=^~8B^zfcX`6X%0HLNrdE@eS2D>7nZts^PE0#+C9!Ty%L6BZHMO
GUmgJUj1jT`

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/48ae5bf6371d80ebee24a22b6df341797a6511 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/48ae5bf6371d80ebee24a22b6df341797a6511
deleted file mode 100644
index 714e20cb7eb8a76c9832939c1e2a103d78bb257d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>bA^(O#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09~jQD?P;_bN~PV

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/666ba294866d5c16f9afebcacf8f4adfee7439
deleted file mode 100644
index 83998943a5a68dad92fe592c8b50a4121bd04c88..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 86
zcmV-c0IC0Y0V^p=O;s?nWH2!R0)>>!qSWM){Gv*Rgo)QVH<dmY5|m}koo(g6#V`5e
sH$wvhGZPbqw9K4TLxzsSbM9!KociP8GMlp=&v#$DnX_XD052LKjex`_i2wiq

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/aa98b835d0a871d9ea02e6d286f0fbb2204cdc b/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/aa98b835d0a871d9ea02e6d286f0fbb2204cdc
deleted file mode 100644
index 5c0e48092..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/e4/aa98b835d0a871d9ea02e6d286f0fbb2204cdc
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-1=�s$��daO���I�J���w�x-��ҥ�k'v~�@Udw�"����=�U�8H�C%���_O\���˰O<� �cB`k��/K�q��8����a�K=��.��mb�:k�Y����ܔk{v�YT��*w�@��{/B�
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/ea/a48cb1e3d47e1b8b8df47bdc248e991207cc3d b/test/integration/cherryPicking/expected/repo/.git_keep/objects/ea/a48cb1e3d47e1b8b8df47bdc248e991207cc3d
deleted file mode 100644
index b047d6827a093b8790d0dd53e0382e18ed1ea88a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 361
zcmV-v0ha!F0V^p=O;s>8F=H?^FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMDu~m6i-j8~!%bUVWl*=!V3)Z;K3N
zYXo1kniv3qLP};)YH~?_Q6<CN7i!$aT_($2jqitidcvZfwKB;GYFb)mPO2e;f5RJ|
zYR-4BBY1fvr<9Z*&_2<lilo4pL3-BHulK(h?ph_mWw8F{4EyFg>Zgztm=IE6id6vs
H4=>-(3qr6K

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/eb/90e8d7b137a1d89480c9b22fd03199da77c9c7 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/eb/90e8d7b137a1d89480c9b22fd03199da77c9c7
deleted file mode 100644
index 4992422c7407bf6efc09d23127726c19cec1119d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 66
zcmV-I0KNZs0ZYosPf{>7VkpVTELH%bw9K4Tg}l<-q|_n>V}+88#1aKh^<0JY{LH*`
Yg_3-Q<c!p!qDtL@%;an?09_~)CpqyT-~a#s

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/ef/029771f117b5f31c972dfa546037662e243ca7 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/ef/029771f117b5f31c972dfa546037662e243ca7
deleted file mode 100644
index 58cda69666c9184f844889ee9acc004710a35b38..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 162
zcmV;T0A2rh0gaA93IZ_<06q5=xeJoUY}0~>;K^sCZHj{H%5Fvdy@DU`I?TY7X&f&d
z$jhqFX5fW2mc-1ZsUU_(RTzg<Q`3}f5KhEY++An8bud;<F~{vtQKR^pOpz>9ilJf4
znFzVm;`Gta(+tNG?2e~{y>z@^ZBwRk4?cJavPB_Sdqi|!`km_br|uRj)2+fUgXNK*
Q`UcYuZMNm?K4<bm{bG(&G5`Po

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/f1/46c7f7b874778c1ad0cf9aebe45ec2427c7de2 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/f1/46c7f7b874778c1ad0cf9aebe45ec2427c7de2
deleted file mode 100644
index 3688d63f9f90630dac6d6f55486eb6b86e8e342a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 144
zcmV;B0B`?z0V^p=O;s>5Fkmn-00M=S%%arflKi4dhR@%V*1Kq~>-@#L&Xy}WfM=nY
z!4X3P12Yp7g|y6^R0eS?hqn=r4HCq1PXDguIm6t(FP;-g-jLzWWsiXBg}3@sDtF#Y
yxwV*S)9<-+kQ5j*JYE-*+rs|BpnCT4O67eOCm9|3^N<vn5K>@@RRI7%&rx)LLPgyG

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/7d8713ef1390c277b45a084a08c0c142ff7ed9 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/7d8713ef1390c277b45a084a08c0c142ff7ed9
deleted file mode 100644
index 539d19c5f..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/7d8713ef1390c277b45a084a08c0c142ff7ed9
+++ /dev/null
@@ -1,2 +0,0 @@
-x}�K
-� ��Ʈ�@��QAA��q� �bZ�Op�7<�p֋WT�*��4���F��-���&Ox�;
��M���S�1�}�R���.�������9��N]��s-#
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/f3/f762af4429ae89fa0dae3d0a5b500ca11630c4
deleted file mode 100644
index e9f9f0881a1460f9b019818b1cbd6e4f67fe70aa..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 54
zcmV-60LlM&0V^p=O;s>6WiT`_Ff%bxNXyJgWw@Wst9_>I*&F^-3WwAMy!<tG9g#+o
MH^Qm_0E{vk5H*e!i2wiq

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/f4/ffac820a371104fe611d81bc13a45b70a3ebb3 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/f4/ffac820a371104fe611d81bc13a45b70a3ebb3
deleted file mode 100644
index e054b826c6bd4ee34d005c877cc5fcd628c76206..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 158
zcmV;P0Ac@l0gaA93c@fDMP26<vlnENCYcmOgsyswWI92?G^LH;@eOzZm;dn|e6FQD
z8yJnJwu=CcoFuR(O^iNz9mpq2-s))kG${}4f?L!UcUc>x%<RZGUX0{GI_H3P9DTNe
zCW+)h>>_Mbe78s4VVdDO&3F04vc2TOwcJ2^O`ZlM180qhs?&a|$)CD9gzLJ%FN3;5
MiAS&17ZK<|A8)ZtHvj+t

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/fa/cb56c48e4718f71c08116153c93d87bc699671 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/fa/cb56c48e4718f71c08116153c93d87bc699671
deleted file mode 100644
index 0b357276c..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/objects/fa/cb56c48e4718f71c08116153c93d87bc699671
+++ /dev/null
@@ -1,2 +0,0 @@
-x��A
-�0E]��d�I�D��z�I:�cJ���
x���?���N�VE` �9�������D�������k1���U�
�I����#B����B$�f�	A+~��T����]>���\b�7 K�:�n�3!��k?��O]�m�+�*(O������?X
\ No newline at end of file
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/objects/fd/31cea7e0b6e8d334280be34db8dd86cdda3007 b/test/integration/cherryPicking/expected/repo/.git_keep/objects/fd/31cea7e0b6e8d334280be34db8dd86cdda3007
deleted file mode 100644
index 168b5c5f9141fac77b1554e5faa51680b0f39ef8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 352
zcmV-m0iXVO0V^p=O;s?lFkmn=FfcPQQAo~6Eh?%k$V|@8%u6?9NMw9z>L%-RBWayi
z5r^B0iiV3bc4AX$#LzLD|NhfY>uhU3v*lYKeAxJ_P^TB0N@IrC6JA{3Xuj~ql!lX=
z^e-6Byj6bkI5w3g3|oZcbh8$QDOIOBI?LYQ5$VaYRRNnyQ-<}+(?d=gtIe&s5@xVm
z!b_oL?!GzLRGKkJe97EXT%V&AF^Toj-S_7<Yt<ZHj!mUG!xN8n(cjEv8(zOtS)`r&
z*|D-JRS=s>3x)|R{IBUZ7&FzcwhOCjy!uuvtMDu~m6i-j8~!%bUVWl*=!V3)Z;K3N
zYXo1kniv3qLP};)YH~?_Q6<CN7i!$aT_($2jqitidcvZfwKB;GYFb)mPO2e;f5RJ|
yYR-4BBY1fvr<9Z*&_2<lilo4pL3-BHulK(h?ph_mWw8F{4EyFg>ZbrQLc@`W;jN4S

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/base_branch b/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/base_branch
deleted file mode 100644
index 036ea7527..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/base_branch
+++ /dev/null
@@ -1 +0,0 @@
-68728b56ed31d03ca94496b9e2a45c62ba0f4e8f
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/develop b/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/develop
deleted file mode 100644
index 40c059dd4..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/develop
+++ /dev/null
@@ -1 +0,0 @@
-0556e5da1cda4e150d6cc1182be6efdb061f59fe
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/feature/cherry-picking b/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/feature/cherry-picking
deleted file mode 100644
index 0f0bd273a..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/feature/cherry-picking
+++ /dev/null
@@ -1 +0,0 @@
-9bb8cd97914c8e8a7b8a6ec6f94bca0b09fa0048
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/master b/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/master
deleted file mode 100644
index 6940df038..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/master
+++ /dev/null
@@ -1 +0,0 @@
-339e2d062760be9ecdb4bb90f97bdb0e634e7831
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/other_branch b/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/other_branch
deleted file mode 100644
index f9041d125..000000000
--- a/test/integration/cherryPicking/expected/repo/.git_keep/refs/heads/other_branch
+++ /dev/null
@@ -1 +0,0 @@
-b8ab98a9ab0599193a3f41a9cc5cb988283e6722
diff --git a/test/integration/cherryPicking/expected/repo/cherrypicking3 b/test/integration/cherryPicking/expected/repo/cherrypicking3
deleted file mode 100644
index eb90e8d7b..000000000
--- a/test/integration/cherryPicking/expected/repo/cherrypicking3
+++ /dev/null
@@ -1 +0,0 @@
-this is file number 3 that I'm going to cherry-pick
diff --git a/test/integration/cherryPicking/expected/repo/cherrypicking4 b/test/integration/cherryPicking/expected/repo/cherrypicking4
deleted file mode 100644
index b4121e2d6..000000000
--- a/test/integration/cherryPicking/expected/repo/cherrypicking4
+++ /dev/null
@@ -1 +0,0 @@
-this is file number 4 that I'm going to cherry-pick
diff --git a/test/integration/cherryPicking/expected/repo/cherrypicking5 b/test/integration/cherryPicking/expected/repo/cherrypicking5
deleted file mode 100644
index afa76754c..000000000
--- a/test/integration/cherryPicking/expected/repo/cherrypicking5
+++ /dev/null
@@ -1 +0,0 @@
-this is file number 5 that I'm going to cherry-pick
diff --git a/test/integration/cherryPicking/expected/repo/directory/file b/test/integration/cherryPicking/expected/repo/directory/file
deleted file mode 100644
index df6b0d2bc..000000000
--- a/test/integration/cherryPicking/expected/repo/directory/file
+++ /dev/null
@@ -1 +0,0 @@
-test3
diff --git a/test/integration/cherryPicking/expected/repo/directory/file2 b/test/integration/cherryPicking/expected/repo/directory/file2
deleted file mode 100644
index df6b0d2bc..000000000
--- a/test/integration/cherryPicking/expected/repo/directory/file2
+++ /dev/null
@@ -1 +0,0 @@
-test3
diff --git a/test/integration/cherryPicking/expected/repo/file b/test/integration/cherryPicking/expected/repo/file
deleted file mode 100644
index 5da4d9200..000000000
--- a/test/integration/cherryPicking/expected/repo/file
+++ /dev/null
@@ -1 +0,0 @@
-original1\noriginal2\noriginal3
diff --git a/test/integration/cherryPicking/expected/repo/file1 b/test/integration/cherryPicking/expected/repo/file1
deleted file mode 100644
index dcd348507..000000000
--- a/test/integration/cherryPicking/expected/repo/file1
+++ /dev/null
@@ -1,63 +0,0 @@
-Here is a story that has been told throuhg the ages
-once upon a time there was a cat
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-...
-once upon a time there was another cat
diff --git a/test/integration/cherryPicking/expected/repo/file3 b/test/integration/cherryPicking/expected/repo/file3
deleted file mode 100644
index e3ae5c6d8..000000000
--- a/test/integration/cherryPicking/expected/repo/file3
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a horse
diff --git a/test/integration/cherryPicking/expected/repo/file4 b/test/integration/cherryPicking/expected/repo/file4
deleted file mode 100644
index e3ae5c6d8..000000000
--- a/test/integration/cherryPicking/expected/repo/file4
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a horse
diff --git a/test/integration/cherryPicking/expected/repo/file5 b/test/integration/cherryPicking/expected/repo/file5
deleted file mode 100644
index 1b9ae5f5d..000000000
--- a/test/integration/cherryPicking/expected/repo/file5
+++ /dev/null
@@ -1 +0,0 @@
-once upon a time there was a mouse
diff --git a/test/integration/cherryPicking/recording.json b/test/integration/cherryPicking/recording.json
deleted file mode 100644
index e1323235b..000000000
--- a/test/integration/cherryPicking/recording.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyEvents":[{"Timestamp":417,"Mod":0,"Key":259,"Ch":0},{"Timestamp":761,"Mod":0,"Key":258,"Ch":0},{"Timestamp":905,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1041,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1248,"Mod":0,"Key":13,"Ch":13},{"Timestamp":1537,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1656,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1809,"Mod":0,"Key":258,"Ch":0},{"Timestamp":1929,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2065,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2193,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2344,"Mod":0,"Key":258,"Ch":0},{"Timestamp":2481,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3112,"Mod":0,"Key":256,"Ch":99},{"Timestamp":3624,"Mod":0,"Key":258,"Ch":0},{"Timestamp":3777,"Mod":0,"Key":258,"Ch":0},{"Timestamp":4009,"Mod":0,"Key":256,"Ch":67},{"Timestamp":4697,"Mod":0,"Key":259,"Ch":0},{"Timestamp":4936,"Mod":0,"Key":256,"Ch":118},{"Timestamp":5296,"Mod":0,"Key":13,"Ch":13},{"Timestamp":5881,"Mod":0,"Key":260,"Ch":0},{"Timestamp":6024,"Mod":0,"Key":260,"Ch":0},{"Timestamp":6456,"Mod":0,"Key":259,"Ch":0},{"Timestamp":6816,"Mod":0,"Key":256,"Ch":99},{"Timestamp":7041,"Mod":0,"Key":257,"Ch":0},{"Timestamp":7152,"Mod":0,"Key":256,"Ch":99},{"Timestamp":7329,"Mod":0,"Key":257,"Ch":0},{"Timestamp":7424,"Mod":0,"Key":256,"Ch":99},{"Timestamp":8040,"Mod":0,"Key":257,"Ch":0},{"Timestamp":8184,"Mod":0,"Key":257,"Ch":0},{"Timestamp":8329,"Mod":0,"Key":257,"Ch":0},{"Timestamp":8497,"Mod":0,"Key":257,"Ch":0},{"Timestamp":8673,"Mod":0,"Key":257,"Ch":0},{"Timestamp":8856,"Mod":0,"Key":257,"Ch":0},{"Timestamp":9041,"Mod":0,"Key":257,"Ch":0},{"Timestamp":9233,"Mod":0,"Key":257,"Ch":0},{"Timestamp":9640,"Mod":0,"Key":256,"Ch":99},{"Timestamp":10056,"Mod":0,"Key":258,"Ch":0},{"Timestamp":10208,"Mod":0,"Key":258,"Ch":0},{"Timestamp":10736,"Mod":0,"Key":257,"Ch":0},{"Timestamp":10872,"Mod":0,"Key":256,"Ch":99},{"Timestamp":11361,"Mod":0,"Key":259,"Ch":0},{"Timestamp":11640,"Mod":0,"Key":256,"Ch":118},{"Timestamp":12048,"Mod":0,"Key":13,"Ch":13},{"Timestamp":12849,"Mod":0,"Key":13,"Ch":13},{"Timestamp":13152,"Mod":0,"Key":13,"Ch":13},{"Timestamp":13408,"Mod":0,"Key":256,"Ch":32},{"Timestamp":14009,"Mod":0,"Key":13,"Ch":13},{"Timestamp":14513,"Mod":0,"Key":13,"Ch":13},{"Timestamp":14833,"Mod":0,"Key":13,"Ch":13},{"Timestamp":15056,"Mod":0,"Key":258,"Ch":0},{"Timestamp":15296,"Mod":0,"Key":256,"Ch":32},{"Timestamp":16217,"Mod":0,"Key":13,"Ch":13},{"Timestamp":17593,"Mod":0,"Key":256,"Ch":113}],"ResizeEvents":[{"Timestamp":0,"Width":272,"Height":74}]}
\ No newline at end of file
diff --git a/test/integration/cherryPicking/setup.sh b/test/integration/cherryPicking/setup.sh
deleted file mode 100644
index 1a913412f..000000000
--- a/test/integration/cherryPicking/setup.sh
+++ /dev/null
@@ -1,157 +0,0 @@
-#!/bin/sh
-
-set -e
-
-cd $1
-
-git init
-git config user.email "CI@example.com"
-git config user.name "CI"
-
-
-function add_spacing {
-  for i in {1..60}
-  do
-    echo "..." >> $1
-  done
-}
-
-mkdir directory
-echo "test1" > directory/file
-echo "test1" > directory/file2
-
-
-echo "Here is a story that has been told throuhg the ages" >> file1
-
-git add file1
-git add directory
-git commit -m "first commit"
-
-git checkout -b feature/cherry-picking
-
-echo "this is file number 1 that I'm going to cherry-pick" > cherrypicking1
-echo "this is file number 2 that I'm going to cherry-pick" > cherrypicking2
-
-git add .
-
-git commit -am "first commit freshman year"
-
-echo "this is file number 3 that I'm going to cherry-pick" > cherrypicking3
-
-git add .
-
-git commit -am "second commit subway eat fresh"
-
-echo "this is file number 4 that I'm going to cherry-pick" > cherrypicking4
-
-git add .
-
-git commit -am "third commit fresh"
-
-echo "this is file number 5 that I'm going to cherry-pick" > cherrypicking5
-
-git add .
-
-git commit -am "fourth commit cool"
-
-echo "this is file number 6 that I'm going to cherry-pick" > cherrypicking6
-
-git add .
-
-git commit -am "fifth commit nice"
-
-echo "this is file number 7 that I'm going to cherry-pick" > cherrypicking7
-
-git add .
-
-git commit -am "sixth commit haha"
-
-echo "this is file number 8 that I'm going to cherry-pick" > cherrypicking8
-
-git add .
-
-git commit -am "seventh commit yeah"
-
-echo "this is file number 9 that I'm going to cherry-pick" > cherrypicking9
-
-git add .
-
-git commit -am "eighth commit woo"
-
-
-git checkout -b develop
-echo "once upon a time there was a dog" >> file1
-add_spacing file1
-echo "once upon a time there was another dog" >> file1
-git add file1
-echo "test2" > directory/file
-echo "test2" > directory/file2
-git add directory
-git commit -m "first commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a cat" >> file1
-add_spacing file1
-echo "once upon a time there was another cat" >> file1
-git add file1
-echo "test3" > directory/file
-echo "test3" > directory/file2
-git add directory
-git commit -m "first commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file3
-git add file3
-git commit -m "second commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file3
-git add file3
-git commit -m "second commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file4
-git add file4
-git commit -m "third commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file4
-git add file4
-git commit -m "third commit on master"
-
-
-git checkout develop
-echo "once upon a time there was a mouse" >> file5
-git add file5
-git commit -m "fourth commit on develop"
-
-
-git checkout master
-echo "once upon a time there was a horse" >> file5
-git add file5
-git commit -m "fourth commit on master"
-
-
-# this is for the autostash feature
-
-git checkout -b base_branch
-
-echo "original1\noriginal2\noriginal3" > file
-git add file
-git commit -m "file"
-
-git checkout -b other_branch
-
-git checkout base_branch
-
-echo "new1\noriginal2\noriginal3" > file
-git add file
-git commit -m "file changed"
-
-git checkout other_branch
-
diff --git a/test/integration/cherryPicking/test.json b/test/integration/cherryPicking/test.json
deleted file mode 100644
index e1cda77be..000000000
--- a/test/integration/cherryPicking/test.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "description": "Cherry picking commits over from another branch via the sub commits context. Also resolving some merge conflicts along the way.", "speed": 5 }
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..851066514
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+four
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/FETCH_HEAD
similarity index 100%
rename from test/integration/cherryPicking/expected/repo/.git_keep/FETCH_HEAD
rename to test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/FETCH_HEAD
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/HEAD b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..2bf8fd13a
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/first-branch
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..bbfaa4f49
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+c37c09bdd6f969542d7e94829662c5ac19f5fb7e
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/config b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/config
similarity index 87%
rename from test/integration/cherryPicking/expected/repo/.git_keep/config
rename to test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/config
index 8ae104545..8a748ce32 100644
--- a/test/integration/cherryPicking/expected/repo/.git_keep/config
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/config
@@ -8,3 +8,5 @@
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/description b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/description
similarity index 100%
rename from test/integration/cherryPicking/expected/repo/.git_keep/description
rename to test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/description
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/index b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..65d675154f23ffb2d0196e017d44a5e7017550f5
GIT binary patch
literal 65
zcmZ?q402{*U|<4bhL9jvS0E+HV4z^Y<=qr}%;|LA&IJiiy?<Pr)babBCri;)`-<AO
Tl}3xATFuWrGP@z+w&EiIWCj?s

literal 0
HcmV?d00001

diff --git a/test/integration/cherryPicking/expected/repo/.git_keep/info/exclude b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/info/exclude
similarity index 100%
rename from test/integration/cherryPicking/expected/repo/.git_keep/info/exclude
rename to test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/info/exclude
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/HEAD b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..c558e2761
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,14 @@
+0000000000000000000000000000000000000000 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	commit (initial): base
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	checkout: moving from master to first-branch
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	checkout: moving from first-branch to second-branch
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	checkout: moving from second-branch to first-branch
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 197a799a14b2ca7478cfe339e7c83f7cdea4918b CI <CI@example.com> 1663390248 -0700	commit: one
+197a799a14b2ca7478cfe339e7c83f7cdea4918b c37c09bdd6f969542d7e94829662c5ac19f5fb7e CI <CI@example.com> 1663390248 -0700	commit: two
+c37c09bdd6f969542d7e94829662c5ac19f5fb7e 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	checkout: moving from first-branch to second-branch
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 198998809e08270eebeb746d6aed45df9faee6a2 CI <CI@example.com> 1663390248 -0700	commit: three
+198998809e08270eebeb746d6aed45df9faee6a2 2b10745f8823e1d49edc446ea1440d7730a6625b CI <CI@example.com> 1663390248 -0700	commit: four
+2b10745f8823e1d49edc446ea1440d7730a6625b c37c09bdd6f969542d7e94829662c5ac19f5fb7e CI <CI@example.com> 1663390248 -0700	checkout: moving from second-branch to first-branch
+c37c09bdd6f969542d7e94829662c5ac19f5fb7e c37c09bdd6f969542d7e94829662c5ac19f5fb7e CI <CI@example.com> 1663390252 -0700	rebase (start): checkout HEAD
+c37c09bdd6f969542d7e94829662c5ac19f5fb7e 5d9c4c2ff245b2b0112cfa90a529baa3f3e12c6f CI <CI@example.com> 1663390252 -0700	rebase (pick): three
+5d9c4c2ff245b2b0112cfa90a529baa3f3e12c6f 9cf3d6426fc20e3ccf1a9b0e3fa593f136fee92e CI <CI@example.com> 1663390252 -0700	rebase (pick): four
+9cf3d6426fc20e3ccf1a9b0e3fa593f136fee92e 9cf3d6426fc20e3ccf1a9b0e3fa593f136fee92e CI <CI@example.com> 1663390252 -0700	rebase (finish): returning to refs/heads/first-branch
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/first-branch b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/first-branch
new file mode 100644
index 000000000..839c92cee
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/first-branch
@@ -0,0 +1,4 @@
+0000000000000000000000000000000000000000 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	branch: Created from HEAD
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 197a799a14b2ca7478cfe339e7c83f7cdea4918b CI <CI@example.com> 1663390248 -0700	commit: one
+197a799a14b2ca7478cfe339e7c83f7cdea4918b c37c09bdd6f969542d7e94829662c5ac19f5fb7e CI <CI@example.com> 1663390248 -0700	commit: two
+c37c09bdd6f969542d7e94829662c5ac19f5fb7e 9cf3d6426fc20e3ccf1a9b0e3fa593f136fee92e CI <CI@example.com> 1663390252 -0700	rebase (finish): refs/heads/first-branch onto c37c09bdd6f969542d7e94829662c5ac19f5fb7e
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..f5df202bf
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	commit (initial): base
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/second-branch b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/second-branch
new file mode 100644
index 000000000..41f63c795
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/logs/refs/heads/second-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 5b06c6c8d51ba89367991cc7b40dda5d827bb95a CI <CI@example.com> 1663390248 -0700	branch: Created from HEAD
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a 198998809e08270eebeb746d6aed45df9faee6a2 CI <CI@example.com> 1663390248 -0700	commit: three
+198998809e08270eebeb746d6aed45df9faee6a2 2b10745f8823e1d49edc446ea1440d7730a6625b CI <CI@example.com> 1663390248 -0700	commit: four
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/7a799a14b2ca7478cfe339e7c83f7cdea4918b b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/7a799a14b2ca7478cfe339e7c83f7cdea4918b
new file mode 100644
index 0000000000000000000000000000000000000000..ec488017ba9a429a1d36d238415472d32ed14d5e
GIT binary patch
literal 147
zcmV;E0Brww0gcW<3c@fDKvCB@MJ}LB(qu9NB0^U^Mkbk}U`#0yJia}G+s|A4(p!5D
z>ljXBSG7UN$67G>BB;U{5Hto^sUmx#Ra65*Fk9aBJ!}-ff`w{yl8Glw%&wFq0cy>$
zl20NWv&o<F=)0X4d!3iNeskMidMUl#tV5h81|P_tApw}99#cdA<fgyX`~WN^IZ(LA
BK(7D*

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/8998809e08270eebeb746d6aed45df9faee6a2 b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/8998809e08270eebeb746d6aed45df9faee6a2
new file mode 100644
index 000000000..d37e83906
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/19/8998809e08270eebeb746d6aed45df9faee6a2
@@ -0,0 +1,2 @@
+x��A
+�0@Q�9E.�L�d2"BW=Ff2E��R"x|{���x����~�p껙�B!U�TЄ X��PED��E�趲ۻ�$��J5
R�G�̃j���T)dNŕO���f��}K�^vѵ���8�!�?CpG=P���]t��b:(
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/2b/10745f8823e1d49edc446ea1440d7730a6625b b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/2b/10745f8823e1d49edc446ea1440d7730a6625b
new file mode 100644
index 0000000000000000000000000000000000000000..862c1de53b83bbf1832a5801c794faaa7b1ebda1
GIT binary patch
literal 146
zcmV;D0B!$x0gaAP3c@fD1^vz`asg$VrrTW*5&G3*B+Uy7)|8Nf$G6_V-(d!3DeL-d
zw$tv^DqwvSH>8EVTOuQBASMhxW=X70BuBt2d9#Iz_b(Jx5mJ!2k${LedQKdW{E)Kd
z0B~?7?Cnvioo0KT<~u%N-CnpXWxd&sx$l*n7kj3W$Q<;TYWPz(x$M<^0eSp75nrK3
AUjP6A

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5b/06c6c8d51ba89367991cc7b40dda5d827bb95a b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5b/06c6c8d51ba89367991cc7b40dda5d827bb95a
new file mode 100644
index 000000000..a4f4279e7
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5b/06c6c8d51ba89367991cc7b40dda5d827bb95a
@@ -0,0 +1,2 @@
+x��A
+�0Fa�9�\@�&�1��#��E��<�=�����Z�	��$��_La)�2F�5.�|���X\��{�h��2�7|s}=q*�^iP
!��HG>3��?������N+�
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5d/9c4c2ff245b2b0112cfa90a529baa3f3e12c6f b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/5d/9c4c2ff245b2b0112cfa90a529baa3f3e12c6f
new file mode 100644
index 0000000000000000000000000000000000000000..8fdf508b88f1d9bcd3e4f17d6f2bf40530f7d341
GIT binary patch
literal 151
zcmV;I0BHYs0e#Lv3c@fDKvCB@MJ}LBr^zG(B0^U^MlzXD!PrtFcznBX?e_B)U)I(h
z-42YWzN=c7Bl;rbP%>%e1O)0`uCWkfj5Vt|24}Xk>#JKCg8=7Js4}s4Sc0;P$V4bU
z$-vdu9Mq(DU)J4Dv%OC9T|cR9Prb<6ZgwCVM+S7!o*@93qaIUT|8tK&Zu)Ypn=hGm
FIt^*qMy&t<

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/9c/f3d6426fc20e3ccf1a9b0e3fa593f136fee92e b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/9c/f3d6426fc20e3ccf1a9b0e3fa593f136fee92e
new file mode 100644
index 0000000000000000000000000000000000000000..de1b77fe4d21a4c6be22aaa1fe6c52728dea6b4d
GIT binary patch
literal 150
zcmV;H0BQet0e#Lv3IZ_<KvCB{MK7SFX<8c)5oYBvnof#>V~5fKkMAs8yZyYyFKt<#
z!#Z|{(N!%;!Z4ReSR|@&h6ox+YMLWsN>x;efy|n_zK0Dn7b;jQQV<ky4ol4pIUq~U
zzIxqDtR`>c(Yl@P_A=dX`pL`s(o<>6)w&qHXFy8!2xkDZ*L`Z}e;)A1O>J8@Uxpw$
E1+Du+_y7O^

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/c3/7c09bdd6f969542d7e94829662c5ac19f5fb7e b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/objects/c3/7c09bdd6f969542d7e94829662c5ac19f5fb7e
new file mode 100644
index 0000000000000000000000000000000000000000..829be32046211347e61a1e7b83be05614d4e9a57
GIT binary patch
literal 145
zcmV;C0B-+y0gaA93c@fD06pgw`GB%Xw@DU6gr540&31!=F{MQG`PLtJ9cEyp)q3yN
z5ghuaYB482E)vj74w{J}fR30;S_1i$N>)VzG%IiV{DqMt5j)IYIATmvbQnmZq@hGv
zl#yJ@hF|^GHapGsJk3}Aa9tmIl2$L)g|HXkG1((T0JGD5s_UP+>F;K~F)cZHpo2rH

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/first-branch b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/first-branch
new file mode 100644
index 000000000..52ca93d1e
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/first-branch
@@ -0,0 +1 @@
+9cf3d6426fc20e3ccf1a9b0e3fa593f136fee92e
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/master b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..dca03b464
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+5b06c6c8d51ba89367991cc7b40dda5d827bb95a
diff --git a/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/second-branch b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/second-branch
new file mode 100644
index 000000000..0d1ec1f3a
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick/expected/repo/.git_keep/refs/heads/second-branch
@@ -0,0 +1 @@
+2b10745f8823e1d49edc446ea1440d7730a6625b
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..01f5cbba2
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1,15 @@
+second change
+
+# Please enter the commit message for your changes. Lines starting
+# with '#' will be ignored, and an empty message aborts the commit.
+#
+# interactive rebase in progress; onto ccc8b92
+# Last command done (1 command done):
+#    pick dddf38b second change
+# Next command to do (1 remaining command):
+#    pick dae6bc0 second-change-branch unrelated change
+# You are currently rebasing branch 'first-change-branch' on 'ccc8b92'.
+#
+# Changes to be committed:
+#	modified:   file
+#
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/FETCH_HEAD
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/HEAD b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..e1c7bf8c5
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/first-change-branch
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..b303a7622
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+ccc8b929484ac23c527c54d1a109f20b16f5a006
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/config b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/config
new file mode 100644
index 000000000..8a748ce32
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/config
@@ -0,0 +1,12 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+	ignorecase = true
+	precomposeunicode = true
+[user]
+	email = CI@example.com
+	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/description b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/description
new file mode 100644
index 000000000..498b267a8
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/index b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..b9ff2c0de0f85b22609b5413b6652b531f3af3ee
GIT binary patch
literal 231
zcmZ?q402{*U|<4b#$?rSB{o&nHW<ywz`)9qe)2T~L*o*l^jDx75g=9&^I~5w`r=>o
zgQF*t?(X3JbE^La3j<49W=<+l76?LuTwQ^bB!i)X0T)A^ZpE*1Zq1+l&wAN*M||IH
z#aJ2S8Va&B46Mb_z`)GJgaMWE5p!4Uym;H>bo$OImPJ8Kig{``t=1S6ck|w|xS6v0
l*&&NG=AQ<$Qn5Luh}ACfgS@E0AIFz*g5Pr1y?!yN9RQT-PLu!u

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/info/exclude b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/info/exclude
new file mode 100644
index 000000000..8e9f2071f
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/info/exclude
@@ -0,0 +1,7 @@
+# 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_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/HEAD b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..41ddb58b4
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,15 @@
+0000000000000000000000000000000000000000 1091767dde559ffdc97b64f1536955253b931e50 CI <CI@example.com> 1663391521 -0700	commit (initial): one
+1091767dde559ffdc97b64f1536955253b931e50 ad9b1c669fdc039038e54fc497f3e888cc4654e0 CI <CI@example.com> 1663391521 -0700	commit: two
+ad9b1c669fdc039038e54fc497f3e888cc4654e0 1f9963859d30c1bfe620e9121f3d689a07a35519 CI <CI@example.com> 1663391521 -0700	commit: three
+1f9963859d30c1bfe620e9121f3d689a07a35519 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	commit: original
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	checkout: moving from original-branch to first-change-branch
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d ccc8b929484ac23c527c54d1a109f20b16f5a006 CI <CI@example.com> 1663391521 -0700	commit: first change
+ccc8b929484ac23c527c54d1a109f20b16f5a006 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	checkout: moving from first-change-branch to original-branch
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	checkout: moving from original-branch to second-change-branch
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d dddf38b00920854961ad30512b3b174141e877b4 CI <CI@example.com> 1663391521 -0700	commit: second change
+dddf38b00920854961ad30512b3b174141e877b4 dae6bc03641275886fa12a2a00c01edd6e975d99 CI <CI@example.com> 1663391521 -0700	commit: second-change-branch unrelated change
+dae6bc03641275886fa12a2a00c01edd6e975d99 ccc8b929484ac23c527c54d1a109f20b16f5a006 CI <CI@example.com> 1663391521 -0700	checkout: moving from second-change-branch to first-change-branch
+ccc8b929484ac23c527c54d1a109f20b16f5a006 ccc8b929484ac23c527c54d1a109f20b16f5a006 CI <CI@example.com> 1663391521 -0700	rebase (start): checkout HEAD
+ccc8b929484ac23c527c54d1a109f20b16f5a006 e010d664020f79e46ef7f8bf2a1508fe0864109c CI <CI@example.com> 1663391522 -0700	rebase (continue): second change
+e010d664020f79e46ef7f8bf2a1508fe0864109c 948965327ab8404a12fb80d9490ded95969431d1 CI <CI@example.com> 1663391522 -0700	rebase (continue) (pick): second-change-branch unrelated change
+948965327ab8404a12fb80d9490ded95969431d1 948965327ab8404a12fb80d9490ded95969431d1 CI <CI@example.com> 1663391522 -0700	rebase (continue) (finish): returning to refs/heads/first-change-branch
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/first-change-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/first-change-branch
new file mode 100644
index 000000000..ff417251b
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/first-change-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	branch: Created from HEAD
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d ccc8b929484ac23c527c54d1a109f20b16f5a006 CI <CI@example.com> 1663391521 -0700	commit: first change
+ccc8b929484ac23c527c54d1a109f20b16f5a006 948965327ab8404a12fb80d9490ded95969431d1 CI <CI@example.com> 1663391522 -0700	rebase (continue) (finish): refs/heads/first-change-branch onto ccc8b929484ac23c527c54d1a109f20b16f5a006
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/original-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/original-branch
new file mode 100644
index 000000000..b9f592467
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/original-branch
@@ -0,0 +1,4 @@
+0000000000000000000000000000000000000000 1091767dde559ffdc97b64f1536955253b931e50 CI <CI@example.com> 1663391521 -0700	commit (initial): one
+1091767dde559ffdc97b64f1536955253b931e50 ad9b1c669fdc039038e54fc497f3e888cc4654e0 CI <CI@example.com> 1663391521 -0700	commit: two
+ad9b1c669fdc039038e54fc497f3e888cc4654e0 1f9963859d30c1bfe620e9121f3d689a07a35519 CI <CI@example.com> 1663391521 -0700	commit: three
+1f9963859d30c1bfe620e9121f3d689a07a35519 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	commit: original
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/second-change-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/second-change-branch
new file mode 100644
index 000000000..09842646b
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/logs/refs/heads/second-change-branch
@@ -0,0 +1,3 @@
+0000000000000000000000000000000000000000 977cb37e46b9a00e19e6f99c5c179a30b990ca3d CI <CI@example.com> 1663391521 -0700	branch: Created from HEAD
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d dddf38b00920854961ad30512b3b174141e877b4 CI <CI@example.com> 1663391521 -0700	commit: second change
+dddf38b00920854961ad30512b3b174141e877b4 dae6bc03641275886fa12a2a00c01edd6e975d99 CI <CI@example.com> 1663391521 -0700	commit: second-change-branch unrelated change
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/00/7e2d78fa770b29f98fe68d06bb58f7bb3a0179
new file mode 100644
index 0000000000000000000000000000000000000000..bd9b135ac92b2dd8c84e8ee930f3abbad446dcdc
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5Rp4_{y#B98@n4!3t51IS?!mv}RsY$z8MvYa
Fi~z+L6c_*i

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/10/91767dde559ffdc97b64f1536955253b931e50 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/10/91767dde559ffdc97b64f1536955253b931e50
new file mode 100644
index 000000000..e347adc6e
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/10/91767dde559ffdc97b64f1536955253b931e50
@@ -0,0 +1,3 @@
+x��Q
+�0�a�{�\@I�4� 2�ӎ�t
+�ʨ��#����_Z�����73`��"LE�4e����EŸ�'d����6�f�M�h�\?/��V��E�!�@�xEtG=&��䮽��{+d
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/11/0d6e0b946c9d9b9b5e44c29d98692e925c368c
new file mode 100644
index 0000000000000000000000000000000000000000..a893c25632075cb033b35ab97b00bb966d383053
GIT binary patch
literal 48
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5^@Ct>_?tZyx1W^!I;T0!)zPP`GRvIt8v}0&
E0IOXS3jhEB

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/16/4a07af15e8fe5be0c5c962ddb80bfcca8fd804
new file mode 100644
index 0000000000000000000000000000000000000000..3f0746de578045d05bc0ab70eedb0910b69841be
GIT binary patch
literal 46
zcmV+}0MY+=0ZYosPf{>8V&DqN$SmgaEC$l4T*0Zy`FSY{&KZe$>8V_9nK`Lk0P)uh
E7zjcZDF6Tf

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/332f64cb03c06913491af20cd407158776bd55
new file mode 100644
index 0000000000000000000000000000000000000000..8cded6c81b47e88b26c954bb22ad356788258752
GIT binary patch
literal 49
zcmb<m)YkO!4K*-JGB7bPFg6VIIDN)5bwgBgz@4+zryr%AdX?U;b7@As)EO^U2F6~#
FjR3)m6SV*U

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/9963859d30c1bfe620e9121f3d689a07a35519 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/1f/9963859d30c1bfe620e9121f3d689a07a35519
new file mode 100644
index 0000000000000000000000000000000000000000..ac11d698a805aeabc63f4d7d3305ffce4537c7be
GIT binary patch
literal 147
zcmV;E0Brww0gcX03c@fDKw;N8MJ}LB{>B*)5xVLzlF5V$)|L{%<C`P6eSC{2+qyox
zb?i_5P_?m;PgO8_DX4`rAZUuEQAPGdt*AzZX!d;QyW3p3I6>rA1p-5$p_@d$wxC2L
z5-~*ulRtgg4m-{EHq8(H=5>GRMYi>B9byRVl6UqDR{%5WnCki`H+>oF<_Db4Isg2r
BM-Tu2

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/2a/ccf5d0d5f4c2501627da4aebeda580cd86f0eb b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/2a/ccf5d0d5f4c2501627da4aebeda580cd86f0eb
new file mode 100644
index 0000000000000000000000000000000000000000..e4ca8d59a28af84f911ba57b5962caa3f2e160be
GIT binary patch
literal 85
zcmV-b0IL6Z0ZYosPg1b7VBiYL$SmgaEC$l4Ts9D(;Nj}%!sV7(R9vFqoROH9p2}ql
r0bIeU$@zIHFi|@QP)JEhNi()cQqU-dNGF3eX#$PNN#z0nLB<~6L%t|D

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/3a/ac30738b0dda38d964abe6c2386603f9309a65
new file mode 100644
index 0000000000000000000000000000000000000000..1f72f9aeea32636014d2a1fd48203d51ca973040
GIT binary patch
literal 43
zcmV+`0M!3@0ZYosPf{>8WZ(+P$SmgaEC$l4TyB{~#U%>P8Hsu6AWlvy7Xam63&W%1
B5^Dee

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/4c/16472189d1db34cb67b99439725202216e26d9
new file mode 100644
index 0000000000000000000000000000000000000000..9d9452bdd10687443ef9d15b5a5b6f535d97c7c6
GIT binary patch
literal 41
zcmV+^0M`F_0ZYosPf{>4XW$CS$SmgaEC$l4T>eFw>6v+nIb3d;IjLL#xmpU3me3P0

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/94/8965327ab8404a12fb80d9490ded95969431d1 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/94/8965327ab8404a12fb80d9490ded95969431d1
new file mode 100644
index 0000000000000000000000000000000000000000..6510f0fd1a5558d883b06655437c8105a783235a
GIT binary patch
literal 169
zcmV;a09OBa0fml13c@fD06pgw`+>?PZL<l82tD-~n`C1Jn@Wt}^DXGz>o5Zow{^WW
zFlIQkDguZkCXvfbgu(diT^8#S+7L#UDTJO;lUEO}QW^+qOx6x)Fq4<TN~Y{WHmpb7
zQ*?IF=%eCSTeb?*45w+n$eY*4U5;^E&!DaCd#^{Mp+iDcJKd+6{L#%%S5JvsNnKpH
XT%`+@OI+Yps@%Crf-hGeH2+0ZIjK)n

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/97/7cb37e46b9a00e19e6f99c5c179a30b990ca3d b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/97/7cb37e46b9a00e19e6f99c5c179a30b990ca3d
new file mode 100644
index 0000000000000000000000000000000000000000..6f3ae7c4c3712f64334de98e63a5797b731d4c2b
GIT binary patch
literal 151
zcmV;I0BHYs0gaAZ3c@fDMg7hyvH@i#X{H$v5&G3-<T2Gk+msN&<(nn=cR8E`H<f)~
zn?`n*Rz)--WD<xxP~yyyqmyAsrf*MdgpEs<d{Sqqa`bRvChHw%3kl;QWIz}VE;f_r
z0AsMuA*=9d?^5+N>-#i6<s0^MlUpkLLnD#3jLx9G!U&)`?WdajsjE`g*Ls9a{Q#5U
FIqwh@NKya*

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/ad/9b1c669fdc039038e54fc497f3e888cc4654e0 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/ad/9b1c669fdc039038e54fc497f3e888cc4654e0
new file mode 100644
index 0000000000000000000000000000000000000000..7e87c8613e79fc9b964d6ec9428b18c8c6896c31
GIT binary patch
literal 145
zcmV;C0B-+y0gaAH3IZ_@06pgw`GC?{x|0SG!P7h=O9usGh9RQQcb?$2sDdh^_s7(R
z;V?H5?Q^tP3wc{IN#+Cuf<CuciEWH6i+BdF*0jlM4}ndfP^%zvYqfC5<eNc9jA+qi
zc193Xde8gV^lj1S+j5m}>g!WZW%P?SM9#56YxEHUfZFLkHRVrT&CgIj%kDUQqg+M_

literal 0
HcmV?d00001

diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/cc/c8b929484ac23c527c54d1a109f20b16f5a006 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/cc/c8b929484ac23c527c54d1a109f20b16f5a006
new file mode 100644
index 000000000..52f8a5e1e
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/cc/c8b929484ac23c527c54d1a109f20b16f5a006
@@ -0,0 +1,2 @@
+x��M
+�0@a�9E.��t�〈�U��L'�`�R#x|{��o�d�un�OmW�X���d ��H�1�dt�_cy��liץY�Q2Eu!sPd
�Y�`�D��A�&}ڴ���Mu{�E�z���О!��SM�����Y���T��@;�
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/da/e6bc03641275886fa12a2a00c01edd6e975d99 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/da/e6bc03641275886fa12a2a00c01edd6e975d99
new file mode 100644
index 000000000..de1b67169
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/da/e6bc03641275886fa12a2a00c01edd6e975d99
@@ -0,0 +1,3 @@
+x��Qj!��>{����u�Ry�1�������^����_�}��`���CYm��23�M-Ŧ!V"kl,�2'��C��ZksQ�Ÿ�(W�+YqB�ɓFf�&��v�\��r=�O�w=�c�
+��D�%X��[�SS������ץl��t��{��Շ���
+n~�fD�
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/dd/df38b00920854961ad30512b3b174141e877b4 b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/dd/df38b00920854961ad30512b3b174141e877b4
new file mode 100644
index 000000000..32ec66bbf
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/dd/df38b00920854961ad30512b3b174141e877b4
@@ -0,0 +1,2 @@
+x��A
+�0@Q�9�\@�$6���c�LT0m�<�=���[������}SDRW(V!��r�b���+��-�Yeӹ��I�!� �e
�9yG�11c_�|�c�`��2N7�J[_z�K��
�{���pDB4{ݧ����[�2���j~E�<�
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/e0/10d664020f79e46ef7f8bf2a1508fe0864109c b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/e0/10d664020f79e46ef7f8bf2a1508fe0864109c
new file mode 100644
index 000000000..8801370d5
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/objects/e0/10d664020f79e46ef7f8bf2a1508fe0864109c
@@ -0,0 +1,2 @@
+x��M
+�0@a�9E.�L&��]���DӖ��ۅ{��o�xi��5�&��`	�R�1���X���b
9[�Zi��kf�9a�@��vC1d U�l|u���}��8��8]�Cm}ʉ�v��{k�qh����>���W/�e.��4�D}'<X
\ No newline at end of file
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/first-change-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/first-change-branch
new file mode 100644
index 000000000..f904daa2a
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/first-change-branch
@@ -0,0 +1 @@
+948965327ab8404a12fb80d9490ded95969431d1
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/original-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/original-branch
new file mode 100644
index 000000000..c6a8b91da
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/original-branch
@@ -0,0 +1 @@
+977cb37e46b9a00e19e6f99c5c179a30b990ca3d
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/second-change-branch b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/second-change-branch
new file mode 100644
index 000000000..dcaa29172
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/.git_keep/refs/heads/second-change-branch
@@ -0,0 +1 @@
+dae6bc03641275886fa12a2a00c01edd6e975d99
diff --git a/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/file b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/file
new file mode 100644
index 000000000..164a07af1
--- /dev/null
+++ b/test/integration_new/cherry_pick/cherry_pick_conflicts/expected/repo/file
@@ -0,0 +1,6 @@
+
+This
+Is
+The
+Second Change
+File

From 850a82784ace52f5c9b8f8ed2b96762f594455c6 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Fri, 16 Sep 2022 22:22:20 -0700
Subject: [PATCH 15/44] earlier failure

---
 pkg/integration/tests/branch/suggestions.go | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pkg/integration/tests/branch/suggestions.go b/pkg/integration/tests/branch/suggestions.go
index 95a40b0ac..7f7f7e8cb 100644
--- a/pkg/integration/tests/branch/suggestions.go
+++ b/pkg/integration/tests/branch/suggestions.go
@@ -34,6 +34,7 @@ var Suggestions = NewIntegrationTest(NewIntegrationTestArgs{
 
 		// we expect the first suggestion to be the branch we want because it most
 		// closely matches what we typed in
+		assert.MatchSelectedLine(Contains("branch-to-checkout"))
 		input.Confirm()
 
 		assert.CurrentBranchName("branch-to-checkout")

From 6dca3e1766de061264646dbde7d2ba2daa23bbba Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Fri, 16 Sep 2022 22:31:46 -0700
Subject: [PATCH 16/44] allow two attempts on CI

---
 pkg/integration/clients/cli.go       |  1 +
 pkg/integration/clients/go_test.go   |  3 +++
 pkg/integration/clients/tui.go       |  1 +
 pkg/integration/components/runner.go | 15 ++++++++++++++-
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/pkg/integration/clients/cli.go b/pkg/integration/clients/cli.go
index 0222bd129..73a02c432 100644
--- a/pkg/integration/clients/cli.go
+++ b/pkg/integration/clients/cli.go
@@ -43,6 +43,7 @@ func RunCLI(testNames []string, slow bool, sandbox bool) {
 		runAndPrintFatalError,
 		mode,
 		keyPressDelay,
+		1,
 	)
 	if err != nil {
 		log.Print(err.Error())
diff --git a/pkg/integration/clients/go_test.go b/pkg/integration/clients/go_test.go
index a14b1f254..3e442feaf 100644
--- a/pkg/integration/clients/go_test.go
+++ b/pkg/integration/clients/go_test.go
@@ -48,6 +48,9 @@ func TestIntegration(t *testing.T) {
 		},
 		components.CHECK_SNAPSHOT,
 		0,
+		// allowing two attempts at the test. If a test fails intermittently,
+		// there may be a concurrency issue that we need to resolve.
+		2,
 	)
 
 	assert.NoError(t, err)
diff --git a/pkg/integration/clients/tui.go b/pkg/integration/clients/tui.go
index 96ffed8b0..656d16877 100644
--- a/pkg/integration/clients/tui.go
+++ b/pkg/integration/clients/tui.go
@@ -375,6 +375,7 @@ func runTuiTest(test *components.IntegrationTest, mode components.Mode, keyPress
 		runAndPrintError,
 		mode,
 		keyPressDelay,
+		1,
 	)
 	if err != nil {
 		log.Println(err.Error())
diff --git a/pkg/integration/components/runner.go b/pkg/integration/components/runner.go
index 54b42de17..26ac57875 100644
--- a/pkg/integration/components/runner.go
+++ b/pkg/integration/components/runner.go
@@ -42,6 +42,7 @@ func RunTests(
 	testWrapper func(test *IntegrationTest, f func() error),
 	mode Mode,
 	keyPressDelay int,
+	maxAttempts int,
 ) error {
 	projectRootDir := utils.GetLazygitRootDirectory()
 	err := os.Chdir(projectRootDir)
@@ -63,7 +64,19 @@ func RunTests(
 				filepath.Join(testDir, test.Name()),
 			)
 
-			return runTest(test, paths, projectRootDir, logf, runCmd, mode, keyPressDelay)
+			for i := 0; i < maxAttempts; i++ {
+				err := runTest(test, paths, projectRootDir, logf, runCmd, mode, keyPressDelay)
+				if err != nil {
+					if i == maxAttempts-1 {
+						return err
+					}
+					logf("retrying test %s", test.Name())
+				} else {
+					break
+				}
+			}
+
+			return nil
 		})
 	}
 

From a92f0f7c8905b0d4595cc3cb101a2acdcdc139f5 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sat, 17 Sep 2022 10:50:04 -0700
Subject: [PATCH 17/44] increase recording leeway

---
 pkg/gui/test_mode.go                  | 2 +-
 pkg/integration/deprecated/go_test.go | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkg/gui/test_mode.go b/pkg/gui/test_mode.go
index cd3bd83ba..7d1a5eb5a 100644
--- a/pkg/gui/test_mode.go
+++ b/pkg/gui/test_mode.go
@@ -42,7 +42,7 @@ func (gui *Gui) handleTestMode(test integrationTypes.IntegrationTest) {
 	if Replaying() {
 		gui.g.RecordingConfig = gocui.RecordingConfig{
 			Speed:  GetRecordingSpeed(),
-			Leeway: 100,
+			Leeway: 1000,
 		}
 
 		var err error
diff --git a/pkg/integration/deprecated/go_test.go b/pkg/integration/deprecated/go_test.go
index 9b8c92a3b..af7f6a8eb 100644
--- a/pkg/integration/deprecated/go_test.go
+++ b/pkg/integration/deprecated/go_test.go
@@ -106,7 +106,7 @@ func runCmdHeadless(cmd *exec.Cmd) error {
 	// these rows and columns are ignored because internally we use tcell's
 	// simulation screen. However we still need the pty for the sake of
 	// running other commands in a pty.
-	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 300, Cols: 300})
+	f, err := pty.StartWithSize(cmd, &pty.Winsize{Rows: 100, Cols: 100})
 	if err != nil {
 		return err
 	}

From 5639af99188ef4c283a456f9d51186af7a1d6d90 Mon Sep 17 00:00:00 2001
From: README-bot <actions@users.noreply.github.com>
Date: Sat, 17 Sep 2022 18:10:08 +0000
Subject: [PATCH 18/44] Updated README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 732d8c97f..2d03f5b94 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ A simple terminal UI for git commands, written in Go with the [gocui](https://gi
 </p>
 
 <p align="center">
-<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/kristijanhusak"><img src="https://github.com/kristijanhusak.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/kublaios"><img src="https://github.com/kublaios.png" width="60px" alt="" /></a><a href="https://github.com/Ulthes"><img src="https://github.com/Ulthes.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/zeevro"><img src="https://github.com/zeevro.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/bastianwegge"><img src="https://github.com/bastianwegge.png" width="60px" alt="" /></a><a href="https://github.com/m-vandeneede"><img src="https://github.com/m-vandeneede.png" width="60px" alt="" /></a><a href="https://github.com/henry174Ajou"><img src="https://github.com/henry174Ajou.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/kristijanhusak"><img src="https://github.com/kristijanhusak.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/zeevro"><img src="https://github.com/zeevro.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/bastianwegge"><img src="https://github.com/bastianwegge.png" width="60px" alt="" /></a><a href="https://github.com/m-vandeneede"><img src="https://github.com/m-vandeneede.png" width="60px" alt="" /></a><a href="https://github.com/henry174Ajou"><img src="https://github.com/henry174Ajou.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><!-- sponsors -->
 </p>
 
 ## Elevator Pitch

From 7e9dffe1b93d304d8500cc0a379a8a2f4e35a7a2 Mon Sep 17 00:00:00 2001
From: Mihai22125 <mihai.mtb10@gmail.com>
Date: Tue, 9 Aug 2022 19:52:19 +0300
Subject: [PATCH 19/44] Add Key field to CustomCommandPrompt struct

Add Form field to CustomCommandObjects struct

Write user prompts responses to Form field

Ensure that map keys exists

Add form prompts integration test

Remove redundant index
---
 pkg/config/user_config.go                     |   2 +
 .../custom_commands/handler_creator.go        |  14 ++-
 .../tests/custom_commands/form_prompts.go     |  88 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   1 +
 pkg/utils/template.go                         |   2 +-
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../form_prompts/expected/repo/.git_keep/HEAD |   1 +
 .../expected/repo/.git_keep/config            |   8 ++
 .../expected/repo/.git_keep/description       |   1 +
 .../expected/repo/.git_keep/index             | Bin 0 -> 65 bytes
 .../expected/repo/.git_keep/info/exclude      |   6 ++
 .../expected/repo/.git_keep/logs/HEAD         |   1 +
 .../repo/.git_keep/logs/refs/heads/master     |   1 +
 .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes
 .../6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 | Bin 0 -> 116 bytes
 .../expected/repo/.git_keep/refs/heads/master |   1 +
 .../form_prompts/expected/repo/myfile         |   1 +
 18 files changed, 122 insertions(+), 6 deletions(-)
 create mode 100644 pkg/integration/tests/custom_commands/form_prompts.go
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/COMMIT_EDITMSG
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/FETCH_HEAD
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/description
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/index
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/myfile

diff --git a/pkg/config/user_config.go b/pkg/config/user_config.go
index 7e6a21656..f3ff1befb 100644
--- a/pkg/config/user_config.go
+++ b/pkg/config/user_config.go
@@ -314,6 +314,8 @@ type CustomCommand struct {
 }
 
 type CustomCommandPrompt struct {
+	Key string `yaml:"key"`
+
 	// one of 'input', 'menu', 'confirm', or 'menuFromCommand'
 	Type string `yaml:"type"`
 
diff --git a/pkg/gui/services/custom_commands/handler_creator.go b/pkg/gui/services/custom_commands/handler_creator.go
index 6ac9fb733..839f70adf 100644
--- a/pkg/gui/services/custom_commands/handler_creator.go
+++ b/pkg/gui/services/custom_commands/handler_creator.go
@@ -45,8 +45,9 @@ func (self *HandlerCreator) call(customCommand config.CustomCommand) func() erro
 	return func() error {
 		sessionState := self.sessionStateLoader.call()
 		promptResponses := make([]string, len(customCommand.Prompts))
+		form := make(map[string]string)
 
-		f := func() error { return self.finalHandler(customCommand, sessionState, promptResponses) }
+		f := func() error { return self.finalHandler(customCommand, sessionState, promptResponses, form) }
 
 		// if we have prompts we'll recursively wrap our confirm handlers with more prompts
 		// until we reach the actual command
@@ -60,10 +61,11 @@ func (self *HandlerCreator) call(customCommand config.CustomCommand) func() erro
 
 			wrappedF := func(response string) error {
 				promptResponses[idx] = response
+				form[prompt.Key] = response
 				return g()
 			}
 
-			resolveTemplate := self.getResolveTemplateFn(promptResponses, sessionState)
+			resolveTemplate := self.getResolveTemplateFn(form, promptResponses, sessionState)
 			resolvedPrompt, err := self.resolver.resolvePrompt(&prompt, resolveTemplate)
 			if err != nil {
 				return self.c.Error(err)
@@ -154,19 +156,21 @@ func (self *HandlerCreator) menuPromptFromCommand(prompt *config.CustomCommandPr
 type CustomCommandObjects struct {
 	*SessionState
 	PromptResponses []string
+	Form            map[string]string
 }
 
-func (self *HandlerCreator) getResolveTemplateFn(promptResponses []string, sessionState *SessionState) func(string) (string, error) {
+func (self *HandlerCreator) getResolveTemplateFn(form map[string]string, promptResponses []string, sessionState *SessionState) func(string) (string, error) {
 	objects := CustomCommandObjects{
 		SessionState:    sessionState,
 		PromptResponses: promptResponses,
+		Form:            form,
 	}
 
 	return func(templateStr string) (string, error) { return utils.ResolveTemplate(templateStr, objects) }
 }
 
-func (self *HandlerCreator) finalHandler(customCommand config.CustomCommand, sessionState *SessionState, promptResponses []string) error {
-	resolveTemplate := self.getResolveTemplateFn(promptResponses, sessionState)
+func (self *HandlerCreator) finalHandler(customCommand config.CustomCommand, sessionState *SessionState, promptResponses []string, form map[string]string) error {
+	resolveTemplate := self.getResolveTemplateFn(form, promptResponses, sessionState)
 	cmdStr, err := resolveTemplate(customCommand.Command)
 	if err != nil {
 		return self.c.Error(err)
diff --git a/pkg/integration/tests/custom_commands/form_prompts.go b/pkg/integration/tests/custom_commands/form_prompts.go
new file mode 100644
index 000000000..e4712dbcc
--- /dev/null
+++ b/pkg/integration/tests/custom_commands/form_prompts.go
@@ -0,0 +1,88 @@
+package custom_commands
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Using a custom command reffering prompt responses by name",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupRepo: func(shell *Shell) {
+		shell.EmptyCommit("blah")
+	},
+	SetupConfig: func(cfg *config.AppConfig) {
+		cfg.UserConfig.CustomCommands = []config.CustomCommand{
+			{
+				Key:     "a",
+				Context: "files",
+				Command: `echo "{{.Form.FileContent}}" > {{.Form.FileName}}`,
+				Prompts: []config.CustomCommandPrompt{
+					{
+						Key:   "FileName",
+						Type:  "input",
+						Title: "Enter a file name",
+					},
+					{
+						Key:   "FileContent",
+						Type:  "menu",
+						Title: "Choose file content",
+						Options: []config.CustomCommandMenuOption{
+							{
+								Name:        "foo",
+								Description: "Foo",
+								Value:       "FOO",
+							},
+							{
+								Name:        "bar",
+								Description: "Bar",
+								Value:       "BAR",
+							},
+							{
+								Name:        "baz",
+								Description: "Baz",
+								Value:       "BAZ",
+							},
+						},
+					},
+					{
+						Type:  "confirm",
+						Title: "Are you sure?",
+						Body:  "Are you REALLY sure you want to make this file? Up to you buddy.",
+					},
+				},
+			},
+		}
+	},
+	Run: func(
+		shell *Shell,
+		input *Input,
+		assert *Assert,
+		keys config.KeybindingConfig,
+	) {
+		assert.WorkingTreeFileCount(0)
+
+		input.PressKeys("a")
+
+		assert.InPrompt()
+		assert.MatchCurrentViewTitle(Equals("Enter a file name"))
+		input.Type("myfile")
+		input.Confirm()
+
+		assert.InMenu()
+		assert.MatchCurrentViewTitle(Equals("Choose file content"))
+		assert.MatchSelectedLine(Contains("foo"))
+		input.NextItem()
+		assert.MatchSelectedLine(Contains("bar"))
+		input.Confirm()
+
+		assert.InConfirm()
+		assert.MatchCurrentViewTitle(Equals("Are you sure?"))
+		input.Confirm()
+
+		assert.WorkingTreeFileCount(1)
+		assert.MatchSelectedLine(Contains("myfile"))
+		assert.MatchMainViewContent(Contains("BAR"))
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index 9280347be..eb2fd83fa 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -36,6 +36,7 @@ var tests = []*components.IntegrationTest{
 	bisect.FromOtherBranch,
 	cherry_pick.CherryPick,
 	cherry_pick.CherryPickConflicts,
+	custom_commands.FormPrompts,
 }
 
 func GetTests() []*components.IntegrationTest {
diff --git a/pkg/utils/template.go b/pkg/utils/template.go
index 6c147cd38..41388ae3a 100644
--- a/pkg/utils/template.go
+++ b/pkg/utils/template.go
@@ -7,7 +7,7 @@ import (
 )
 
 func ResolveTemplate(templateStr string, object interface{}) (string, error) {
-	tmpl, err := template.New("template").Parse(templateStr)
+	tmpl, err := template.New("template").Option("missingkey=error").Parse(templateStr)
 	if err != nil {
 		return "", err
 	}
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..907b30816
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+blah
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/FETCH_HEAD
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/HEAD b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..cb089cd89
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/master
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
new file mode 100644
index 000000000..596ebaeb3
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
@@ -0,0 +1,8 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[user]
+	email = CI@example.com
+	name = CI
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/description b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/description
new file mode 100644
index 000000000..498b267a8
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/index b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..65d675154f23ffb2d0196e017d44a5e7017550f5
GIT binary patch
literal 65
zcmZ?q402{*U|<4bhL9jvS0E+HV4z^Y<=qr}%;|LA&IJiiy?<Pr)babBCri;)`-<AO
Tl}3xATFuWrGP@z+w&EiIWCj?s

literal 0
HcmV?d00001

diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
new file mode 100644
index 000000000..a5196d1be
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
@@ -0,0 +1,6 @@
+# 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]
+# *~
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..153f2ddc4
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 CI <CI@example.com> 1660591942 +0000	commit (initial): blah
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
new file mode 100644
index 000000000..153f2ddc4
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
@@ -0,0 +1 @@
+0000000000000000000000000000000000000000 6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 CI <CI@example.com> 1660591942 +0000	commit (initial): blah
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904
new file mode 100644
index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559
GIT binary patch
literal 15
Wcmb<m)YkO!4K+w$VBpeWVgvvgJ_3UP

literal 0
HcmV?d00001

diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
new file mode 100644
index 0000000000000000000000000000000000000000..8d0c394f8aa5c739df95a23ba1821118395c1378
GIT binary patch
literal 116
zcmV-)0E_>40ga783c@fD06pgwdlzIAH%k_z2tD-~*>p>VhDeFv^UV{S<1jF#)%xn-
z>3->_8IYzB*TNKvvZ-Wbv`D(8l_jLKsTm29%b&it6XpdT^YXNBuJ6NcrPT>MGe+@3
W0j@Z3!;VR}KXa!?-rWzaL@TsV7dVap

literal 0
HcmV?d00001

diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
new file mode 100644
index 000000000..4c2ab0871
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
@@ -0,0 +1 @@
+6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/myfile b/test/integration_new/custom_commands/form_prompts/expected/repo/myfile
new file mode 100644
index 000000000..ba578e48b
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/myfile
@@ -0,0 +1 @@
+BAR

From b8900baf1ada72c24e58c487122c21e80858f52a Mon Sep 17 00:00:00 2001
From: jiepeng <jiepengthegreat@126.com>
Date: Tue, 13 Sep 2022 18:11:03 +0800
Subject: [PATCH 20/44] remove deprecated calls

---
 pkg/app/daemon/daemon.go                          |  3 +--
 pkg/app/logging.go                                |  4 ++--
 pkg/cheatsheet/check.go                           |  3 +--
 pkg/commands/git.go                               |  3 +--
 pkg/commands/git_commands/file.go                 |  4 ++--
 pkg/commands/git_commands/rebase.go               | 10 +++++-----
 pkg/commands/git_commands/working_tree_test.go    |  4 ++--
 pkg/commands/git_config/get_key.go                |  4 ++--
 pkg/commands/loaders/commits.go                   |  3 +--
 pkg/commands/oscommands/gui_io.go                 |  6 ++----
 pkg/commands/oscommands/os.go                     |  6 +++---
 pkg/commands/oscommands/os_test.go                |  9 ++++-----
 pkg/config/app_config.go                          |  7 +++----
 pkg/gui/controllers/merge_conflicts_controller.go |  5 +++--
 pkg/gui/gui.go                                    |  6 +++---
 pkg/gui/recent_repos_panel.go                     |  5 ++---
 pkg/gui/test_mode.go                              |  5 ++---
 pkg/integration/components/shell.go               |  5 ++---
 pkg/integration/components/snapshot.go            |  4 ++--
 pkg/integration/deprecated/integration.go         |  6 +++---
 pkg/utils/dummies.go                              |  5 ++---
 21 files changed, 48 insertions(+), 59 deletions(-)

diff --git a/pkg/app/daemon/daemon.go b/pkg/app/daemon/daemon.go
index ea71bb956..182807b02 100644
--- a/pkg/app/daemon/daemon.go
+++ b/pkg/app/daemon/daemon.go
@@ -1,7 +1,6 @@
 package daemon
 
 import (
-	"io/ioutil"
 	"log"
 	"os"
 	"path/filepath"
@@ -77,7 +76,7 @@ func (self *rebaseDaemon) Run() error {
 	self.c.Log.Info("args: ", os.Args)
 
 	if strings.HasSuffix(os.Args[1], "git-rebase-todo") {
-		if err := ioutil.WriteFile(os.Args[1], []byte(os.Getenv(RebaseTODOEnvKey)), 0o644); err != nil {
+		if err := os.WriteFile(os.Args[1], []byte(os.Getenv(RebaseTODOEnvKey)), 0o644); err != nil {
 			return err
 		}
 	} else if strings.HasSuffix(os.Args[1], filepath.Join(gitDir(), "COMMIT_EDITMSG")) { // TODO: test
diff --git a/pkg/app/logging.go b/pkg/app/logging.go
index 7a5eef74e..65bed7823 100644
--- a/pkg/app/logging.go
+++ b/pkg/app/logging.go
@@ -1,7 +1,7 @@
 package app
 
 import (
-	"io/ioutil"
+	"io"
 	"log"
 	"os"
 
@@ -26,7 +26,7 @@ func newLogger(config config.AppConfigurer) *logrus.Entry {
 
 func newProductionLogger() *logrus.Logger {
 	log := logrus.New()
-	log.Out = ioutil.Discard
+	log.Out = io.Discard
 	log.SetLevel(logrus.ErrorLevel)
 	return log
 }
diff --git a/pkg/cheatsheet/check.go b/pkg/cheatsheet/check.go
index a0c40e775..6123e4aa5 100644
--- a/pkg/cheatsheet/check.go
+++ b/pkg/cheatsheet/check.go
@@ -3,7 +3,6 @@ package cheatsheet
 import (
 	"fmt"
 	"io/fs"
-	"io/ioutil"
 	"log"
 	"os"
 	"path/filepath"
@@ -60,7 +59,7 @@ func obtainContent(dir string) string {
 	content := ""
 	err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
 		if re.MatchString(path) {
-			bytes, err := ioutil.ReadFile(path)
+			bytes, err := os.ReadFile(path)
 			if err != nil {
 				log.Fatalf("Error occurred while checking if cheatsheets are up to date: %v", err)
 			}
diff --git a/pkg/commands/git.go b/pkg/commands/git.go
index 2176077d4..a28e9afb6 100644
--- a/pkg/commands/git.go
+++ b/pkg/commands/git.go
@@ -1,7 +1,6 @@
 package commands
 
 import (
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strings"
@@ -68,7 +67,7 @@ func NewGitCommand(
 		return nil, err
 	}
 
-	dotGitDir, err := findDotGitDir(os.Stat, ioutil.ReadFile)
+	dotGitDir, err := findDotGitDir(os.Stat, os.ReadFile)
 	if err != nil {
 		return nil, err
 	}
diff --git a/pkg/commands/git_commands/file.go b/pkg/commands/git_commands/file.go
index 898c26e33..111733bb7 100644
--- a/pkg/commands/git_commands/file.go
+++ b/pkg/commands/git_commands/file.go
@@ -1,7 +1,7 @@
 package git_commands
 
 import (
-	"io/ioutil"
+	"os"
 	"strconv"
 
 	"github.com/go-errors/errors"
@@ -20,7 +20,7 @@ func NewFileCommands(gitCommon *GitCommon) *FileCommands {
 
 // Cat obtains the content of a file
 func (self *FileCommands) Cat(fileName string) (string, error) {
-	buf, err := ioutil.ReadFile(fileName)
+	buf, err := os.ReadFile(fileName)
 	if err != nil {
 		return "", nil
 	}
diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go
index 48a613e41..9a8f94618 100644
--- a/pkg/commands/git_commands/rebase.go
+++ b/pkg/commands/git_commands/rebase.go
@@ -2,7 +2,7 @@ package git_commands
 
 import (
 	"fmt"
-	"io/ioutil"
+	"os"
 	"path/filepath"
 	"strings"
 
@@ -202,7 +202,7 @@ func (self *RebaseCommands) AmendTo(sha string) error {
 // EditRebaseTodo sets the action at a given index in the git-rebase-todo file
 func (self *RebaseCommands) EditRebaseTodo(index int, action string) error {
 	fileName := filepath.Join(self.dotGitDir, "rebase-merge/git-rebase-todo")
-	bytes, err := ioutil.ReadFile(fileName)
+	bytes, err := os.ReadFile(fileName)
 	if err != nil {
 		return err
 	}
@@ -217,7 +217,7 @@ func (self *RebaseCommands) EditRebaseTodo(index int, action string) error {
 	content[contentIndex] = action + " " + strings.Join(splitLine[1:], " ")
 	result := strings.Join(content, "\n")
 
-	return ioutil.WriteFile(fileName, []byte(result), 0o644)
+	return os.WriteFile(fileName, []byte(result), 0o644)
 }
 
 func (self *RebaseCommands) getTodoCommitCount(content []string) int {
@@ -234,7 +234,7 @@ func (self *RebaseCommands) getTodoCommitCount(content []string) int {
 // MoveTodoDown moves a rebase todo item down by one position
 func (self *RebaseCommands) MoveTodoDown(index int) error {
 	fileName := filepath.Join(self.dotGitDir, "rebase-merge/git-rebase-todo")
-	bytes, err := ioutil.ReadFile(fileName)
+	bytes, err := os.ReadFile(fileName)
 	if err != nil {
 		return err
 	}
@@ -247,7 +247,7 @@ func (self *RebaseCommands) MoveTodoDown(index int) error {
 	rearrangedContent = append(rearrangedContent, content[contentIndex+1:]...)
 	result := strings.Join(rearrangedContent, "\n")
 
-	return ioutil.WriteFile(fileName, []byte(result), 0o644)
+	return os.WriteFile(fileName, []byte(result), 0o644)
 }
 
 // SquashAllAboveFixupCommits squashes all fixup! commits above the given one
diff --git a/pkg/commands/git_commands/working_tree_test.go b/pkg/commands/git_commands/working_tree_test.go
index e4e884ce4..049961541 100644
--- a/pkg/commands/git_commands/working_tree_test.go
+++ b/pkg/commands/git_commands/working_tree_test.go
@@ -2,7 +2,7 @@ package git_commands
 
 import (
 	"fmt"
-	"io/ioutil"
+	"os"
 	"regexp"
 	"testing"
 
@@ -432,7 +432,7 @@ func TestWorkingTreeApplyPatch(t *testing.T) {
 
 			filename := matches[1]
 
-			content, err := ioutil.ReadFile(filename)
+			content, err := os.ReadFile(filename)
 			assert.NoError(t, err)
 
 			assert.Equal(t, "test", string(content))
diff --git a/pkg/commands/git_config/get_key.go b/pkg/commands/git_config/get_key.go
index bd6f59248..c3156a2db 100644
--- a/pkg/commands/git_config/get_key.go
+++ b/pkg/commands/git_config/get_key.go
@@ -3,7 +3,7 @@ package git_config
 import (
 	"bytes"
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os/exec"
 	"strings"
 	"syscall"
@@ -38,7 +38,7 @@ import (
 func runGitConfigCmd(cmd *exec.Cmd) (string, error) {
 	var stdout bytes.Buffer
 	cmd.Stdout = &stdout
-	cmd.Stderr = ioutil.Discard
+	cmd.Stderr = io.Discard
 
 	err := cmd.Run()
 	if exitError, ok := err.(*exec.ExitError); ok {
diff --git a/pkg/commands/loaders/commits.go b/pkg/commands/loaders/commits.go
index 69c88ccf5..5f33408cd 100644
--- a/pkg/commands/loaders/commits.go
+++ b/pkg/commands/loaders/commits.go
@@ -3,7 +3,6 @@ package loaders
 import (
 	"bytes"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"regexp"
@@ -50,7 +49,7 @@ func NewCommitLoader(
 		cmd:                  cmd,
 		getCurrentBranchName: getCurrentBranchName,
 		getRebaseMode:        getRebaseMode,
-		readFile:             ioutil.ReadFile,
+		readFile:             os.ReadFile,
 		walkFiles:            filepath.Walk,
 		dotGitDir:            dotGitDir,
 	}
diff --git a/pkg/commands/oscommands/gui_io.go b/pkg/commands/oscommands/gui_io.go
index 9540c13e1..495285a5f 100644
--- a/pkg/commands/oscommands/gui_io.go
+++ b/pkg/commands/oscommands/gui_io.go
@@ -1,10 +1,8 @@
 package oscommands
 
 import (
-	"io"
-	"io/ioutil"
-
 	"github.com/sirupsen/logrus"
+	"io"
 )
 
 // this struct captures some IO stuff
@@ -45,7 +43,7 @@ func NewNullGuiIO(log *logrus.Entry) *guiIO {
 	return &guiIO{
 		log:                   log,
 		logCommandFn:          func(string, bool) {},
-		newCmdWriterFn:        func() io.Writer { return ioutil.Discard },
+		newCmdWriterFn:        func() io.Writer { return io.Discard },
 		promptForCredentialFn: failPromptFn,
 	}
 }
diff --git a/pkg/commands/oscommands/os.go b/pkg/commands/oscommands/os.go
index 2a7cc1328..39149ce84 100644
--- a/pkg/commands/oscommands/os.go
+++ b/pkg/commands/oscommands/os.go
@@ -2,7 +2,7 @@ package oscommands
 
 import (
 	"fmt"
-	"io/ioutil"
+	"io"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -151,7 +151,7 @@ func (c *OSCommand) CreateFileWithContent(path string, content string) error {
 		return err
 	}
 
-	if err := ioutil.WriteFile(path, []byte(content), 0o644); err != nil {
+	if err := os.WriteFile(path, []byte(content), 0o644); err != nil {
 		c.Log.Error(err)
 		return utils.WrapError(err)
 	}
@@ -215,7 +215,7 @@ func (c *OSCommand) PipeCommands(commandStrings ...string) error {
 				c.Log.Error(err)
 			}
 
-			if b, err := ioutil.ReadAll(stderr); err == nil {
+			if b, err := io.ReadAll(stderr); err == nil {
 				if len(b) > 0 {
 					finalErrors = append(finalErrors, string(b))
 				}
diff --git a/pkg/commands/oscommands/os_test.go b/pkg/commands/oscommands/os_test.go
index 969224405..e9fc91424 100644
--- a/pkg/commands/oscommands/os_test.go
+++ b/pkg/commands/oscommands/os_test.go
@@ -1,7 +1,6 @@
 package oscommands
 
 import (
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"testing"
@@ -149,7 +148,7 @@ func TestOSCommandAppendLineToFile(t *testing.T) {
 		{
 			filepath.Join(os.TempDir(), "testFile"),
 			func(path string) {
-				if err := ioutil.WriteFile(path, []byte("hello"), 0o600); err != nil {
+				if err := os.WriteFile(path, []byte("hello"), 0o600); err != nil {
 					panic(err)
 				}
 			},
@@ -160,7 +159,7 @@ func TestOSCommandAppendLineToFile(t *testing.T) {
 		{
 			filepath.Join(os.TempDir(), "emptyTestFile"),
 			func(path string) {
-				if err := ioutil.WriteFile(path, []byte(""), 0o600); err != nil {
+				if err := os.WriteFile(path, []byte(""), 0o600); err != nil {
 					panic(err)
 				}
 			},
@@ -171,7 +170,7 @@ func TestOSCommandAppendLineToFile(t *testing.T) {
 		{
 			filepath.Join(os.TempDir(), "testFileWithNewline"),
 			func(path string) {
-				if err := ioutil.WriteFile(path, []byte("hello\n"), 0o600); err != nil {
+				if err := os.WriteFile(path, []byte("hello\n"), 0o600); err != nil {
 					panic(err)
 				}
 			},
@@ -187,7 +186,7 @@ func TestOSCommandAppendLineToFile(t *testing.T) {
 		if err := osCommand.AppendLineToFile(s.path, "world"); err != nil {
 			panic(err)
 		}
-		f, err := ioutil.ReadFile(s.path)
+		f, err := os.ReadFile(s.path)
 		if err != nil {
 			panic(err)
 		}
diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go
index 9806bcf58..49ff32b04 100644
--- a/pkg/config/app_config.go
+++ b/pkg/config/app_config.go
@@ -2,7 +2,6 @@ package config
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strings"
@@ -152,7 +151,7 @@ func loadUserConfig(configFiles []string, base *UserConfig) (*UserConfig, error)
 			file.Close()
 		}
 
-		content, err := ioutil.ReadFile(path)
+		content, err := os.ReadFile(path)
 		if err != nil {
 			return nil, err
 		}
@@ -243,7 +242,7 @@ func (c *AppConfig) SaveAppState() error {
 		return err
 	}
 
-	err = ioutil.WriteFile(filepath, marshalledAppState, 0o644)
+	err = os.WriteFile(filepath, marshalledAppState, 0o644)
 	if err != nil && os.IsPermission(err) {
 		// apparently when people have read-only permissions they prefer us to fail silently
 		return nil
@@ -263,7 +262,7 @@ func loadAppState() (*AppState, error) {
 		return nil, err
 	}
 
-	appStateBytes, err := ioutil.ReadFile(filepath)
+	appStateBytes, err := os.ReadFile(filepath)
 	if err != nil && !os.IsNotExist(err) {
 		return nil, err
 	}
diff --git a/pkg/gui/controllers/merge_conflicts_controller.go b/pkg/gui/controllers/merge_conflicts_controller.go
index 86d18a6a8..14ab748b1 100644
--- a/pkg/gui/controllers/merge_conflicts_controller.go
+++ b/pkg/gui/controllers/merge_conflicts_controller.go
@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"io/ioutil"
+	"os"
 
 	"github.com/jesseduffield/gocui"
 	"github.com/jesseduffield/lazygit/pkg/gui/context"
@@ -192,7 +193,7 @@ func (self *MergeConflictsController) HandleUndo() error {
 
 	self.c.LogAction("Restoring file to previous state")
 	self.c.LogCommand("Undoing last conflict resolution", false)
-	if err := ioutil.WriteFile(state.GetPath(), []byte(state.GetContent()), 0o644); err != nil {
+	if err := ioutil.os(state.GetPath(), []byte(state.GetContent()), 0o644); err != nil {
 		return err
 	}
 
@@ -280,7 +281,7 @@ func (self *MergeConflictsController) resolveConflict(selection mergeconflicts.S
 	self.c.LogAction("Resolve merge conflict")
 	self.c.LogCommand(logStr, false)
 	state.PushContent(content)
-	return true, ioutil.WriteFile(state.GetPath(), []byte(content), 0o644)
+	return true, os.WriteFile(state.GetPath(), []byte(content), 0o644)
 }
 
 func (self *MergeConflictsController) onLastConflictResolved() error {
diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index 5420ac9fa..f499ef367 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -2,7 +2,7 @@ package gui
 
 import (
 	"fmt"
-	"io/ioutil"
+	"io"
 	"log"
 	"os"
 	"strings"
@@ -656,8 +656,8 @@ func (gui *Gui) runSubprocess(cmdObj oscommands.ICmdObj) error { //nolint:unpara
 
 	err := subprocess.Run()
 
-	subprocess.Stdout = ioutil.Discard
-	subprocess.Stderr = ioutil.Discard
+	subprocess.Stdout = io.Discard
+	subprocess.Stderr = io.Discard
 	subprocess.Stdin = nil
 
 	if gui.Config.GetUserConfig().PromptToReturnFromSubprocess {
diff --git a/pkg/gui/recent_repos_panel.go b/pkg/gui/recent_repos_panel.go
index df7656841..a301d0447 100644
--- a/pkg/gui/recent_repos_panel.go
+++ b/pkg/gui/recent_repos_panel.go
@@ -2,7 +2,6 @@ package gui
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strings"
@@ -20,7 +19,7 @@ import (
 
 func (gui *Gui) getCurrentBranch(path string) string {
 	readHeadFile := func(path string) (string, error) {
-		headFile, err := ioutil.ReadFile(filepath.Join(path, "HEAD"))
+		headFile, err := os.ReadFile(filepath.Join(path, "HEAD"))
 		if err == nil {
 			content := strings.TrimSpace(string(headFile))
 			refsPrefix := "ref: refs/heads/"
@@ -47,7 +46,7 @@ func (gui *Gui) getCurrentBranch(path string) string {
 			}
 		} else {
 			// worktree
-			if worktreeGitDir, err := ioutil.ReadFile(gitDirPath); err == nil {
+			if worktreeGitDir, err := os.ReadFile(gitDirPath); err == nil {
 				content := strings.TrimSpace(string(worktreeGitDir))
 				worktreePath := strings.TrimPrefix(content, "gitdir: ")
 				if branch, err := readHeadFile(worktreePath); err == nil {
diff --git a/pkg/gui/test_mode.go b/pkg/gui/test_mode.go
index 7d1a5eb5a..97c291828 100644
--- a/pkg/gui/test_mode.go
+++ b/pkg/gui/test_mode.go
@@ -2,7 +2,6 @@ package gui
 
 import (
 	"encoding/json"
-	"io/ioutil"
 	"log"
 	"os"
 	"strconv"
@@ -93,7 +92,7 @@ func GetRecordingSpeed() float64 {
 func LoadRecording() (*gocui.Recording, error) {
 	path := os.Getenv("REPLAY_EVENTS_FROM")
 
-	data, err := ioutil.ReadFile(path)
+	data, err := os.ReadFile(path)
 	if err != nil {
 		return nil, err
 	}
@@ -120,5 +119,5 @@ func SaveRecording(recording *gocui.Recording) error {
 
 	path := recordEventsTo()
 
-	return ioutil.WriteFile(path, jsonEvents, 0o600)
+	return os.WriteFile(path, jsonEvents, 0o600)
 }
diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 880e270d3..458528be7 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -2,7 +2,6 @@ package components
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 
@@ -38,7 +37,7 @@ func (s *Shell) RunCommand(cmdStr string) *Shell {
 
 func (s *Shell) CreateFile(path string, content string) *Shell {
 	fullPath := filepath.Join(s.dir, path)
-	err := ioutil.WriteFile(fullPath, []byte(content), 0o644)
+	err := os.WriteFile(fullPath, []byte(content), 0o644)
 	if err != nil {
 		panic(fmt.Sprintf("error creating file: %s\n%s", fullPath, err))
 	}
@@ -48,7 +47,7 @@ func (s *Shell) CreateFile(path string, content string) *Shell {
 
 func (s *Shell) UpdateFile(path string, content string) *Shell {
 	fullPath := filepath.Join(s.dir, path)
-	err := ioutil.WriteFile(fullPath, []byte(content), 0o644)
+	err := os.WriteFile(fullPath, []byte(content), 0o644)
 	if err != nil {
 		panic(fmt.Sprintf("error updating file: %s\n%s", fullPath, err))
 	}
diff --git a/pkg/integration/components/snapshot.go b/pkg/integration/components/snapshot.go
index a75faf8e6..116db930f 100644
--- a/pkg/integration/components/snapshot.go
+++ b/pkg/integration/components/snapshot.go
@@ -168,7 +168,7 @@ func (self *Snapshotter) compareSnapshots() error {
 
 		if expectedRepo != actualRepo {
 			// get the log file and print it
-			bytes, err := ioutil.ReadFile(filepath.Join(self.paths.Config(), "development.log"))
+			bytes, err := os.ReadFile(filepath.Join(self.paths.Config(), "development.log"))
 			if err != nil {
 				return err
 			}
@@ -250,7 +250,7 @@ func generateSnapshot(dir string) (string, error) {
 			return nil
 		}
 
-		bytes, err := ioutil.ReadFile(path)
+		bytes, err := os.ReadFile(path)
 		if err != nil {
 			return err
 		}
diff --git a/pkg/integration/deprecated/integration.go b/pkg/integration/deprecated/integration.go
index 2f9b2ab8c..b292809c9 100644
--- a/pkg/integration/deprecated/integration.go
+++ b/pkg/integration/deprecated/integration.go
@@ -178,7 +178,7 @@ func RunTests(
 							}
 
 							// get the log file and print it
-							bytes, err := ioutil.ReadFile(filepath.Join(configDir, "development.log"))
+							bytes, err := os.ReadFile(filepath.Join(configDir, "development.log"))
 							if err != nil {
 								return err
 							}
@@ -324,7 +324,7 @@ func LoadTests(testDir string) ([]*IntegrationTest, error) {
 	tests := make([]*IntegrationTest, len(paths))
 
 	for i, path := range paths {
-		data, err := ioutil.ReadFile(path)
+		data, err := os.ReadFile(path)
 		if err != nil {
 			return nil, err
 		}
@@ -406,7 +406,7 @@ func generateSnapshot(dir string) (string, error) {
 			return nil
 		}
 
-		bytes, err := ioutil.ReadFile(path)
+		bytes, err := os.ReadFile(path)
 		if err != nil {
 			return err
 		}
diff --git a/pkg/utils/dummies.go b/pkg/utils/dummies.go
index c5fba3556..e23880cce 100644
--- a/pkg/utils/dummies.go
+++ b/pkg/utils/dummies.go
@@ -1,18 +1,17 @@
 package utils
 
 import (
-	"io/ioutil"
-
 	"github.com/jesseduffield/lazygit/pkg/common"
 	"github.com/jesseduffield/lazygit/pkg/config"
 	"github.com/jesseduffield/lazygit/pkg/i18n"
 	"github.com/sirupsen/logrus"
+	"io"
 )
 
 // NewDummyLog creates a new dummy Log for testing
 func NewDummyLog() *logrus.Entry {
 	log := logrus.New()
-	log.Out = ioutil.Discard
+	log.Out = io.Discard
 	return log.WithField("test", "test")
 }
 

From bc8050d8acb9cc162e03d3d93e1328feebcd4cb4 Mon Sep 17 00:00:00 2001
From: jiepeng <jiepengthegreat@126.com>
Date: Tue, 13 Sep 2022 18:18:22 +0800
Subject: [PATCH 21/44] typo

---
 pkg/gui/controllers/merge_conflicts_controller.go | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pkg/gui/controllers/merge_conflicts_controller.go b/pkg/gui/controllers/merge_conflicts_controller.go
index 14ab748b1..40824099e 100644
--- a/pkg/gui/controllers/merge_conflicts_controller.go
+++ b/pkg/gui/controllers/merge_conflicts_controller.go
@@ -1,7 +1,6 @@
 package controllers
 
 import (
-	"io/ioutil"
 	"os"
 
 	"github.com/jesseduffield/gocui"
@@ -193,7 +192,7 @@ func (self *MergeConflictsController) HandleUndo() error {
 
 	self.c.LogAction("Restoring file to previous state")
 	self.c.LogCommand("Undoing last conflict resolution", false)
-	if err := ioutil.os(state.GetPath(), []byte(state.GetContent()), 0o644); err != nil {
+	if err := os.WriteFile(state.GetPath(), []byte(state.GetContent()), 0o644); err != nil {
 		return err
 	}
 

From 3d79c6a3d3bd939259f0a37b34acc9d5a7ab4759 Mon Sep 17 00:00:00 2001
From: TomCao New Macbook Pro <jiepengthegreat@126.com>
Date: Wed, 14 Sep 2022 00:30:08 +0800
Subject: [PATCH 22/44] formatter

---
 pkg/commands/oscommands/gui_io.go | 3 ++-
 pkg/utils/dummies.go              | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/pkg/commands/oscommands/gui_io.go b/pkg/commands/oscommands/gui_io.go
index 495285a5f..10a8b2678 100644
--- a/pkg/commands/oscommands/gui_io.go
+++ b/pkg/commands/oscommands/gui_io.go
@@ -1,8 +1,9 @@
 package oscommands
 
 import (
-	"github.com/sirupsen/logrus"
 	"io"
+
+	"github.com/sirupsen/logrus"
 )
 
 // this struct captures some IO stuff
diff --git a/pkg/utils/dummies.go b/pkg/utils/dummies.go
index e23880cce..08de78d1d 100644
--- a/pkg/utils/dummies.go
+++ b/pkg/utils/dummies.go
@@ -1,11 +1,12 @@
 package utils
 
 import (
+	"io"
+
 	"github.com/jesseduffield/lazygit/pkg/common"
 	"github.com/jesseduffield/lazygit/pkg/config"
 	"github.com/jesseduffield/lazygit/pkg/i18n"
 	"github.com/sirupsen/logrus"
-	"io"
 )
 
 // NewDummyLog creates a new dummy Log for testing

From 438038a4f180978125f239787aa9fc253183d444 Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Tue, 2 Aug 2022 08:32:28 +0900
Subject: [PATCH 23/44] fix(loaders/file.go): changed to ignore stderr when
 loading git status

---
 pkg/commands/git_cmd_obj_runner.go            |  4 ++
 pkg/commands/loaders/files.go                 |  2 +-
 pkg/commands/oscommands/cmd_obj.go            |  6 +++
 pkg/commands/oscommands/cmd_obj_runner.go     | 48 +++++++++++++++++++
 .../oscommands/fake_cmd_obj_runner.go         |  5 ++
 5 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/pkg/commands/git_cmd_obj_runner.go b/pkg/commands/git_cmd_obj_runner.go
index c57c2d2be..96cef3c61 100644
--- a/pkg/commands/git_cmd_obj_runner.go
+++ b/pkg/commands/git_cmd_obj_runner.go
@@ -21,6 +21,10 @@ func (self *gitCmdObjRunner) RunWithOutput(cmdObj oscommands.ICmdObj) (string, e
 	return self.innerRunner.RunWithOutput(cmdObj)
 }
 
+func (self *gitCmdObjRunner) RunWithOutputs(cmdObj oscommands.ICmdObj) (string, string, error) {
+	return self.innerRunner.RunWithOutputs(cmdObj)
+}
+
 func (self *gitCmdObjRunner) RunAndProcessLines(cmdObj oscommands.ICmdObj, onLine func(line string) (bool, error)) error {
 	return self.innerRunner.RunAndProcessLines(cmdObj, onLine)
 }
diff --git a/pkg/commands/loaders/files.go b/pkg/commands/loaders/files.go
index db37da935..6d14bb590 100644
--- a/pkg/commands/loaders/files.go
+++ b/pkg/commands/loaders/files.go
@@ -87,7 +87,7 @@ func (c *FileLoader) GitStatus(opts GitStatusOptions) ([]FileStatus, error) {
 		noRenamesFlag = " --no-renames"
 	}
 
-	statusLines, err := c.cmd.New(fmt.Sprintf("git status %s --porcelain -z%s", opts.UntrackedFilesArg, noRenamesFlag)).DontLog().RunWithOutput()
+	statusLines, _, err := c.cmd.New(fmt.Sprintf("git status %s --porcelain -z%s", opts.UntrackedFilesArg, noRenamesFlag)).DontLog().RunWithOutputs()
 	if err != nil {
 		return []FileStatus{}, err
 	}
diff --git a/pkg/commands/oscommands/cmd_obj.go b/pkg/commands/oscommands/cmd_obj.go
index 1a801c6fe..47a227f17 100644
--- a/pkg/commands/oscommands/cmd_obj.go
+++ b/pkg/commands/oscommands/cmd_obj.go
@@ -22,6 +22,8 @@ type ICmdObj interface {
 	Run() error
 	// runs the command and returns the output as a string, and an error if any
 	RunWithOutput() (string, error)
+	// runs the command and returns stdout and stderr as a string, and an error if any
+	RunWithOutputs() (string, string, error)
 	// runs the command and runs a callback function on each line of the output. If the callback returns true for the boolean value, we kill the process and return.
 	RunAndProcessLines(onLine func(line string) (bool, error)) error
 
@@ -162,6 +164,10 @@ func (self *CmdObj) RunWithOutput() (string, error) {
 	return self.runner.RunWithOutput(self)
 }
 
+func (self *CmdObj) RunWithOutputs() (string, string, error) {
+	return self.runner.RunWithOutputs(self)
+}
+
 func (self *CmdObj) RunAndProcessLines(onLine func(line string) (bool, error)) error {
 	return self.runner.RunAndProcessLines(self, onLine)
 }
diff --git a/pkg/commands/oscommands/cmd_obj_runner.go b/pkg/commands/oscommands/cmd_obj_runner.go
index ba1489fe6..01cc0f460 100644
--- a/pkg/commands/oscommands/cmd_obj_runner.go
+++ b/pkg/commands/oscommands/cmd_obj_runner.go
@@ -15,6 +15,7 @@ import (
 type ICmdObjRunner interface {
 	Run(cmdObj ICmdObj) error
 	RunWithOutput(cmdObj ICmdObj) (string, error)
+	RunWithOutputs(cmdObj ICmdObj) (string, string, error)
 	RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error
 }
 
@@ -76,6 +77,31 @@ func (self *cmdObjRunner) RunWithOutput(cmdObj ICmdObj) (string, error) {
 	return self.RunWithOutputAux(cmdObj)
 }
 
+func (self *cmdObjRunner) RunWithOutputs(cmdObj ICmdObj) (string, string, error) {
+	if cmdObj.Mutex() != nil {
+		cmdObj.Mutex().Lock()
+		defer cmdObj.Mutex().Unlock()
+	}
+
+	if cmdObj.GetCredentialStrategy() != NONE {
+		err := self.runWithCredentialHandling(cmdObj)
+		// for now we're not capturing output, just because it would take a little more
+		// effort and there's currently no use case for it. Some commands call RunWithOutputs
+		// but ignore the output, hence why we've got this check here.
+		return "", "", err
+	}
+
+	if cmdObj.ShouldStreamOutput() {
+		err := self.runAndStream(cmdObj)
+		// for now we're not capturing output, just because it would take a little more
+		// effort and there's currently no use case for it. Some commands call RunWithOutputs
+		// but ignore the output, hence why we've got this check here.
+		return "", "", err
+	}
+
+	return self.RunWithOutputsAux(cmdObj)
+}
+
 func (self *cmdObjRunner) RunWithOutputAux(cmdObj ICmdObj) (string, error) {
 	self.log.WithField("command", cmdObj.ToString()).Debug("RunCommand")
 
@@ -90,6 +116,28 @@ func (self *cmdObjRunner) RunWithOutputAux(cmdObj ICmdObj) (string, error) {
 	return output, err
 }
 
+func (self *cmdObjRunner) RunWithOutputsAux(cmdObj ICmdObj) (string, string, error) {
+	self.log.WithField("command", cmdObj.ToString()).Debug("RunCommand")
+
+	if cmdObj.ShouldLog() {
+		self.logCmdObj(cmdObj)
+	}
+
+	var outBuffer, errBuffer bytes.Buffer
+	cmd := cmdObj.GetCmd()
+	cmd.Stdout = &outBuffer
+	cmd.Stderr = &errBuffer
+	err := cmd.Run()
+
+	stdout := outBuffer.String()
+	stderr, err := sanitisedCommandOutput(errBuffer.Bytes(), err)
+	if err != nil {
+		self.log.WithField("command", cmdObj.ToString()).Error(stderr)
+	}
+
+	return stdout, stderr, err
+}
+
 func (self *cmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
 	if cmdObj.Mutex() != nil {
 		cmdObj.Mutex().Lock()
diff --git a/pkg/commands/oscommands/fake_cmd_obj_runner.go b/pkg/commands/oscommands/fake_cmd_obj_runner.go
index d06861251..f553d8c63 100644
--- a/pkg/commands/oscommands/fake_cmd_obj_runner.go
+++ b/pkg/commands/oscommands/fake_cmd_obj_runner.go
@@ -44,6 +44,11 @@ func (self *FakeCmdObjRunner) RunWithOutput(cmdObj ICmdObj) (string, error) {
 	return output, err
 }
 
+func (self *FakeCmdObjRunner) RunWithOutputs(cmdObj ICmdObj) (string, string, error) {
+	output, err := self.RunWithOutput(cmdObj)
+	return output, "", err
+}
+
 func (self *FakeCmdObjRunner) RunAndProcessLines(cmdObj ICmdObj, onLine func(line string) (bool, error)) error {
 	output, err := self.RunWithOutput(cmdObj)
 	if err != nil {

From 1c8292430765b391177856e6589b08038d6f0f28 Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Fri, 23 Sep 2022 20:01:44 +0900
Subject: [PATCH 24/44] build: $ ./scripts/bump_gocui.sh

---
 go.mod                                        |  8 +-
 go.sum                                        | 15 +--
 vendor/github.com/jesseduffield/gocui/edit.go |  6 ++
 .../jesseduffield/gocui/text_area.go          | 64 ++++++++++++-
 .../github.com/mattn/go-runewidth/README.md   |  2 +-
 .../github.com/mattn/go-runewidth/go.test.sh  | 12 ---
 .../mattn/go-runewidth/runewidth.go           | 93 ++++++++++++++++++-
 .../mattn/go-runewidth/runewidth_appengine.go |  1 +
 .../mattn/go-runewidth/runewidth_js.go        |  4 +-
 .../mattn/go-runewidth/runewidth_posix.go     |  5 +-
 .../mattn/go-runewidth/runewidth_windows.go   |  4 +-
 .../x/sys/windows/syscall_windows.go          |  4 +
 .../golang.org/x/sys/windows/types_windows.go | 26 ++++++
 .../x/sys/windows/zsyscall_windows.go         | 19 ++++
 vendor/modules.txt                            |  8 +-
 15 files changed, 231 insertions(+), 40 deletions(-)
 delete mode 100644 vendor/github.com/mattn/go-runewidth/go.test.sh

diff --git a/go.mod b/go.mod
index 976225865..0f697c35a 100644
--- a/go.mod
+++ b/go.mod
@@ -18,14 +18,14 @@ require (
 	github.com/integrii/flaggy v1.4.0
 	github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
 	github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4
-	github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6
+	github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37
 	github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
 	github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e
 	github.com/jesseduffield/yaml v2.1.0+incompatible
 	github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0
 	github.com/kyokomi/emoji/v2 v2.2.8
 	github.com/lucasb-eyer/go-colorful v1.2.0
-	github.com/mattn/go-runewidth v0.0.13
+	github.com/mattn/go-runewidth v0.0.14
 	github.com/mgutz/str v1.2.0
 	github.com/pmezard/go-difflib v1.0.0
 	github.com/sahilm/fuzzy v0.1.0
@@ -67,8 +67,8 @@ require (
 	golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
 	golang.org/x/exp v0.0.0-20220318154914-8dddf5d87bd8 // indirect
 	golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect
-	golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 // indirect
-	golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
+	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
+	golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect
 	golang.org/x/text v0.3.7 // indirect
 	gopkg.in/warnings.v0 v0.1.2 // indirect
 )
diff --git a/go.sum b/go.sum
index ebb3b202b..7e1aeae88 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
-github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6 h1:FgxhH7++BaLcDwldyNtxkeVUC2z7ur2QYtJ8Msgkgc0=
-github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
+github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37 h1:EE21YiOAGGs4/K8l3V15w5ICJmDrfwhklm3adc4N/8A=
+github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e h1:uw/oo+kg7t/oeMs6sqlAwr85ND/9cpO3up3VxphxY0U=
@@ -112,8 +112,9 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
 github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
 github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
+github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mgutz/str v1.2.0 h1:4IzWSdIz9qPQWLfKZ0rJcV0jcUDpxvP4JVZ4GXQyvSw=
 github.com/mgutz/str v1.2.0/go.mod h1:w1v0ofgLaJdoD0HpQ3fycxKD1WtxpjSo151pK/31q6w=
 github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
@@ -194,11 +195,11 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41 h1:ohgcoMbSofXygzo6AD2I1kz3BFmW1QArPYTtwEM3UXc=
-golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc=
+golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 h1:Q5284mrmYTpACcm+eAKjKJH48BBwSyfJqmmGDTtT8Vc=
-golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.0.0-20220919170432-7a66f970e087 h1:tPwmk4vmvVCMdr98VgL4JH+qZxPL8fqlUOHnyOM8N3w=
+golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
diff --git a/vendor/github.com/jesseduffield/gocui/edit.go b/vendor/github.com/jesseduffield/gocui/edit.go
index dde27e76a..535ca40cc 100644
--- a/vendor/github.com/jesseduffield/gocui/edit.go
+++ b/vendor/github.com/jesseduffield/gocui/edit.go
@@ -49,10 +49,16 @@ func SimpleEditor(v *View, key Key, ch rune, mod Modifier) bool {
 		v.TextArea.ToggleOverwrite()
 	case key == KeyCtrlU:
 		v.TextArea.DeleteToStartOfLine()
+	case key == KeyCtrlK:
+		v.TextArea.DeleteToEndOfLine()
 	case key == KeyCtrlA || key == KeyHome:
 		v.TextArea.GoToStartOfLine()
 	case key == KeyCtrlE || key == KeyEnd:
 		v.TextArea.GoToEndOfLine()
+	case key == KeyCtrlW:
+		v.TextArea.BackSpaceWord()
+	case key == KeyCtrlY:
+		v.TextArea.Yank()
 
 		// TODO: see if we need all three of these conditions: maybe the final one is sufficient
 	case ch != 0 && mod == 0 && unicode.IsPrint(ch):
diff --git a/vendor/github.com/jesseduffield/gocui/text_area.go b/vendor/github.com/jesseduffield/gocui/text_area.go
index 5c9ae31ea..731e1cd04 100644
--- a/vendor/github.com/jesseduffield/gocui/text_area.go
+++ b/vendor/github.com/jesseduffield/gocui/text_area.go
@@ -1,11 +1,21 @@
 package gocui
 
-import "github.com/mattn/go-runewidth"
+import (
+	"strings"
+
+	"github.com/mattn/go-runewidth"
+)
+
+const (
+	WHITESPACES     = " \t"
+	WORD_SEPARATORS = "*?_+-.[]~=/&;!#$%^(){}<>"
+)
 
 type TextArea struct {
 	content   []rune
 	cursor    int
 	overwrite bool
+	clipboard string
 }
 
 func (self *TextArea) TypeRune(r rune) {
@@ -92,10 +102,25 @@ func (self *TextArea) DeleteToStartOfLine() {
 	// otherwise, you delete everything up to the start of the current line, without
 	// deleting the newline character
 	newlineIndex := self.closestNewlineOnLeft()
+	self.clipboard = string(self.content[newlineIndex+1 : self.cursor])
 	self.content = append(self.content[:newlineIndex+1], self.content[self.cursor:]...)
 	self.cursor = newlineIndex + 1
 }
 
+func (self *TextArea) DeleteToEndOfLine() {
+	if self.atEnd() {
+		return
+	}
+	if self.atLineEnd() {
+		self.content = append(self.content[:self.cursor], self.content[self.cursor+1:]...)
+		return
+	}
+
+	lineEndIndex := self.closestNewlineOnRight()
+	self.clipboard = string(self.content[self.cursor:lineEndIndex])
+	self.content = append(self.content[:self.cursor], self.content[lineEndIndex:]...)
+}
+
 func (self *TextArea) GoToStartOfLine() {
 	if self.atLineStart() {
 		return
@@ -142,6 +167,43 @@ func (self *TextArea) atLineStart() bool {
 		(len(self.content) > self.cursor-1 && self.content[self.cursor-1] == '\n')
 }
 
+func (self *TextArea) atLineEnd() bool {
+	return self.atEnd() ||
+		(len(self.content) > self.cursor && self.content[self.cursor] == '\n')
+}
+
+func (self *TextArea) BackSpaceWord() {
+	if self.cursor == 0 {
+		return
+	}
+	if self.atLineStart() {
+		self.BackSpaceChar()
+		return
+	}
+
+	right := self.cursor
+	for !self.atLineStart() && strings.ContainsRune(WHITESPACES, self.content[self.cursor-1]) {
+		self.cursor--
+	}
+	separators := false
+	for !self.atLineStart() && strings.ContainsRune(WORD_SEPARATORS, self.content[self.cursor-1]) {
+		self.cursor--
+		separators = true
+	}
+	if !separators {
+		for !self.atLineStart() && !strings.ContainsRune(WHITESPACES+WORD_SEPARATORS, self.content[self.cursor-1]) {
+			self.cursor--
+		}
+	}
+
+	self.clipboard = string(self.content[self.cursor:right])
+	self.content = append(self.content[:self.cursor], self.content[right:]...)
+}
+
+func (self *TextArea) Yank() {
+	self.TypeString(self.clipboard)
+}
+
 func (self *TextArea) GetCursorXY() (int, int) {
 	cursorX := 0
 	cursorY := 0
diff --git a/vendor/github.com/mattn/go-runewidth/README.md b/vendor/github.com/mattn/go-runewidth/README.md
index aa56ab96c..5e2cfd98c 100644
--- a/vendor/github.com/mattn/go-runewidth/README.md
+++ b/vendor/github.com/mattn/go-runewidth/README.md
@@ -1,7 +1,7 @@
 go-runewidth
 ============
 
-[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)
+[![Build Status](https://github.com/mattn/go-runewidth/workflows/test/badge.svg?branch=master)](https://github.com/mattn/go-runewidth/actions?query=workflow%3Atest)
 [![Codecov](https://codecov.io/gh/mattn/go-runewidth/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-runewidth)
 [![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)
 [![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)
diff --git a/vendor/github.com/mattn/go-runewidth/go.test.sh b/vendor/github.com/mattn/go-runewidth/go.test.sh
deleted file mode 100644
index 012162b07..000000000
--- a/vendor/github.com/mattn/go-runewidth/go.test.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-echo "" > coverage.txt
-
-for d in $(go list ./... | grep -v vendor); do
-    go test -race -coverprofile=profile.out -covermode=atomic "$d"
-    if [ -f profile.out ]; then
-        cat profile.out >> coverage.txt
-        rm profile.out
-    fi
-done
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go
index 3d7fa560b..7dfbb3be9 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth.go
@@ -2,6 +2,7 @@ package runewidth
 
 import (
 	"os"
+	"strings"
 
 	"github.com/rivo/uniseg"
 )
@@ -34,7 +35,13 @@ func handleEnv() {
 		EastAsianWidth = env == "1"
 	}
 	// update DefaultCondition
-	DefaultCondition.EastAsianWidth = EastAsianWidth
+	if DefaultCondition.EastAsianWidth != EastAsianWidth {
+		DefaultCondition.EastAsianWidth = EastAsianWidth
+		if len(DefaultCondition.combinedLut) > 0 {
+			DefaultCondition.combinedLut = DefaultCondition.combinedLut[:0]
+			CreateLUT()
+		}
+	}
 }
 
 type interval struct {
@@ -89,6 +96,7 @@ var nonprint = table{
 
 // Condition have flag EastAsianWidth whether the current locale is CJK or not.
 type Condition struct {
+	combinedLut        []byte
 	EastAsianWidth     bool
 	StrictEmojiNeutral bool
 }
@@ -104,10 +112,16 @@ func NewCondition() *Condition {
 // RuneWidth returns the number of cells in r.
 // See http://www.unicode.org/reports/tr11/
 func (c *Condition) RuneWidth(r rune) int {
+	if r < 0 || r > 0x10FFFF {
+		return 0
+	}
+	if len(c.combinedLut) > 0 {
+		return int(c.combinedLut[r>>1]>>(uint(r&1)*4)) & 3
+	}
 	// optimized version, verified by TestRuneWidthChecksums()
 	if !c.EastAsianWidth {
 		switch {
-		case r < 0x20 || r > 0x10FFFF:
+		case r < 0x20:
 			return 0
 		case (r >= 0x7F && r <= 0x9F) || r == 0xAD: // nonprint
 			return 0
@@ -124,7 +138,7 @@ func (c *Condition) RuneWidth(r rune) int {
 		}
 	} else {
 		switch {
-		case r < 0 || r > 0x10FFFF || inTables(r, nonprint, combining):
+		case inTables(r, nonprint, combining):
 			return 0
 		case inTable(r, narrow):
 			return 1
@@ -138,6 +152,27 @@ func (c *Condition) RuneWidth(r rune) int {
 	}
 }
 
+// CreateLUT will create an in-memory lookup table of 557056 bytes for faster operation.
+// This should not be called concurrently with other operations on c.
+// If options in c is changed, CreateLUT should be called again.
+func (c *Condition) CreateLUT() {
+	const max = 0x110000
+	lut := c.combinedLut
+	if len(c.combinedLut) != 0 {
+		// Remove so we don't use it.
+		c.combinedLut = nil
+	} else {
+		lut = make([]byte, max/2)
+	}
+	for i := range lut {
+		i32 := int32(i * 2)
+		x0 := c.RuneWidth(i32)
+		x1 := c.RuneWidth(i32 + 1)
+		lut[i] = uint8(x0) | uint8(x1)<<4
+	}
+	c.combinedLut = lut
+}
+
 // StringWidth return width as you can see
 func (c *Condition) StringWidth(s string) (width int) {
 	g := uniseg.NewGraphemes(s)
@@ -180,11 +215,47 @@ func (c *Condition) Truncate(s string, w int, tail string) string {
 	return s[:pos] + tail
 }
 
+// TruncateLeft cuts w cells from the beginning of the `s`.
+func (c *Condition) TruncateLeft(s string, w int, prefix string) string {
+	if c.StringWidth(s) <= w {
+		return prefix
+	}
+
+	var width int
+	pos := len(s)
+
+	g := uniseg.NewGraphemes(s)
+	for g.Next() {
+		var chWidth int
+		for _, r := range g.Runes() {
+			chWidth = c.RuneWidth(r)
+			if chWidth > 0 {
+				break // See StringWidth() for details.
+			}
+		}
+
+		if width+chWidth > w {
+			if width < w {
+				_, pos = g.Positions()
+				prefix += strings.Repeat(" ", width+chWidth-w)
+			} else {
+				pos, _ = g.Positions()
+			}
+
+			break
+		}
+
+		width += chWidth
+	}
+
+	return prefix + s[pos:]
+}
+
 // Wrap return string wrapped with w cells
 func (c *Condition) Wrap(s string, w int) string {
 	width := 0
 	out := ""
-	for _, r := range []rune(s) {
+	for _, r := range s {
 		cw := c.RuneWidth(r)
 		if r == '\n' {
 			out += string(r)
@@ -257,6 +328,11 @@ func Truncate(s string, w int, tail string) string {
 	return DefaultCondition.Truncate(s, w, tail)
 }
 
+// TruncateLeft cuts w cells from the beginning of the `s`.
+func TruncateLeft(s string, w int, prefix string) string {
+	return DefaultCondition.TruncateLeft(s, w, prefix)
+}
+
 // Wrap return string wrapped with w cells
 func Wrap(s string, w int) string {
 	return DefaultCondition.Wrap(s, w)
@@ -271,3 +347,12 @@ func FillLeft(s string, w int) string {
 func FillRight(s string, w int) string {
 	return DefaultCondition.FillRight(s, w)
 }
+
+// CreateLUT will create an in-memory lookup table of 557055 bytes for faster operation.
+// This should not be called concurrently with other operations.
+func CreateLUT() {
+	if len(DefaultCondition.combinedLut) > 0 {
+		return
+	}
+	DefaultCondition.CreateLUT()
+}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
index 7d99f6e52..84b6528df 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
@@ -1,3 +1,4 @@
+//go:build appengine
 // +build appengine
 
 package runewidth
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
index c5fdf40ba..c2abbc2db 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_js.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
@@ -1,5 +1,5 @@
-// +build js
-// +build !appengine
+//go:build js && !appengine
+// +build js,!appengine
 
 package runewidth
 
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
index 480ad7485..5a31d738e 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
@@ -1,6 +1,5 @@
-// +build !windows
-// +build !js
-// +build !appengine
+//go:build !windows && !js && !appengine
+// +build !windows,!js,!appengine
 
 package runewidth
 
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
index d6a61777d..5f987a310 100644
--- a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
@@ -1,5 +1,5 @@
-// +build windows
-// +build !appengine
+//go:build windows && !appengine
+// +build windows,!appengine
 
 package runewidth
 
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 29737b200..3f2cbb638 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -442,6 +442,10 @@ func NewCallbackCDecl(fn interface{}) uintptr {
 //sys	RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) = ntdll.RtlAddFunctionTable
 //sys	RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) = ntdll.RtlDeleteFunctionTable
 
+// Desktop Window Manager API (Dwmapi)
+//sys	DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmGetWindowAttribute
+//sys	DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) = dwmapi.DwmSetWindowAttribute
+
 // syscall interface implementation for other packages
 
 // GetCurrentProcess returns the handle for the current process.
diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go
index ef489f546..0c4add974 100644
--- a/vendor/golang.org/x/sys/windows/types_windows.go
+++ b/vendor/golang.org/x/sys/windows/types_windows.go
@@ -3232,3 +3232,29 @@ type GUIThreadInfo struct {
 	CaretHandle HWND
 	CaretRect   Rect
 }
+
+const (
+	DWMWA_NCRENDERING_ENABLED            = 1
+	DWMWA_NCRENDERING_POLICY             = 2
+	DWMWA_TRANSITIONS_FORCEDISABLED      = 3
+	DWMWA_ALLOW_NCPAINT                  = 4
+	DWMWA_CAPTION_BUTTON_BOUNDS          = 5
+	DWMWA_NONCLIENT_RTL_LAYOUT           = 6
+	DWMWA_FORCE_ICONIC_REPRESENTATION    = 7
+	DWMWA_FLIP3D_POLICY                  = 8
+	DWMWA_EXTENDED_FRAME_BOUNDS          = 9
+	DWMWA_HAS_ICONIC_BITMAP              = 10
+	DWMWA_DISALLOW_PEEK                  = 11
+	DWMWA_EXCLUDED_FROM_PEEK             = 12
+	DWMWA_CLOAK                          = 13
+	DWMWA_CLOAKED                        = 14
+	DWMWA_FREEZE_REPRESENTATION          = 15
+	DWMWA_PASSIVE_UPDATE_MODE            = 16
+	DWMWA_USE_HOSTBACKDROPBRUSH          = 17
+	DWMWA_USE_IMMERSIVE_DARK_MODE        = 20
+	DWMWA_WINDOW_CORNER_PREFERENCE       = 33
+	DWMWA_BORDER_COLOR                   = 34
+	DWMWA_CAPTION_COLOR                  = 35
+	DWMWA_TEXT_COLOR                     = 36
+	DWMWA_VISIBLE_FRAME_BORDER_THICKNESS = 37
+)
diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
index 6c6f27ba5..96ba8559c 100644
--- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go
@@ -40,6 +40,7 @@ var (
 	modadvapi32 = NewLazySystemDLL("advapi32.dll")
 	modcrypt32  = NewLazySystemDLL("crypt32.dll")
 	moddnsapi   = NewLazySystemDLL("dnsapi.dll")
+	moddwmapi   = NewLazySystemDLL("dwmapi.dll")
 	modiphlpapi = NewLazySystemDLL("iphlpapi.dll")
 	modkernel32 = NewLazySystemDLL("kernel32.dll")
 	modmswsock  = NewLazySystemDLL("mswsock.dll")
@@ -175,6 +176,8 @@ var (
 	procDnsNameCompare_W                                     = moddnsapi.NewProc("DnsNameCompare_W")
 	procDnsQuery_W                                           = moddnsapi.NewProc("DnsQuery_W")
 	procDnsRecordListFree                                    = moddnsapi.NewProc("DnsRecordListFree")
+	procDwmGetWindowAttribute                                = moddwmapi.NewProc("DwmGetWindowAttribute")
+	procDwmSetWindowAttribute                                = moddwmapi.NewProc("DwmSetWindowAttribute")
 	procGetAdaptersAddresses                                 = modiphlpapi.NewProc("GetAdaptersAddresses")
 	procGetAdaptersInfo                                      = modiphlpapi.NewProc("GetAdaptersInfo")
 	procGetBestInterfaceEx                                   = modiphlpapi.NewProc("GetBestInterfaceEx")
@@ -1534,6 +1537,22 @@ func DnsRecordListFree(rl *DNSRecord, freetype uint32) {
 	return
 }
 
+func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {
+	r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0)
+	if r0 != 0 {
+		ret = syscall.Errno(r0)
+	}
+	return
+}
+
+func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) {
+	r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0)
+	if r0 != 0 {
+		ret = syscall.Errno(r0)
+	}
+	return
+}
+
 func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) {
 	r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0)
 	if r0 != 0 {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index aa1d34c6c..2619b0e18 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
 github.com/jesseduffield/go-git/v5/utils/merkletrie/index
 github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
 github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20220916034937-22d48fda22d6
+# github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37
 ## explicit; go 1.12
 github.com/jesseduffield/gocui
 # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
@@ -210,7 +210,7 @@ github.com/mattn/go-colorable
 # github.com/mattn/go-isatty v0.0.14
 ## explicit; go 1.12
 github.com/mattn/go-isatty
-# github.com/mattn/go-runewidth v0.0.13
+# github.com/mattn/go-runewidth v0.0.14
 ## explicit; go 1.9
 github.com/mattn/go-runewidth
 # github.com/mgutz/str v1.2.0
@@ -291,14 +291,14 @@ golang.org/x/exp/slices
 golang.org/x/net/context
 golang.org/x/net/internal/socks
 golang.org/x/net/proxy
-# golang.org/x/sys v0.0.0-20220915200043-7b5979e65e41
+# golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8
 ## explicit; go 1.17
 golang.org/x/sys/cpu
 golang.org/x/sys/internal/unsafeheader
 golang.org/x/sys/plan9
 golang.org/x/sys/unix
 golang.org/x/sys/windows
-# golang.org/x/term v0.0.0-20220722155259-a9ba230a4035
+# golang.org/x/term v0.0.0-20220919170432-7a66f970e087
 ## explicit; go 1.17
 golang.org/x/term
 # golang.org/x/text v0.3.7

From 212e19f598e9ea96939959f55a2cf7c422721212 Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Fri, 23 Sep 2022 20:04:39 +0900
Subject: [PATCH 25/44] feat: add support for emacs keybindings

---
 pkg/gui/editors.go | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/pkg/gui/editors.go b/pkg/gui/editors.go
index 6f40c6d58..2fd606a3b 100644
--- a/pkg/gui/editors.go
+++ b/pkg/gui/editors.go
@@ -38,10 +38,16 @@ func (gui *Gui) handleEditorKeypress(textArea *gocui.TextArea, key gocui.Key, ch
 		textArea.ToggleOverwrite()
 	case key == gocui.KeyCtrlU:
 		textArea.DeleteToStartOfLine()
+	case key == gocui.KeyCtrlK:
+		textArea.DeleteToEndOfLine()
 	case key == gocui.KeyCtrlA || key == gocui.KeyHome:
 		textArea.GoToStartOfLine()
 	case key == gocui.KeyCtrlE || key == gocui.KeyEnd:
 		textArea.GoToEndOfLine()
+	case key == gocui.KeyCtrlW:
+		textArea.BackSpaceWord()
+	case key == gocui.KeyCtrlY:
+		textArea.Yank()
 
 		// TODO: see if we need all three of these conditions: maybe the final one is sufficient
 	case ch != 0 && mod == 0 && unicode.IsPrint(ch):

From e00118376879e7be6633620a8e81c81148027540 Mon Sep 17 00:00:00 2001
From: README-bot <actions@users.noreply.github.com>
Date: Sat, 24 Sep 2022 02:27:14 +0000
Subject: [PATCH 26/44] Updated README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 2d03f5b94..ca8ae2243 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ A simple terminal UI for git commands, written in Go with the [gocui](https://gi
 </p>
 
 <p align="center">
-<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/kristijanhusak"><img src="https://github.com/kristijanhusak.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/zeevro"><img src="https://github.com/zeevro.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/bastianwegge"><img src="https://github.com/bastianwegge.png" width="60px" alt="" /></a><a href="https://github.com/m-vandeneede"><img src="https://github.com/m-vandeneede.png" width="60px" alt="" /></a><a href="https://github.com/henry174Ajou"><img src="https://github.com/henry174Ajou.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/bastianwegge"><img src="https://github.com/bastianwegge.png" width="60px" alt="" /></a><a href="https://github.com/m-vandeneede"><img src="https://github.com/m-vandeneede.png" width="60px" alt="" /></a><a href="https://github.com/henry174Ajou"><img src="https://github.com/henry174Ajou.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><!-- sponsors -->
 </p>
 
 ## Elevator Pitch

From 17df42e517cd66331f5680bb0622bbf18cdaee5f Mon Sep 17 00:00:00 2001
From: kawaemon <me@kawaemon.dev>
Date: Sun, 26 Dec 2021 04:35:04 +0900
Subject: [PATCH 27/44] fix: scan to buffer to empty character input in stdin

---
 pkg/gui/gui.go | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index f499ef367..6ab2a916b 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -662,7 +662,10 @@ func (gui *Gui) runSubprocess(cmdObj oscommands.ICmdObj) error { //nolint:unpara
 
 	if gui.Config.GetUserConfig().PromptToReturnFromSubprocess {
 		fmt.Fprintf(os.Stdout, "\n%s", style.FgGreen.Sprint(gui.Tr.PressEnterToReturn))
-		fmt.Scanln() // wait for enter press
+
+		// scan to buffer to prevent run unintentional operations when TUI resumes.
+		var buffer string
+		fmt.Scanln(&buffer) // wait for enter press
 	}
 
 	return err

From 41f86f65353e2e73545103ebcf87d86e29d08a1e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= <luka.markusic@microblink.com>
Date: Sat, 10 Sep 2022 07:35:10 +0200
Subject: [PATCH 28/44] Rebase merges by default

---
 pkg/commands/git_commands/rebase.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go
index 9a8f94618..11c187f36 100644
--- a/pkg/commands/git_commands/rebase.go
+++ b/pkg/commands/git_commands/rebase.go
@@ -255,7 +255,7 @@ func (self *RebaseCommands) SquashAllAboveFixupCommits(sha string) error {
 	return self.runSkipEditorCommand(
 		self.cmd.New(
 			fmt.Sprintf(
-				"git rebase --interactive --autostash --autosquash %s^",
+				"git rebase --interactive --rebase-merges --autostash --autosquash %s^",
 				sha,
 			),
 		),

From 4c7d363959287031453354f547a97a2658208c8c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= <luka.markusic@microblink.com>
Date: Sat, 10 Sep 2022 17:00:19 +0200
Subject: [PATCH 29/44] Add CheckoutBranch and Merge helpers for integration
 tests

---
 pkg/integration/components/shell.go | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 458528be7..6595b1e87 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -63,6 +63,10 @@ func (s *Shell) Checkout(name string) *Shell {
 	return s.RunCommand("git checkout " + name)
 }
 
+func (s *Shell) Merge(name string) *Shell {
+	return s.RunCommand("git merge --commit " + name)
+}
+
 func (s *Shell) GitAdd(path string) *Shell {
 	return s.RunCommand(fmt.Sprintf("git add \"%s\"", path))
 }

From 0141bbde0e774de29c0e73e54d23c2c211f59cce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luka=20Marku=C5=A1i=C4=87?= <luka.markusic@microblink.com>
Date: Sat, 10 Sep 2022 17:00:40 +0200
Subject: [PATCH 30/44] Add test for amending a merge commit

---
 pkg/integration/components/shell.go           |   2 +-
 .../tests/interactive_rebase/amend_merge.go   |  37 ++++++++++++++++++
 pkg/integration/tests/tests.go                |   1 +
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   1 +
 .../expected/repo/.git_keep/FETCH_HEAD        |   0
 .../amend_merge/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 +
 .../amend_merge/expected/repo/.git_keep/index | Bin 0 -> 286 bytes
 .../expected/repo/.git_keep/info/exclude      |   6 +++
 .../expected/repo/.git_keep/logs/HEAD         |   5 +++
 .../logs/refs/heads/development-branch        |   2 +
 .../.git_keep/logs/refs/heads/feature-branch  |   2 +
 .../30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d | Bin 0 -> 93 bytes
 .../47/d2739ba2c34690248c8f91b84bb54e8936899a | Bin 0 -> 27 bytes
 .../48/9361eca1233745c15acc9381322e97b4d44b57 | Bin 0 -> 57 bytes
 .../5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f |   2 +
 .../6b/584e8ece562ebffc15d38808cd6b98fc3d97ea | Bin 0 -> 22 bytes
 .../77/e1bb1effc5857c4d701219a001823432e3586d |   1 +
 .../a6/9464e3729a09e3a526d4a2db209ee43e64ba1c |   2 +
 .../.git_keep/refs/heads/development-branch   |   1 +
 .../repo/.git_keep/refs/heads/feature-branch  |   1 +
 .../amend_merge/expected/repo/initial-file    |   1 +
 .../expected/repo/new-feature-file            |   1 +
 .../amend_merge/expected/repo/post-merge-file |   1 +
 26 files changed, 78 insertions(+), 1 deletion(-)
 create mode 100644 pkg/integration/tests/interactive_rebase/amend_merge.go
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/FETCH_HEAD
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file

diff --git a/pkg/integration/components/shell.go b/pkg/integration/components/shell.go
index 6595b1e87..5f7fef350 100644
--- a/pkg/integration/components/shell.go
+++ b/pkg/integration/components/shell.go
@@ -64,7 +64,7 @@ func (s *Shell) Checkout(name string) *Shell {
 }
 
 func (s *Shell) Merge(name string) *Shell {
-	return s.RunCommand("git merge --commit " + name)
+	return s.RunCommand("git merge --commit --no-ff " + name)
 }
 
 func (s *Shell) GitAdd(path string) *Shell {
diff --git a/pkg/integration/tests/interactive_rebase/amend_merge.go b/pkg/integration/tests/interactive_rebase/amend_merge.go
new file mode 100644
index 000000000..d1b295cff
--- /dev/null
+++ b/pkg/integration/tests/interactive_rebase/amend_merge.go
@@ -0,0 +1,37 @@
+package interactive_rebase
+
+import (
+	"github.com/jesseduffield/lazygit/pkg/config"
+	. "github.com/jesseduffield/lazygit/pkg/integration/components"
+)
+
+var AmendMerge = NewIntegrationTest(NewIntegrationTestArgs{
+	Description:  "Amends a staged file to a merge commit.",
+	ExtraCmdArgs: "",
+	Skip:         false,
+	SetupConfig:  func(config *config.AppConfig) {},
+	SetupRepo: func(shell *Shell) {
+		shell.
+			NewBranch("development-branch").
+			CreateFileAndAdd("initial-file", "content").
+			Commit("initial commit").
+			NewBranch("feature-branch"). // it's also checked out automatically
+			CreateFileAndAdd("new-feature-file", "new content").
+			Commit("new feature commit").
+			CheckoutBranch("development-branch").
+			Merge("feature-branch").
+			CreateFileAndAdd("post-merge-file", "content")
+	},
+	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
+		assert.CommitCount(3)
+
+		input.SwitchToCommitsWindow()
+		assert.CurrentViewName("commits")
+
+		input.PressKeys(keys.Commits.AmendToCommit)
+		input.PressKeys(keys.Universal.Return)
+
+		assert.MatchHeadCommitMessage(Contains("Merge"))
+		assert.CommitCount(3)
+	},
+})
diff --git a/pkg/integration/tests/tests.go b/pkg/integration/tests/tests.go
index eb2fd83fa..d59177c7e 100644
--- a/pkg/integration/tests/tests.go
+++ b/pkg/integration/tests/tests.go
@@ -29,6 +29,7 @@ var tests = []*components.IntegrationTest{
 	branch.Rebase,
 	branch.RebaseAndDrop,
 	interactive_rebase.One,
+	interactive_rebase.AmendMerge,
 	custom_commands.Basic,
 	custom_commands.MultiplePrompts,
 	custom_commands.MenuFromCommand,
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
new file mode 100644
index 000000000..857a5998b
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -0,0 +1 @@
+new feature commit
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/FETCH_HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/FETCH_HEAD
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD
new file mode 100644
index 000000000..dbe0904e2
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/HEAD
@@ -0,0 +1 @@
+ref: refs/heads/development-branch
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
new file mode 100644
index 000000000..6b03146bc
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
@@ -0,0 +1 @@
+a69464e3729a09e3a526d4a2db209ee43e64ba1c
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
new file mode 100644
index 000000000..8a266ea88
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
@@ -0,0 +1,10 @@
+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[user]
+	email = CI@example.com
+	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description
new file mode 100644
index 000000000..498b267a8
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/description
@@ -0,0 +1 @@
+Unnamed repository; edit this file 'description' to name the repository.
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index
new file mode 100644
index 0000000000000000000000000000000000000000..02e2692f47fedb6a6fb436d06aa938672bb4929f
GIT binary patch
literal 286
zcmZ?q402{*U|<4b=46@G&l&#zE``xRF)7C7@9P*C8kYd2UqCPedv=6h-?=co{eMI+
zcW|7|p7F<a`YQ&W%)HE!%)}hsw9K4TpiUqFnZuOA@(M-+g+S&3%|bDc+x=4U>_vy&
zCaCoEPu$_X)vwd6a~6X@UTV2+T54iRX;CWFOt3lA9&UosQ1jNKnTOqd`~~^NCAzt(
sMd>i(7(#+vU4dq>G3Xj97;rTo(myx-@JYEseYd~6mq>n!4^GJj0JzX)?*IS*

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
new file mode 100644
index 000000000..a5196d1be
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
@@ -0,0 +1,6 @@
+# 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]
+# *~
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
new file mode 100644
index 000000000..8f516843a
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
@@ -0,0 +1,5 @@
+0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	commit (initial): initial commit
+a69464e3729a09e3a526d4a2db209ee43e64ba1c a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	checkout: moving from development-branch to feature-branch
+a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI <CI@example.com> 1662823399 +0200	commit: new feature commit
+5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	checkout: moving from feature-branch to development-branch
+a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI <CI@example.com> 1662823399 +0200	merge feature-branch: Merge made by the 'ort' strategy.
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
new file mode 100644
index 000000000..e191d45d0
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	commit (initial): initial commit
+a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI <CI@example.com> 1662823399 +0200	merge feature-branch: Merge made by the 'ort' strategy.
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
new file mode 100644
index 000000000..0825e687b
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
@@ -0,0 +1,2 @@
+0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	branch: Created from HEAD
+a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI <CI@example.com> 1662823399 +0200	commit: new feature commit
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d
new file mode 100644
index 0000000000000000000000000000000000000000..3b87e38964f0ee0bef41a17b53341dcc85ff690d
GIT binary patch
literal 93
zcmV-j0HXhR0V^p=O;xZkVK6i>Ff%bx$jr+u$xO`AP0P$lWyp^3>pK^wxBrjm<qnRs
z*)#swPJabemzP?uo0ghbQd*P>QR{xGc=n>hZWB~``X}!2-s;zB);S9R8;m51B-k!=

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/47/d2739ba2c34690248c8f91b84bb54e8936899a
new file mode 100644
index 0000000000000000000000000000000000000000..c416a87e05b83ccdacb2040539807f0853995be9
GIT binary patch
literal 27
icmb<m^geacKghr&<%G9xxW~Ek+MZ{%85wM)*xCV-m<f&m

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57
new file mode 100644
index 0000000000000000000000000000000000000000..4ac136337e1d4823579eb6130bf93528e8016ad1
GIT binary patch
literal 57
zcmV-90LK4#0V^p=O;s>4U@$Z=Ff%bx$jr+u$xO`AP0P$lWyp^3>pK^wxBrjm<qnRs
P*)#swPJaaee}NL|xGoy}

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
new file mode 100644
index 000000000..7d41ab0db
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
@@ -0,0 +1,2 @@
+x��K
+�@]�)z/H�g�ɀ��U�љ�A�|�����WT�K�4=	ק��YR���-1l�R46����9��V�02�A|#�8�[-:�q�c"xh�J���X6�z�v���.i�nT�J+��Hgfw��T�����+������?>
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea
new file mode 100644
index 0000000000000000000000000000000000000000..ec9764eae7ae13711d9505390685b84b0bafd229
GIT binary patch
literal 22
dcmb<m^geacKgb~6<J@^|&$HT$49d<dp8#a02tEJ+

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
new file mode 100644
index 000000000..7b142c36d
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
@@ -0,0 +1 @@
+x���j1ES�W�s�3�Y	B0�r���]��!�|~��)Ͻ�9���9��U��'�"c`V�Px-�`�|1��|��mZ�4����HI}�@��R�hG��I{��i�F�y ���J?zf2s$���]��Ng�v:��vë���E(sJ�ٓ�ݾ�
�Ի�O���bw(�v�x�჻.mu��m�����Z0
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
new file mode 100644
index 000000000..ae807eb94
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
@@ -0,0 +1,2 @@
+x��K
+�0@]��$���]��8`�1�D��
x���x�j-�ѥ"`c"��
Q���e�D�Ia�OkWT��W;`^�>/9s�7�q���&�<%�j��tL�����.��
~���.�
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
new file mode 100644
index 000000000..e51ee7bdf
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
@@ -0,0 +1 @@
+77e1bb1effc5857c4d701219a001823432e3586d
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
new file mode 100644
index 000000000..e80dfebb2
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
@@ -0,0 +1 @@
+5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
new file mode 100644
index 000000000..6b584e8ec
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
@@ -0,0 +1 @@
+content
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file
new file mode 100644
index 000000000..47d2739ba
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/new-feature-file
@@ -0,0 +1 @@
+new content
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file
new file mode 100644
index 000000000..6b584e8ec
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file
@@ -0,0 +1 @@
+content
\ No newline at end of file

From 23d39c79b2ea59ef061906c5f0735efbaf9033ef Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sat, 17 Sep 2022 11:58:24 -0700
Subject: [PATCH 31/44] update test

---
 pkg/integration/components/input.go           |   6 +++++
 .../tests/interactive_rebase/amend_merge.go   |  25 +++++++++++++-----
 .../expected/repo/.git_keep/COMMIT_EDITMSG    |   2 +-
 .../expected/repo/.git_keep/ORIG_HEAD         |   2 +-
 .../expected/repo/.git_keep/config            |   2 ++
 .../amend_merge/expected/repo/.git_keep/index | Bin 286 -> 305 bytes
 .../expected/repo/.git_keep/info/exclude      |   1 +
 .../expected/repo/.git_keep/logs/HEAD         |  17 ++++++++----
 .../logs/refs/heads/development-branch        |   6 +++--
 .../.git_keep/logs/refs/heads/feature-branch  |   4 +--
 .../30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d | Bin 93 -> 0 bytes
 .../34/9e7420fb0fcc3ff740eae5b9dc103a1261558e | Bin 0 -> 128 bytes
 .../3a/d14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 | Bin 0 -> 123 bytes
 .../3f/891fb57220f67735a13cb5a65d27c8ad388030 | Bin 0 -> 57 bytes
 .../48/9361eca1233745c15acc9381322e97b4d44b57 | Bin 57 -> 0 bytes
 .../5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f |   2 --
 .../63/e06ef6d5baa80461d12e953ee7e75444180d8f | Bin 0 -> 39 bytes
 .../6b/584e8ece562ebffc15d38808cd6b98fc3d97ea | Bin 22 -> 0 bytes
 .../77/e1bb1effc5857c4d701219a001823432e3586d |   1 -
 .../78/02c86c6ce62289e32aa13d0c85dc3f733195cb |   2 ++
 .../7a/02580e6e6ba96ea8fb9c7ebad7d03d00ec0643 | Bin 0 -> 36 bytes
 .../7b/d422e3608d9bcfeef85748c90a5ec114fc2c17 | Bin 0 -> 93 bytes
 .../a6/9464e3729a09e3a526d4a2db209ee43e64ba1c |   2 --
 .../d1/c7801838f293fe8f4b49dae6b4919d0359e6e6 | Bin 0 -> 154 bytes
 .../f5/17de66e2a158d4a1d85246611cae9ca23a938d |   2 ++
 .../f6/8c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 |   2 ++
 .../.git_keep/refs/heads/development-branch   |   2 +-
 .../repo/.git_keep/refs/heads/feature-branch  |   2 +-
 .../amend_merge/expected/repo/initial-file    |   2 +-
 .../amend_merge/expected/repo/post-merge-file |   2 +-
 30 files changed, 58 insertions(+), 26 deletions(-)
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/34/9e7420fb0fcc3ff740eae5b9dc103a1261558e
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3a/d14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3f/891fb57220f67735a13cb5a65d27c8ad388030
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/63/e06ef6d5baa80461d12e953ee7e75444180d8f
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/78/02c86c6ce62289e32aa13d0c85dc3f733195cb
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7a/02580e6e6ba96ea8fb9c7ebad7d03d00ec0643
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7b/d422e3608d9bcfeef85748c90a5ec114fc2c17
 delete mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/d1/c7801838f293fe8f4b49dae6b4919d0359e6e6
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f5/17de66e2a158d4a1d85246611cae9ca23a938d
 create mode 100644 test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f6/8c5b48c653ca6ab23abd7606fe8fa8cc8d5b15

diff --git a/pkg/integration/components/input.go b/pkg/integration/components/input.go
index 61c78e9eb..61b0f771f 100644
--- a/pkg/integration/components/input.go
+++ b/pkg/integration/components/input.go
@@ -76,6 +76,12 @@ func (self *Input) Confirm() {
 	self.pressKey(self.keys.Universal.Confirm)
 }
 
+func (self *Input) ProceedWhenAsked(matcher *matcher) {
+	self.assert.InConfirm()
+	self.assert.MatchCurrentViewContent(matcher)
+	self.Confirm()
+}
+
 // i.e. same as Confirm
 func (self *Input) Enter() {
 	self.pressKey(self.keys.Universal.Confirm)
diff --git a/pkg/integration/tests/interactive_rebase/amend_merge.go b/pkg/integration/tests/interactive_rebase/amend_merge.go
index d1b295cff..e01e79a78 100644
--- a/pkg/integration/tests/interactive_rebase/amend_merge.go
+++ b/pkg/integration/tests/interactive_rebase/amend_merge.go
@@ -5,6 +5,11 @@ import (
 	. "github.com/jesseduffield/lazygit/pkg/integration/components"
 )
 
+var (
+	postMergeFileContent = "post merge file content"
+	postMergeFilename    = "post-merge-file"
+)
+
 var AmendMerge = NewIntegrationTest(NewIntegrationTestArgs{
 	Description:  "Amends a staged file to a merge commit.",
 	ExtraCmdArgs: "",
@@ -13,14 +18,14 @@ var AmendMerge = NewIntegrationTest(NewIntegrationTestArgs{
 	SetupRepo: func(shell *Shell) {
 		shell.
 			NewBranch("development-branch").
-			CreateFileAndAdd("initial-file", "content").
+			CreateFileAndAdd("initial-file", "initial file content").
 			Commit("initial commit").
 			NewBranch("feature-branch"). // it's also checked out automatically
 			CreateFileAndAdd("new-feature-file", "new content").
 			Commit("new feature commit").
-			CheckoutBranch("development-branch").
+			Checkout("development-branch").
 			Merge("feature-branch").
-			CreateFileAndAdd("post-merge-file", "content")
+			CreateFileAndAdd(postMergeFilename, postMergeFileContent)
 	},
 	Run: func(shell *Shell, input *Input, assert *Assert, keys config.KeybindingConfig) {
 		assert.CommitCount(3)
@@ -28,10 +33,18 @@ var AmendMerge = NewIntegrationTest(NewIntegrationTestArgs{
 		input.SwitchToCommitsWindow()
 		assert.CurrentViewName("commits")
 
-		input.PressKeys(keys.Commits.AmendToCommit)
-		input.PressKeys(keys.Universal.Return)
+		mergeCommitMessage := "Merge branch 'feature-branch' into development-branch"
+		assert.MatchHeadCommitMessage(Contains(mergeCommitMessage))
 
-		assert.MatchHeadCommitMessage(Contains("Merge"))
+		input.PressKeys(keys.Commits.AmendToCommit)
+		input.ProceedWhenAsked(Contains("Are you sure you want to amend this commit with your staged files?"))
+
+		// assuring we haven't added a brand new commit
 		assert.CommitCount(3)
+		assert.MatchHeadCommitMessage(Contains(mergeCommitMessage))
+
+		// assuring the post-merge file shows up in the merge commit.
+		assert.MatchMainViewContent(Contains(postMergeFilename))
+		assert.MatchMainViewContent(Contains("++" + postMergeFileContent))
 	},
 })
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
index 857a5998b..de6160af5 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/COMMIT_EDITMSG
@@ -1 +1 @@
-new feature commit
+fixup! Merge branch 'feature-branch' into development-branch
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
index 6b03146bc..4829a07d0 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/ORIG_HEAD
@@ -1 +1 @@
-a69464e3729a09e3a526d4a2db209ee43e64ba1c
+7802c86c6ce62289e32aa13d0c85dc3f733195cb
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
index 8a266ea88..8a748ce32 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/config
@@ -3,6 +3,8 @@
 	filemode = true
 	bare = false
 	logallrefupdates = true
+	ignorecase = true
+	precomposeunicode = true
 [user]
 	email = CI@example.com
 	name = CI
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/index
index 02e2692f47fedb6a6fb436d06aa938672bb4929f..01d1d03a330ea96f731b83814d0c29100ce2253c 100644
GIT binary patch
literal 305
zcmZ?q402{*U|<4b=43Uo93|hXZWztTz`)8<;JTK9p>YWV1LIeq8W9k#Vv69)%U+qc
z;`f}oUDq$zGQ44PX5h)p%Ph%E%+XED%t-~R0s^2pdCYDq0x%k4o|`|KdED-oif1o6
z>^4EAr+?xO@2!5FW}UMb1oBeLb<<K4OG=AUp=N^3DM(O<(NOcE(99E0evtR=>aG<m
zi5K;z+C6_B;v&J@&%j@hUtFS_n_83(Gmar7$ki3-Oi2b~1p_XVc_j+J`OnyYcX;)5
h=N$nnp~TQW-d9?aoUI=%e>LY-hkGVd((S!b4*=k>Tu}f3

literal 286
zcmZ?q402{*U|<4b=46@G&l&#zE``xRF)7C7@9P*C8kYd2UqCPedv=6h-?=co{eMI+
zcW|7|p7F<a`YQ&W%)HE!%)}hsw9K4TpiUqFnZuOA@(M-+g+S&3%|bDc+x=4U>_vy&
zCaCoEPu$_X)vwd6a~6X@UTV2+T54iRX;CWFOt3lA9&UosQ1jNKnTOqd`~~^NCAzt(
sMd>i(7(#+vU4dq>G3Xj97;rTo(myx-@JYEseYd~6mq>n!4^GJj0JzX)?*IS*

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
index a5196d1be..8e9f2071f 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/info/exclude
@@ -4,3 +4,4 @@
 # exclude patterns (uncomment them if you want to use them):
 # *.[oa]
 # *~
+.DS_Store
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
index 8f516843a..bf29df758 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/HEAD
@@ -1,5 +1,12 @@
-0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	commit (initial): initial commit
-a69464e3729a09e3a526d4a2db209ee43e64ba1c a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	checkout: moving from development-branch to feature-branch
-a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI <CI@example.com> 1662823399 +0200	commit: new feature commit
-5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	checkout: moving from feature-branch to development-branch
-a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI <CI@example.com> 1662823399 +0200	merge feature-branch: Merge made by the 'ort' strategy.
+0000000000000000000000000000000000000000 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440492 -0700	commit (initial): initial commit
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440492 -0700	checkout: moving from development-branch to feature-branch
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 d1c7801838f293fe8f4b49dae6b4919d0359e6e6 CI <CI@example.com> 1663440492 -0700	commit: new feature commit
+d1c7801838f293fe8f4b49dae6b4919d0359e6e6 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440492 -0700	checkout: moving from feature-branch to development-branch
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 CI <CI@example.com> 1663440492 -0700	merge feature-branch: Merge made by the 'recursive' strategy.
+f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 7802c86c6ce62289e32aa13d0c85dc3f733195cb CI <CI@example.com> 1663440493 -0700	commit: fixup! Merge branch 'feature-branch' into development-branch
+7802c86c6ce62289e32aa13d0c85dc3f733195cb 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440494 -0700	rebase (start): checkout f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15^
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 d1c7801838f293fe8f4b49dae6b4919d0359e6e6 CI <CI@example.com> 1663440494 -0700	rebase: fast-forward
+d1c7801838f293fe8f4b49dae6b4919d0359e6e6 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440494 -0700	rebase (reset): 'onto'
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 CI <CI@example.com> 1663440494 -0700	rebase: fast-forward
+f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 f517de66e2a158d4a1d85246611cae9ca23a938d CI <CI@example.com> 1663440494 -0700	rebase (fixup): Merge branch 'feature-branch' into development-branch
+f517de66e2a158d4a1d85246611cae9ca23a938d f517de66e2a158d4a1d85246611cae9ca23a938d CI <CI@example.com> 1663440494 -0700	rebase (finish): returning to refs/heads/development-branch
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
index e191d45d0..c7353e0e3 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/development-branch
@@ -1,2 +1,4 @@
-0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	commit (initial): initial commit
-a69464e3729a09e3a526d4a2db209ee43e64ba1c 77e1bb1effc5857c4d701219a001823432e3586d CI <CI@example.com> 1662823399 +0200	merge feature-branch: Merge made by the 'ort' strategy.
+0000000000000000000000000000000000000000 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440492 -0700	commit (initial): initial commit
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 CI <CI@example.com> 1663440492 -0700	merge feature-branch: Merge made by the 'recursive' strategy.
+f68c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 7802c86c6ce62289e32aa13d0c85dc3f733195cb CI <CI@example.com> 1663440493 -0700	commit: fixup! Merge branch 'feature-branch' into development-branch
+7802c86c6ce62289e32aa13d0c85dc3f733195cb f517de66e2a158d4a1d85246611cae9ca23a938d CI <CI@example.com> 1663440494 -0700	rebase (finish): refs/heads/development-branch onto 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
index 0825e687b..2d2177acc 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/logs/refs/heads/feature-branch
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 a69464e3729a09e3a526d4a2db209ee43e64ba1c CI <CI@example.com> 1662823399 +0200	branch: Created from HEAD
-a69464e3729a09e3a526d4a2db209ee43e64ba1c 5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f CI <CI@example.com> 1662823399 +0200	commit: new feature commit
+0000000000000000000000000000000000000000 3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 CI <CI@example.com> 1663440492 -0700	branch: Created from HEAD
+3ad14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 d1c7801838f293fe8f4b49dae6b4919d0359e6e6 CI <CI@example.com> 1663440492 -0700	commit: new feature commit
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/30/2ccf67433ac0eae0af16e7ad84e0fca8690f2d
deleted file mode 100644
index 3b87e38964f0ee0bef41a17b53341dcc85ff690d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 93
zcmV-j0HXhR0V^p=O;xZkVK6i>Ff%bx$jr+u$xO`AP0P$lWyp^3>pK^wxBrjm<qnRs
z*)#swPJabemzP?uo0ghbQd*P>QR{xGc=n>hZWB~``X}!2-s;zB);S9R8;m51B-k!=

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/34/9e7420fb0fcc3ff740eae5b9dc103a1261558e b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/34/9e7420fb0fcc3ff740eae5b9dc103a1261558e
new file mode 100644
index 0000000000000000000000000000000000000000..5f350fcff7689be1cedb988a54cbb6af10f32e89
GIT binary patch
literal 128
zcmV-`0Du2@0V^p=O;s>7GG{O}FfcPQQOL~8EXhpF(M`+DNoA;Fir~x3UYWPz_nf+2
z*Du&IykT>Os>@3)*G)@JEGaEYg{XDER6KjpVYdk?J^d4RcyIOVH0zuNRa=l>T%wzs
iT9gh|n*1Q|+tpnwSQ0PlO|^UeJj6wUw;upBfi$|t^*itY

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3a/d14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3a/d14f8b4ed479f2fd9d8d4f7fe2a9913771b7f3
new file mode 100644
index 0000000000000000000000000000000000000000..0ac8eaeca224797ad80ebd692f5aa059808274c2
GIT binary patch
literal 123
zcmV->0EGW|0ga7Y3c@fD0R7G>_5#W#n^!@k(61h2n<f}&jFc66d<$N{-(iMHy|pT!
z9bIJ48K}fTm&FBRu=o(jv8J>*_HH#HMP4aJBvky7XWwC(;Xch{KDfQNd`rDOKzmQt
dq8$ueF(9gwo)gJ`>Z-n~RNmm%sV^6QF79mQIuQT>

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3f/891fb57220f67735a13cb5a65d27c8ad388030 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/3f/891fb57220f67735a13cb5a65d27c8ad388030
new file mode 100644
index 0000000000000000000000000000000000000000..057b302dc63b77dfa185ad0b0bbeda88f7ded413
GIT binary patch
literal 57
zcmV-90LK4#0V^p=O;s>4U@$Z=Ff%bx$jr+u$xO`AP0P$lWvF6`;LFQinYZHioVs1t
PFW54?VRHrmc8U?5wZ$4+

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/48/9361eca1233745c15acc9381322e97b4d44b57
deleted file mode 100644
index 4ac136337e1d4823579eb6130bf93528e8016ad1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 57
zcmV-90LK4#0V^p=O;s>4U@$Z=Ff%bx$jr+u$xO`AP0P$lWyp^3>pK^wxBrjm<qnRs
P*)#swPJaaee}NL|xGoy}

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
deleted file mode 100644
index 7d41ab0db..000000000
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/5e/62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K
-�@]�)z/H�g�ɀ��U�љ�A�|�����WT�K�4=	ק��YR���-1l�R46����9��V�02�A|#�8�[-:�q�c"xh�J���X6�z�v���.i�nT�J+��Hgfw��T�����+������?>
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/63/e06ef6d5baa80461d12e953ee7e75444180d8f b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/63/e06ef6d5baa80461d12e953ee7e75444180d8f
new file mode 100644
index 0000000000000000000000000000000000000000..21a235054c0b5ff6bb0d831eaa312997128fb477
GIT binary patch
literal 39
vcmb<m^geacKghr+P2+^VUf>B|T`&JokJD#7Lp{!&*Y-TC&B(AUit8HyEpHEA

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/6b/584e8ece562ebffc15d38808cd6b98fc3d97ea
deleted file mode 100644
index ec9764eae7ae13711d9505390685b84b0bafd229..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22
dcmb<m^geacKgb~6<J@^|&$HT$49d<dp8#a02tEJ+

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
deleted file mode 100644
index 7b142c36d..000000000
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/77/e1bb1effc5857c4d701219a001823432e3586d
+++ /dev/null
@@ -1 +0,0 @@
-x���j1ES�W�s�3�Y	B0�r���]��!�|~��)Ͻ�9���9��U��'�"c`V�Px-�`�|1��|��mZ�4����HI}�@��R�hG��I{��i�F�y ���J?zf2s$���]��Ng�v:��vë���E(sJ�ٓ�ݾ�
�Ի�O���bw(�v�x�჻.mu��m�����Z0
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/78/02c86c6ce62289e32aa13d0c85dc3f733195cb b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/78/02c86c6ce62289e32aa13d0c85dc3f733195cb
new file mode 100644
index 000000000..e99473942
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/78/02c86c6ce62289e32aa13d0c85dc3f733195cb
@@ -0,0 +1,2 @@
+x��Mj�0F��)���R$��J �,z��x�1D�r��kh���޷xTK�;.~��֍ݠ%k!�"�iF�y��h�f���j��K	�|v�����`1O1� �Q�|6^��o���
+����O,띿��o0!X�-u�Z����ͻ��������!7\�a�[��?`^z��|�k��_B���N�
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7a/02580e6e6ba96ea8fb9c7ebad7d03d00ec0643 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7a/02580e6e6ba96ea8fb9c7ebad7d03d00ec0643
new file mode 100644
index 0000000000000000000000000000000000000000..c30233de17aa43a1c80be7ab20fc51d5103224b7
GIT binary patch
literal 36
scmb<m^geacKghr+;l!EKIwyV31bUo4;~DC4?!30=S#3s!_Pw0X0W!-FdjJ3c

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7b/d422e3608d9bcfeef85748c90a5ec114fc2c17 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/7b/d422e3608d9bcfeef85748c90a5ec114fc2c17
new file mode 100644
index 0000000000000000000000000000000000000000..0b10fcf3ffe56ef4b20ea3ad65b3074f61e89e02
GIT binary patch
literal 93
zcmV-j0HXhR0V^p=O;xZkVK6i>Ff%bx$jr+u$xO`AP0P$lWvF6`;LFQinYZHioVs1t
zFW54?VRMG6%S$cSO-oHIDJ@EcsCB<oJbTe$w+Sje{S$Y1Z}sam>zoAu*>)p7;leAW

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
deleted file mode 100644
index ae807eb94..000000000
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/a6/9464e3729a09e3a526d4a2db209ee43e64ba1c
+++ /dev/null
@@ -1,2 +0,0 @@
-x��K
-�0@]��$���]��8`�1�D��
x���x�j-�ѥ"`c"��
Q���e�D�Ia�OkWT��W;`^�>/9s�7�q���&�<%�j��tL�����.��
~���.�
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/d1/c7801838f293fe8f4b49dae6b4919d0359e6e6 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/d1/c7801838f293fe8f4b49dae6b4919d0359e6e6
new file mode 100644
index 0000000000000000000000000000000000000000..abe014bbcd74657bfb18ee1fa5645b48d85895a0
GIT binary patch
literal 154
zcmV;L0A>Gp0gaAZ3c@fD0R7G>_5w;C+in6PLce;9Ja$nqZ3!uQd<$N{-(dzOueClq
zSUsG2V+KkEtz|cAUqZ^lEPf#LIp{cWHU=fzY)Eaf@zTM?av-0O3sMj(B@|y!NZ7^@
zj3Y9M#HqOV$J$_;;X2KC{=~Yy_>$Lp12c{eQDd-h)}*yM=rPs#PhBni2I1KE#_(&^
I7yqa~ae(kg&j0`b

literal 0
HcmV?d00001

diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f5/17de66e2a158d4a1d85246611cae9ca23a938d b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f5/17de66e2a158d4a1d85246611cae9ca23a938d
new file mode 100644
index 000000000..3d42ec640
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f5/17de66e2a158d4a1d85246611cae9ca23a938d
@@ -0,0 +1,2 @@
+x���jAD�Wt�Hf��9@�"��9�-�fwFƟ�˱���^����m�	�et�,Gx6J��R��g��9�Z��I��9`�R�2Ȧ�YBfT�Q��XCe��b��{���?�����1�
+�p�X�:Ve�7�Ǹ���:�/��Nm�㵬퍴s�Yq4tT^�i_w��p~���'(���+i<:���@�e�T������yL?2#Y|
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f6/8c5b48c653ca6ab23abd7606fe8fa8cc8d5b15 b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f6/8c5b48c653ca6ab23abd7606fe8fa8cc8d5b15
new file mode 100644
index 000000000..72c90791a
--- /dev/null
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/objects/f6/8c5b48c653ca6ab23abd7606fe8fa8cc8d5b15
@@ -0,0 +1,2 @@
+x���jC1DS߯�Ε�kiB�r����������C>?�����9�i�<����U!W�4&Gµ���)#5v��{����V�.b�}��*�ق		Z6
��ǜ}��x�-���GS2��R4��Y\<�&MSy����|����M�ʼ�����+��"�Cptٹi_w���ħw�
+���]�`Zƣ��ඌD?��n���{L�r[Y�
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
index e51ee7bdf..8dec112d4 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/development-branch
@@ -1 +1 @@
-77e1bb1effc5857c4d701219a001823432e3586d
+f517de66e2a158d4a1d85246611cae9ca23a938d
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
index e80dfebb2..61eacdc31 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/.git_keep/refs/heads/feature-branch
@@ -1 +1 @@
-5e62a9dc2e1352e7ee6ecf17033e2ed3382efc6f
+d1c7801838f293fe8f4b49dae6b4919d0359e6e6
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
index 6b584e8ec..7a02580e6 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/initial-file
@@ -1 +1 @@
-content
\ No newline at end of file
+initial file content
\ No newline at end of file
diff --git a/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file
index 6b584e8ec..63e06ef6d 100644
--- a/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file
+++ b/test/integration_new/interactive_rebase/amend_merge/expected/repo/post-merge-file
@@ -1 +1 @@
-content
\ No newline at end of file
+post merge file content
\ No newline at end of file

From 19df238b7792e8b7c7cf1889583ed45d786e1c7b Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Fri, 30 Sep 2022 21:10:56 +0900
Subject: [PATCH 32/44] feat: allow `OSCommand.Quote` to be invoked within a
 custom command

---
 docs/Custom_Command_Keybindings.md              |  2 +-
 .../services/custom_commands/handler_creator.go |  7 ++++++-
 pkg/gui/services/custom_commands/resolver.go    | 17 -----------------
 pkg/utils/template.go                           |  4 ++--
 4 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/docs/Custom_Command_Keybindings.md b/docs/Custom_Command_Keybindings.md
index ca966799e..09708d54c 100644
--- a/docs/Custom_Command_Keybindings.md
+++ b/docs/Custom_Command_Keybindings.md
@@ -8,7 +8,7 @@ customCommands:
     command: 'hub browse -- "commit/{{.SelectedLocalCommit.Sha}}"'
     context: 'commits'
   - key: 'a'
-    command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name}}"
+    command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name | Quote}}"
     context: 'files'
     description: 'toggle file staged'
   - key: 'C'
diff --git a/pkg/gui/services/custom_commands/handler_creator.go b/pkg/gui/services/custom_commands/handler_creator.go
index 839f70adf..9b30041e3 100644
--- a/pkg/gui/services/custom_commands/handler_creator.go
+++ b/pkg/gui/services/custom_commands/handler_creator.go
@@ -2,6 +2,7 @@ package custom_commands
 
 import (
 	"strings"
+	"text/template"
 
 	"github.com/jesseduffield/generics/slices"
 	"github.com/jesseduffield/lazygit/pkg/commands"
@@ -166,7 +167,11 @@ func (self *HandlerCreator) getResolveTemplateFn(form map[string]string, promptR
 		Form:            form,
 	}
 
-	return func(templateStr string) (string, error) { return utils.ResolveTemplate(templateStr, objects) }
+	funcs := template.FuncMap{
+		"Quote": self.os.Quote,
+	}
+
+	return func(templateStr string) (string, error) { return utils.ResolveTemplate(templateStr, objects, funcs) }
 }
 
 func (self *HandlerCreator) finalHandler(customCommand config.CustomCommand, sessionState *SessionState, promptResponses []string, form map[string]string) error {
diff --git a/pkg/gui/services/custom_commands/resolver.go b/pkg/gui/services/custom_commands/resolver.go
index 4702d36c4..4c32a51ca 100644
--- a/pkg/gui/services/custom_commands/resolver.go
+++ b/pkg/gui/services/custom_commands/resolver.go
@@ -1,9 +1,6 @@
 package custom_commands
 
 import (
-	"bytes"
-	"text/template"
-
 	"github.com/jesseduffield/lazygit/pkg/common"
 	"github.com/jesseduffield/lazygit/pkg/config"
 )
@@ -110,17 +107,3 @@ type CustomCommandObject struct {
 	PromptResponses []string
 	Form            map[string]string
 }
-
-func ResolveTemplate(templateStr string, object interface{}) (string, error) {
-	tmpl, err := template.New("template").Parse(templateStr)
-	if err != nil {
-		return "", err
-	}
-
-	var buf bytes.Buffer
-	if err := tmpl.Execute(&buf, object); err != nil {
-		return "", err
-	}
-
-	return buf.String(), nil
-}
diff --git a/pkg/utils/template.go b/pkg/utils/template.go
index 41388ae3a..d98a68b99 100644
--- a/pkg/utils/template.go
+++ b/pkg/utils/template.go
@@ -6,8 +6,8 @@ import (
 	"text/template"
 )
 
-func ResolveTemplate(templateStr string, object interface{}) (string, error) {
-	tmpl, err := template.New("template").Option("missingkey=error").Parse(templateStr)
+func ResolveTemplate(templateStr string, object interface{}, funcs template.FuncMap) (string, error) {
+	tmpl, err := template.New("template").Funcs(funcs).Option("missingkey=error").Parse(templateStr)
 	if err != nil {
 		return "", err
 	}

From e16f1ba84f84213a8e4af4c7c4c310b8034a8ed3 Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Sat, 1 Oct 2022 20:51:44 +0900
Subject: [PATCH 33/44] test: add integration test for `Quote`

---
 .../tests/custom_commands/form_prompts.go         |  10 +++++-----
 .../expected/repo/.git_keep/commit-template.txt   |   0
 .../form_prompts/expected/repo/.git_keep/config   |   4 ++++
 .../expected/repo/.git_keep/info/exclude          |   6 ------
 .../expected/repo/.git_keep/logs/HEAD             |   2 +-
 .../repo/.git_keep/logs/refs/heads/master         |   2 +-
 .../46/87e94a43ed02b2ba08f3e6160ee22b92e64413     |   3 +++
 .../6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90     | Bin 116 -> 0 bytes
 .../expected/repo/.git_keep/refs/heads/master     |   2 +-
 .../form_prompts/expected/repo/my file            |   1 +
 .../form_prompts/expected/repo/myfile             |   1 -
 11 files changed, 16 insertions(+), 15 deletions(-)
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/commit-template.txt
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/46/87e94a43ed02b2ba08f3e6160ee22b92e64413
 delete mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
 create mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/my file
 delete mode 100644 test/integration_new/custom_commands/form_prompts/expected/repo/myfile

diff --git a/pkg/integration/tests/custom_commands/form_prompts.go b/pkg/integration/tests/custom_commands/form_prompts.go
index e4712dbcc..4148c767a 100644
--- a/pkg/integration/tests/custom_commands/form_prompts.go
+++ b/pkg/integration/tests/custom_commands/form_prompts.go
@@ -17,7 +17,7 @@ var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
 			{
 				Key:     "a",
 				Context: "files",
-				Command: `echo "{{.Form.FileContent}}" > {{.Form.FileName}}`,
+				Command: `echo {{.Form.FileContent | Quote}} > {{.Form.FileName | Quote}}`,
 				Prompts: []config.CustomCommandPrompt{
 					{
 						Key:   "FileName",
@@ -37,7 +37,7 @@ var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
 							{
 								Name:        "bar",
 								Description: "Bar",
-								Value:       "BAR",
+								Value:       `"BAR"`,
 							},
 							{
 								Name:        "baz",
@@ -67,7 +67,7 @@ var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
 
 		assert.InPrompt()
 		assert.MatchCurrentViewTitle(Equals("Enter a file name"))
-		input.Type("myfile")
+		input.Type("my file")
 		input.Confirm()
 
 		assert.InMenu()
@@ -82,7 +82,7 @@ var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
 		input.Confirm()
 
 		assert.WorkingTreeFileCount(1)
-		assert.MatchSelectedLine(Contains("myfile"))
-		assert.MatchMainViewContent(Contains("BAR"))
+		assert.MatchSelectedLine(Contains("my file"))
+		assert.MatchMainViewContent(Contains(`"BAR"`))
 	},
 })
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/commit-template.txt b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/commit-template.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
index 596ebaeb3..8a748ce32 100644
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/config
@@ -3,6 +3,10 @@
 	filemode = true
 	bare = false
 	logallrefupdates = true
+	ignorecase = true
+	precomposeunicode = true
 [user]
 	email = CI@example.com
 	name = CI
+[commit]
+	gpgSign = false
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
index a5196d1be..e69de29bb 100644
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/info/exclude
@@ -1,6 +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]
-# *~
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
index 153f2ddc4..e0854d95a 100644
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/HEAD
@@ -1 +1 @@
-0000000000000000000000000000000000000000 6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 CI <CI@example.com> 1660591942 +0000	commit (initial): blah
+0000000000000000000000000000000000000000 4687e94a43ed02b2ba08f3e6160ee22b92e64413 CI <CI@example.com> 1664625021 +0900	commit (initial): blah
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
index 153f2ddc4..e0854d95a 100644
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/logs/refs/heads/master
@@ -1 +1 @@
-0000000000000000000000000000000000000000 6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 CI <CI@example.com> 1660591942 +0000	commit (initial): blah
+0000000000000000000000000000000000000000 4687e94a43ed02b2ba08f3e6160ee22b92e64413 CI <CI@example.com> 1664625021 +0900	commit (initial): blah
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/46/87e94a43ed02b2ba08f3e6160ee22b92e64413 b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/46/87e94a43ed02b2ba08f3e6160ee22b92e64413
new file mode 100644
index 000000000..00eeb9d5f
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/46/87e94a43ed02b2ba08f3e6160ee22b92e64413
@@ -0,0 +1,3 @@
+x��1
+�0@��>��B�UY�PB S�a9
+)ĸz��]?~i��;x~��a���R�������X׸H�W5���o�i��4�����ۣ�:�a����	�]��t��;���N��+�
\ No newline at end of file
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90 b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/objects/6c/d61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
deleted file mode 100644
index 8d0c394f8aa5c739df95a23ba1821118395c1378..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 116
zcmV-)0E_>40ga783c@fD06pgwdlzIAH%k_z2tD-~*>p>VhDeFv^UV{S<1jF#)%xn-
z>3->_8IYzB*TNKvvZ-Wbv`D(8l_jLKsTm29%b&it6XpdT^YXNBuJ6NcrPT>MGe+@3
W0j@Z3!;VR}KXa!?-rWzaL@TsV7dVap

diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
index 4c2ab0871..97a2c1d6c 100644
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/.git_keep/refs/heads/master
@@ -1 +1 @@
-6cd61dc75eb17cf3e01d4d5f8f2b38a73ed9be90
+4687e94a43ed02b2ba08f3e6160ee22b92e64413
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/my file b/test/integration_new/custom_commands/form_prompts/expected/repo/my file
new file mode 100644
index 000000000..d6efee909
--- /dev/null
+++ b/test/integration_new/custom_commands/form_prompts/expected/repo/my file	
@@ -0,0 +1 @@
+"BAR"
diff --git a/test/integration_new/custom_commands/form_prompts/expected/repo/myfile b/test/integration_new/custom_commands/form_prompts/expected/repo/myfile
deleted file mode 100644
index ba578e48b..000000000
--- a/test/integration_new/custom_commands/form_prompts/expected/repo/myfile
+++ /dev/null
@@ -1 +0,0 @@
-BAR

From b0c19b291ff50575d1911d58c8d9058bef1c9db8 Mon Sep 17 00:00:00 2001
From: README-bot <actions@users.noreply.github.com>
Date: Sun, 2 Oct 2022 19:42:47 +0000
Subject: [PATCH 34/44] Updated README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index ca8ae2243..a7d707e71 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ A simple terminal UI for git commands, written in Go with the [gocui](https://gi
 </p>
 
 <p align="center">
-<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/bastianwegge"><img src="https://github.com/bastianwegge.png" width="60px" alt="" /></a><a href="https://github.com/m-vandeneede"><img src="https://github.com/m-vandeneede.png" width="60px" alt="" /></a><a href="https://github.com/henry174Ajou"><img src="https://github.com/henry174Ajou.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><a href="https://github.com/jakewarren"><img src="https://github.com/jakewarren.png" width="60px" alt="" /></a><a href="https://github.com/huettern"><img src="https://github.com/huettern.png" width="60px" alt="" /></a><a href="https://github.com/lukasjarosch"><img src="https://github.com/lukasjarosch.png" width="60px" alt="" /></a><!-- sponsors -->
 </p>
 
 ## Elevator Pitch

From c953871ec76528f638af8613d40051cd6c48be72 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sun, 2 Oct 2022 18:42:51 -0700
Subject: [PATCH 35/44] use lowercase 'quote' for consistency with existing
 custom command template functions

---
 docs/Custom_Command_Keybindings.md                    | 2 +-
 pkg/gui/services/custom_commands/handler_creator.go   | 2 +-
 pkg/integration/tests/custom_commands/form_prompts.go | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/docs/Custom_Command_Keybindings.md b/docs/Custom_Command_Keybindings.md
index 09708d54c..62a034ecf 100644
--- a/docs/Custom_Command_Keybindings.md
+++ b/docs/Custom_Command_Keybindings.md
@@ -8,7 +8,7 @@ customCommands:
     command: 'hub browse -- "commit/{{.SelectedLocalCommit.Sha}}"'
     context: 'commits'
   - key: 'a'
-    command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name | Quote}}"
+    command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name | quote}}"
     context: 'files'
     description: 'toggle file staged'
   - key: 'C'
diff --git a/pkg/gui/services/custom_commands/handler_creator.go b/pkg/gui/services/custom_commands/handler_creator.go
index 9b30041e3..bad972bd6 100644
--- a/pkg/gui/services/custom_commands/handler_creator.go
+++ b/pkg/gui/services/custom_commands/handler_creator.go
@@ -168,7 +168,7 @@ func (self *HandlerCreator) getResolveTemplateFn(form map[string]string, promptR
 	}
 
 	funcs := template.FuncMap{
-		"Quote": self.os.Quote,
+		"quote": self.os.Quote,
 	}
 
 	return func(templateStr string) (string, error) { return utils.ResolveTemplate(templateStr, objects, funcs) }
diff --git a/pkg/integration/tests/custom_commands/form_prompts.go b/pkg/integration/tests/custom_commands/form_prompts.go
index 4148c767a..5d9403107 100644
--- a/pkg/integration/tests/custom_commands/form_prompts.go
+++ b/pkg/integration/tests/custom_commands/form_prompts.go
@@ -17,7 +17,7 @@ var FormPrompts = NewIntegrationTest(NewIntegrationTestArgs{
 			{
 				Key:     "a",
 				Context: "files",
-				Command: `echo {{.Form.FileContent | Quote}} > {{.Form.FileName | Quote}}`,
+				Command: `echo {{.Form.FileContent | quote}} > {{.Form.FileName | quote}}`,
 				Prompts: []config.CustomCommandPrompt{
 					{
 						Key:   "FileName",

From 5670c0a30198440061aef1ca0b86b458903eefe1 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sun, 2 Oct 2022 12:47:57 -0700
Subject: [PATCH 36/44] bump gocui

---
 go.mod                                        |  4 +-
 go.sum                                        |  8 ++--
 vendor/github.com/jesseduffield/gocui/edit.go |  4 ++
 .../github.com/jesseduffield/gocui/escape.go  |  2 +
 .../jesseduffield/gocui/text_area.go          | 48 +++++++++++++++++++
 vendor/github.com/jesseduffield/gocui/view.go | 40 ++++++++++++----
 vendor/golang.org/x/sys/unix/syscall_linux.go | 13 ++++-
 vendor/golang.org/x/sys/unix/syscall_unix.go  | 12 +++--
 .../golang.org/x/sys/unix/zsyscall_linux.go   | 10 ++++
 .../golang.org/x/sys/unix/ztypes_linux_386.go |  6 +++
 .../x/sys/unix/ztypes_linux_amd64.go          |  6 +++
 .../golang.org/x/sys/unix/ztypes_linux_arm.go |  6 +++
 .../x/sys/unix/ztypes_linux_arm64.go          |  6 +++
 .../x/sys/unix/ztypes_linux_loong64.go        |  6 +++
 .../x/sys/unix/ztypes_linux_mips.go           |  6 +++
 .../x/sys/unix/ztypes_linux_mips64.go         |  6 +++
 .../x/sys/unix/ztypes_linux_mips64le.go       |  6 +++
 .../x/sys/unix/ztypes_linux_mipsle.go         |  6 +++
 .../golang.org/x/sys/unix/ztypes_linux_ppc.go |  6 +++
 .../x/sys/unix/ztypes_linux_ppc64.go          |  6 +++
 .../x/sys/unix/ztypes_linux_ppc64le.go        |  6 +++
 .../x/sys/unix/ztypes_linux_riscv64.go        |  6 +++
 .../x/sys/unix/ztypes_linux_s390x.go          |  6 +++
 .../x/sys/unix/ztypes_linux_sparc64.go        |  6 +++
 .../x/sys/windows/syscall_windows.go          | 10 ++--
 vendor/modules.txt                            |  4 +-
 26 files changed, 220 insertions(+), 25 deletions(-)

diff --git a/go.mod b/go.mod
index 0f697c35a..026e573d1 100644
--- a/go.mod
+++ b/go.mod
@@ -18,7 +18,7 @@ require (
 	github.com/integrii/flaggy v1.4.0
 	github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
 	github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4
-	github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37
+	github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d
 	github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
 	github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e
 	github.com/jesseduffield/yaml v2.1.0+incompatible
@@ -67,7 +67,7 @@ require (
 	golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 // indirect
 	golang.org/x/exp v0.0.0-20220318154914-8dddf5d87bd8 // indirect
 	golang.org/x/net v0.0.0-20201002202402-0a1ea396d57c // indirect
-	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
+	golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect
 	golang.org/x/term v0.0.0-20220919170432-7a66f970e087 // indirect
 	golang.org/x/text v0.3.7 // indirect
 	gopkg.in/warnings.v0 v0.1.2 // indirect
diff --git a/go.sum b/go.sum
index 7e1aeae88..87e316c87 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
-github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37 h1:EE21YiOAGGs4/K8l3V15w5ICJmDrfwhklm3adc4N/8A=
-github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
+github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d h1:OTUa2dO3IvnY53QWCABkKJK9v5yvs3+uv3RMbG698S0=
+github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e h1:uw/oo+kg7t/oeMs6sqlAwr85ND/9cpO3up3VxphxY0U=
@@ -195,8 +195,8 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc=
-golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
+golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20220919170432-7a66f970e087 h1:tPwmk4vmvVCMdr98VgL4JH+qZxPL8fqlUOHnyOM8N3w=
 golang.org/x/term v0.0.0-20220919170432-7a66f970e087/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
diff --git a/vendor/github.com/jesseduffield/gocui/edit.go b/vendor/github.com/jesseduffield/gocui/edit.go
index 535ca40cc..0ad5d60a2 100644
--- a/vendor/github.com/jesseduffield/gocui/edit.go
+++ b/vendor/github.com/jesseduffield/gocui/edit.go
@@ -37,8 +37,12 @@ func SimpleEditor(v *View, key Key, ch rune, mod Modifier) bool {
 		v.TextArea.MoveCursorDown()
 	case key == KeyArrowUp:
 		v.TextArea.MoveCursorUp()
+	case key == KeyArrowLeft && (mod&ModAlt) != 0:
+		v.TextArea.MoveLeftWord()
 	case key == KeyArrowLeft:
 		v.TextArea.MoveCursorLeft()
+	case key == KeyArrowRight && (mod&ModAlt) != 0:
+		v.TextArea.MoveRightWord()
 	case key == KeyArrowRight:
 		v.TextArea.MoveCursorRight()
 	case key == KeyEnter:
diff --git a/vendor/github.com/jesseduffield/gocui/escape.go b/vendor/github.com/jesseduffield/gocui/escape.go
index 0085d0eb4..87d6de72a 100644
--- a/vendor/github.com/jesseduffield/gocui/escape.go
+++ b/vendor/github.com/jesseduffield/gocui/escape.go
@@ -214,6 +214,8 @@ func (ei *escapeInterpreter) outputNormal() error {
 		case p == 0:
 			ei.curFgColor = ColorDefault
 			ei.curBgColor = ColorDefault
+		case p >= 21 && p <= 29:
+			ei.curFgColor &= ^getFontEffect(p - 20)
 		default:
 			ei.curFgColor |= getFontEffect(p)
 		}
diff --git a/vendor/github.com/jesseduffield/gocui/text_area.go b/vendor/github.com/jesseduffield/gocui/text_area.go
index 731e1cd04..ca4809107 100644
--- a/vendor/github.com/jesseduffield/gocui/text_area.go
+++ b/vendor/github.com/jesseduffield/gocui/text_area.go
@@ -64,6 +64,54 @@ func (self *TextArea) MoveCursorRight() {
 	self.cursor++
 }
 
+func (self *TextArea) MoveLeftWord() {
+	if self.cursor == 0 {
+		return
+	}
+	if self.atLineStart() {
+		self.cursor--
+		return
+	}
+
+	for !self.atLineStart() && strings.ContainsRune(WHITESPACES, self.content[self.cursor-1]) {
+		self.cursor--
+	}
+	separators := false
+	for !self.atLineStart() && strings.ContainsRune(WORD_SEPARATORS, self.content[self.cursor-1]) {
+		self.cursor--
+		separators = true
+	}
+	if !separators {
+		for !self.atLineStart() && !strings.ContainsRune(WHITESPACES+WORD_SEPARATORS, self.content[self.cursor-1]) {
+			self.cursor--
+		}
+	}
+}
+
+func (self *TextArea) MoveRightWord() {
+	if self.atEnd() {
+		return
+	}
+	if self.atLineEnd() {
+		self.cursor++
+		return
+	}
+
+	for !self.atLineEnd() && strings.ContainsRune(WHITESPACES, self.content[self.cursor]) {
+		self.cursor++
+	}
+	separators := false
+	for !self.atLineEnd() && strings.ContainsRune(WORD_SEPARATORS, self.content[self.cursor]) {
+		self.cursor++
+		separators = true
+	}
+	if !separators {
+		for !self.atLineEnd() && !strings.ContainsRune(WHITESPACES+WORD_SEPARATORS, self.content[self.cursor]) {
+			self.cursor++
+		}
+	}
+}
+
 func (self *TextArea) MoveCursorUp() {
 	x, y := self.GetCursorXY()
 	self.SetCursor2D(x, y-1)
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index ce0aa3c48..b3e21a0e0 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -601,6 +601,14 @@ func (v *View) writeCells(x, y int, cells []cell) {
 	v.lines[y] = line[:newLen]
 }
 
+// readCell gets cell at specified location (x, y)
+func (v *View) readCell(x, y int) (cell, bool) {
+	if y < 0 || y >= len(v.lines) || x < 0 || x >= len(v.lines[y]) {
+		return cell{}, false
+	}
+	return v.lines[y][x], true
+}
+
 // Write appends a byte slice into the view's internal buffer. Because
 // View implements the io.Writer interface, it can be passed as parameter
 // of functions like fmt.Fprintf, fmt.Fprintln, io.Copy, etc. Clear must
@@ -631,17 +639,29 @@ func (v *View) writeRunes(p []rune) {
 	for _, r := range p {
 		switch r {
 		case '\n':
+			if c, ok := v.readCell(v.wx+1, v.wy); !ok || c.chr == 0 {
+				v.writeCells(v.wx, v.wy, []cell{{
+					chr:     0,
+					fgColor: 0,
+					bgColor: 0,
+				}})
+			}
+			v.wx = 0
 			v.wy++
 			if v.wy >= len(v.lines) {
 				v.lines = append(v.lines, nil)
 			}
-
-			fallthrough
-			// not valid in every OS, but making runtime OS checks in cycle is bad.
 		case '\r':
+			if c, ok := v.readCell(v.wx, v.wy); !ok || c.chr == 0 {
+				v.writeCells(v.wx, v.wy, []cell{{
+					chr:     0,
+					fgColor: 0,
+					bgColor: 0,
+				}})
+			}
 			v.wx = 0
 		default:
-			moveCursor, cells := v.parseInput(r)
+			moveCursor, cells := v.parseInput(r, v.wx, v.wy)
 			if cells == nil {
 				continue
 			}
@@ -666,7 +686,7 @@ func (v *View) writeString(s string) {
 // parseInput parses char by char the input written to the View. It returns nil
 // while processing ESC sequences. Otherwise, it returns a cell slice that
 // contains the processed data.
-func (v *View) parseInput(ch rune) (bool, []cell) {
+func (v *View) parseInput(ch rune, x int, y int) (bool, []cell) {
 	cells := []cell{}
 	moveCursor := true
 
@@ -698,8 +718,9 @@ func (v *View) parseInput(ch rune) (bool, []cell) {
 			return moveCursor, nil
 		} else if ch == '\t' {
 			// fill tab-sized space
+			const tabStop = 4
 			ch = ' '
-			repeatCount = 4
+			repeatCount = tabStop - (x % tabStop)
 		}
 		c := cell{
 			fgColor: v.ei.curFgColor,
@@ -936,11 +957,14 @@ func (v *View) draw() error {
 		if y >= maxY {
 			break
 		}
-		x := 0
+		x := -v.ox
 		j := 0
 		var c cell
 		for {
-			if j < v.ox {
+			if x < 0 {
+				if j < len(vline.line) {
+					x += runewidth.RuneWidth(vline.line[j].chr)
+				}
 				j++
 				continue
 			}
diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go
index 47146911f..e044d5b54 100644
--- a/vendor/golang.org/x/sys/unix/syscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/syscall_linux.go
@@ -2252,7 +2252,7 @@ func (fh *FileHandle) Bytes() []byte {
 	if n == 0 {
 		return nil
 	}
-	return (*[1 << 30]byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type)) + 4))[:n:n]
+	return unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)
 }
 
 // NameToHandleAt wraps the name_to_handle_at system call; it obtains
@@ -2368,6 +2368,16 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
 	return prev, nil
 }
 
+//sysnb	rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK
+
+func PthreadSigmask(how int, set, oldset *Sigset_t) error {
+	if oldset != nil {
+		// Explicitly clear in case Sigset_t is larger than _C__NSIG.
+		*oldset = Sigset_t{}
+	}
+	return rtSigprocmask(how, set, oldset, _C__NSIG/8)
+}
+
 /*
  * Unimplemented
  */
@@ -2426,7 +2436,6 @@ func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {
 // RestartSyscall
 // RtSigaction
 // RtSigpending
-// RtSigprocmask
 // RtSigqueueinfo
 // RtSigreturn
 // RtSigsuspend
diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go
index 9f7535607..00bafda86 100644
--- a/vendor/golang.org/x/sys/unix/syscall_unix.go
+++ b/vendor/golang.org/x/sys/unix/syscall_unix.go
@@ -423,11 +423,15 @@ func Send(s int, buf []byte, flags int) (err error) {
 }
 
 func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {
-	ptr, n, err := to.sockaddr()
-	if err != nil {
-		return err
+	var ptr unsafe.Pointer
+	var salen _Socklen
+	if to != nil {
+		ptr, salen, err = to.sockaddr()
+		if err != nil {
+			return err
+		}
 	}
-	return sendto(fd, p, flags, ptr, n)
+	return sendto(fd, p, flags, ptr, salen)
 }
 
 func SetsockoptByte(fd, level, opt int, value byte) (err error) {
diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
index bc4a27531..293cf3680 100644
--- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go
+++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go
@@ -2151,3 +2151,13 @@ func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)
 	}
 	return
 }
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
+func rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) {
+	_, _, e1 := RawSyscall6(SYS_RT_SIGPROCMASK, uintptr(how), uintptr(unsafe.Pointer(set)), uintptr(unsafe.Pointer(oldset)), uintptr(sigsetsize), 0, 0)
+	if e1 != 0 {
+		err = errnoErr(e1)
+	}
+	return
+}
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
index 263604401..89c516a29 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go
@@ -254,6 +254,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
index 8187489d1..62b4fb269 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go
@@ -269,6 +269,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
index d1612335f..e86b35893 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go
@@ -245,6 +245,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
index c28e5556b..6c6be4c91 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go
@@ -248,6 +248,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
index 187061f9f..4982ea355 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go
@@ -249,6 +249,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
index 369129917..173141a67 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go
@@ -250,6 +250,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x80
 
+const (
+	SIG_BLOCK   = 0x1
+	SIG_UNBLOCK = 0x2
+	SIG_SETMASK = 0x3
+)
+
 type Siginfo struct {
 	Signo int32
 	Code  int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
index 7473468d7..93ae4c516 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go
@@ -251,6 +251,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x80
 
+const (
+	SIG_BLOCK   = 0x1
+	SIG_UNBLOCK = 0x2
+	SIG_SETMASK = 0x3
+)
+
 type Siginfo struct {
 	Signo int32
 	Code  int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
index ed9448524..4e4e510ca 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go
@@ -251,6 +251,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x80
 
+const (
+	SIG_BLOCK   = 0x1
+	SIG_UNBLOCK = 0x2
+	SIG_SETMASK = 0x3
+)
+
 type Siginfo struct {
 	Signo int32
 	Code  int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
index 0892a73a4..3f5ba013d 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go
@@ -250,6 +250,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x80
 
+const (
+	SIG_BLOCK   = 0x1
+	SIG_UNBLOCK = 0x2
+	SIG_SETMASK = 0x3
+)
+
 type Siginfo struct {
 	Signo int32
 	Code  int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
index e1dd48333..71dfe7cdb 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go
@@ -257,6 +257,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
index d9f654c7b..3a2b7f0a6 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go
@@ -258,6 +258,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
index 74acda9fe..a52d62756 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go
@@ -258,6 +258,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
index 50ebe69eb..dfc007d8a 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go
@@ -276,6 +276,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
index 75b34c259..b53cb9103 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go
@@ -271,6 +271,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x0
+	SIG_UNBLOCK = 0x1
+	SIG_SETMASK = 0x2
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
index 429c3bf7d..fe0aa3547 100644
--- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
+++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go
@@ -253,6 +253,12 @@ type Sigset_t struct {
 
 const _C__NSIG = 0x41
 
+const (
+	SIG_BLOCK   = 0x1
+	SIG_UNBLOCK = 0x2
+	SIG_SETMASK = 0x4
+)
+
 type Siginfo struct {
 	Signo int32
 	Errno int32
diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go
index 3f2cbb638..5f4f0430e 100644
--- a/vendor/golang.org/x/sys/windows/syscall_windows.go
+++ b/vendor/golang.org/x/sys/windows/syscall_windows.go
@@ -1115,9 +1115,13 @@ func Shutdown(fd Handle, how int) (err error) {
 }
 
 func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) {
-	rsa, l, err := to.sockaddr()
-	if err != nil {
-		return err
+	var rsa unsafe.Pointer
+	var l int32
+	if to != nil {
+		rsa, l, err = to.sockaddr()
+		if err != nil {
+			return err
+		}
 	}
 	return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine)
 }
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 2619b0e18..f151d83dc 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
 github.com/jesseduffield/go-git/v5/utils/merkletrie/index
 github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
 github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20220922032454-744b0c465c37
+# github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d
 ## explicit; go 1.12
 github.com/jesseduffield/gocui
 # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
@@ -291,7 +291,7 @@ golang.org/x/exp/slices
 golang.org/x/net/context
 golang.org/x/net/internal/socks
 golang.org/x/net/proxy
-# golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8
+# golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec
 ## explicit; go 1.17
 golang.org/x/sys/cpu
 golang.org/x/sys/internal/unsafeheader

From 8858f03606c5edc78e7161d83e200bebda37d909 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sun, 2 Oct 2022 20:34:14 -0700
Subject: [PATCH 37/44] adjust test temporarily to unblock master

---
 pkg/integration/tests/custom_commands/menu_from_command.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pkg/integration/tests/custom_commands/menu_from_command.go b/pkg/integration/tests/custom_commands/menu_from_command.go
index f45d820d6..765f7b873 100644
--- a/pkg/integration/tests/custom_commands/menu_from_command.go
+++ b/pkg/integration/tests/custom_commands/menu_from_command.go
@@ -55,9 +55,9 @@ var MenuFromCommand = NewIntegrationTest(NewIntegrationTestArgs{
 
 		assert.InMenu()
 		assert.MatchCurrentViewTitle(Equals("Choose commit message"))
-		assert.MatchSelectedLine(Equals("baz"))
+		assert.MatchSelectedLine(Equals("baz ")) // TODO: remove the trailing space
 		input.NextItem()
-		assert.MatchSelectedLine(Equals("bar"))
+		assert.MatchSelectedLine(Equals("bar ")) // TODO: remove the trailing space
 		input.Confirm()
 
 		assert.InPrompt()

From a77aa4d75ae1f04a15257fd92f7e763b8a4215db Mon Sep 17 00:00:00 2001
From: README-bot <actions@users.noreply.github.com>
Date: Mon, 3 Oct 2022 03:37:49 +0000
Subject: [PATCH 38/44] Updated README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a7d707e71..0cb5c045b 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ A simple terminal UI for git commands, written in Go with the [gocui](https://gi
 </p>
 
 <p align="center">
-<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/akbarsha03"><img src="https://github.com/akbarsha03.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><a href="https://github.com/jakewarren"><img src="https://github.com/jakewarren.png" width="60px" alt="" /></a><a href="https://github.com/huettern"><img src="https://github.com/huettern.png" width="60px" alt="" /></a><a href="https://github.com/lukasjarosch"><img src="https://github.com/lukasjarosch.png" width="60px" alt="" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><a href="https://github.com/jakewarren"><img src="https://github.com/jakewarren.png" width="60px" alt="" /></a><a href="https://github.com/huettern"><img src="https://github.com/huettern.png" width="60px" alt="" /></a><a href="https://github.com/lukasjarosch"><img src="https://github.com/lukasjarosch.png" width="60px" alt="" /></a><!-- sponsors -->
 </p>
 
 ## Elevator Pitch

From e76fa5a6cb648f8c3b642d83368ea08a48ab43b0 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sun, 2 Oct 2022 20:31:40 -0700
Subject: [PATCH 39/44] fix glitchy render of stale data when flicking through
 files and directories

---
 go.mod                                       |  2 +-
 go.sum                                       |  4 +--
 pkg/gui/main_panels.go                       | 32 +++++++++++++++++---
 pkg/gui/window.go                            | 29 +++++++++++++-----
 vendor/github.com/jesseduffield/gocui/gui.go | 15 +++++++++
 vendor/modules.txt                           |  2 +-
 6 files changed, 69 insertions(+), 15 deletions(-)

diff --git a/go.mod b/go.mod
index 026e573d1..57baf958b 100644
--- a/go.mod
+++ b/go.mod
@@ -18,7 +18,7 @@ require (
 	github.com/integrii/flaggy v1.4.0
 	github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
 	github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4
-	github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d
+	github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c
 	github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
 	github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e
 	github.com/jesseduffield/yaml v2.1.0+incompatible
diff --git a/go.sum b/go.sum
index 87e316c87..fea88fbd6 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
-github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d h1:OTUa2dO3IvnY53QWCABkKJK9v5yvs3+uv3RMbG698S0=
-github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
+github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c h1:mbOoXlqOzc243zNV71pDxeiEof8IRRw2ZJzVXm/RLjc=
+github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e h1:uw/oo+kg7t/oeMs6sqlAwr85ND/9cpO3up3VxphxY0U=
diff --git a/pkg/gui/main_panels.go b/pkg/gui/main_panels.go
index 625391480..9e36c18e9 100644
--- a/pkg/gui/main_panels.go
+++ b/pkg/gui/main_panels.go
@@ -27,11 +27,35 @@ func (gui *Gui) runTaskForView(view *gocui.View, task types.UpdateTask) error {
 }
 
 func (gui *Gui) moveMainContextPairToTop(pair types.MainContextPair) {
-	gui.setWindowContext(pair.Main)
-	gui.moveToTopOfWindow(pair.Main)
+	gui.moveMainContextToTop(pair.Main)
 	if pair.Secondary != nil {
-		gui.setWindowContext(pair.Secondary)
-		gui.moveToTopOfWindow(pair.Secondary)
+		gui.moveMainContextToTop(pair.Secondary)
+	}
+}
+
+func (gui *Gui) moveMainContextToTop(context types.Context) {
+	gui.setWindowContext(context)
+
+	view := context.GetView()
+
+	topView := gui.topViewInWindow(context.GetWindowName())
+	if topView == nil {
+		gui.Log.Error("unexpected: topView is nil")
+		return
+	}
+
+	if topView != view {
+		// We need to copy the content to avoid a flicker effect: If we're flicking
+		// through files in the files panel, we use a different view to render the
+		// files vs the directories, and if you select dir A, then file B, then dir
+		// C, you'll briefly see dir A's contents again before the view is updated.
+		// So here we're copying the content from the top window to avoid that
+		// flicker effect.
+		gui.g.CopyContent(topView, view)
+
+		if err := gui.g.SetViewOnTopOf(view.Name(), topView.Name()); err != nil {
+			gui.Log.Error(err)
+		}
 	}
 }
 
diff --git a/pkg/gui/window.go b/pkg/gui/window.go
index efee847e1..12cd31868 100644
--- a/pkg/gui/window.go
+++ b/pkg/gui/window.go
@@ -3,6 +3,7 @@ package gui
 import (
 	"fmt"
 
+	"github.com/jesseduffield/gocui"
 	"github.com/jesseduffield/lazygit/pkg/gui/context"
 	"github.com/jesseduffield/lazygit/pkg/gui/types"
 	"github.com/samber/lo"
@@ -70,28 +71,42 @@ func (gui *Gui) resetWindowContext(c types.Context) {
 	}
 }
 
-func (gui *Gui) moveToTopOfWindow(context types.Context) {
+// moves given context's view to the top of the window and returns
+// true if the view was not already on top.
+func (gui *Gui) moveToTopOfWindow(context types.Context) bool {
 	view := context.GetView()
 	if view == nil {
-		return
+		return false
 	}
 
 	window := context.GetWindowName()
 
+	topView := gui.topViewInWindow(window)
+
+	if view.Name() == topView.Name() {
+		return false
+	} else {
+		if err := gui.g.SetViewOnTopOf(view.Name(), topView.Name()); err != nil {
+			gui.Log.Error(err)
+		}
+
+		return true
+	}
+}
+
+func (gui *Gui) topViewInWindow(windowName string) *gocui.View {
 	// now I need to find all views in that same window, via contexts. And I guess then I need to find the index of the highest view in that list.
-	viewNamesInWindow := gui.viewNamesInWindow(window)
+	viewNamesInWindow := gui.viewNamesInWindow(windowName)
 
 	// The views list is ordered highest-last, so we're grabbing the last view of the window
-	topView := view
+	var topView *gocui.View
 	for _, currentView := range gui.g.Views() {
 		if lo.Contains(viewNamesInWindow, currentView.Name()) {
 			topView = currentView
 		}
 	}
 
-	if err := gui.g.SetViewOnTopOf(view.Name(), topView.Name()); err != nil {
-		gui.Log.Error(err)
-	}
+	return topView
 }
 
 func (gui *Gui) viewNamesInWindow(windowName string) []string {
diff --git a/vendor/github.com/jesseduffield/gocui/gui.go b/vendor/github.com/jesseduffield/gocui/gui.go
index f02f1a93a..889e02999 100644
--- a/vendor/github.com/jesseduffield/gocui/gui.go
+++ b/vendor/github.com/jesseduffield/gocui/gui.go
@@ -403,6 +403,21 @@ func (g *Gui) SetViewOnTopOf(toMove string, other string) error {
 	return nil
 }
 
+// replaces the content in toView with the content in fromView
+func (g *Gui) CopyContent(fromView *View, toView *View) {
+	g.Mutexes.ViewsMutex.Lock()
+	defer g.Mutexes.ViewsMutex.Unlock()
+
+	toView.clear()
+
+	toView.lines = fromView.lines
+	toView.viewLines = fromView.viewLines
+	toView.ox = fromView.ox
+	toView.oy = fromView.oy
+	toView.cx = fromView.cx
+	toView.cy = fromView.cy
+}
+
 // Views returns all the views in the GUI.
 func (g *Gui) Views() []*View {
 	return g.views
diff --git a/vendor/modules.txt b/vendor/modules.txt
index f151d83dc..c37a93336 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
 github.com/jesseduffield/go-git/v5/utils/merkletrie/index
 github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
 github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20221001154429-72c39318a83d
+# github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c
 ## explicit; go 1.12
 github.com/jesseduffield/gocui
 # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10

From ed98b60078df3b4b30f46ea6beee9181a57f3df1 Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Sun, 2 Oct 2022 20:57:44 -0700
Subject: [PATCH 40/44] use thread safe map

---
 pkg/gui/gui.go                    |  2 +-
 pkg/gui/window.go                 | 19 ++++---
 pkg/utils/thread_safe_map.go      | 90 +++++++++++++++++++++++++++++++
 pkg/utils/thread_safe_map_test.go | 59 ++++++++++++++++++++
 4 files changed, 162 insertions(+), 8 deletions(-)
 create mode 100644 pkg/utils/thread_safe_map.go
 create mode 100644 pkg/utils/thread_safe_map_test.go

diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go
index 6ab2a916b..1d14c9f50 100644
--- a/pkg/gui/gui.go
+++ b/pkg/gui/gui.go
@@ -185,7 +185,7 @@ type GuiRepoState struct {
 	// WindowViewNameMap is a mapping of windows to the current view of that window.
 	// Some views move between windows for example the commitFiles view and when cycling through
 	// side windows we need to know which view to give focus to for a given window
-	WindowViewNameMap map[string]string
+	WindowViewNameMap *utils.ThreadSafeMap[string, string]
 
 	// tells us whether we've set up our views for the current repo. We'll need to
 	// do this whenever we switch back and forth between repos to get the views
diff --git a/pkg/gui/window.go b/pkg/gui/window.go
index 12cd31868..1d69c420c 100644
--- a/pkg/gui/window.go
+++ b/pkg/gui/window.go
@@ -6,6 +6,7 @@ import (
 	"github.com/jesseduffield/gocui"
 	"github.com/jesseduffield/lazygit/pkg/gui/context"
 	"github.com/jesseduffield/lazygit/pkg/gui/types"
+	"github.com/jesseduffield/lazygit/pkg/utils"
 	"github.com/samber/lo"
 )
 
@@ -15,18 +16,18 @@ import (
 // space. Right now most windows are 1:1 with views, except for commitFiles which
 // is a view that moves between windows
 
-func (gui *Gui) initialWindowViewNameMap(contextTree *context.ContextTree) map[string]string {
-	result := map[string]string{}
+func (gui *Gui) initialWindowViewNameMap(contextTree *context.ContextTree) *utils.ThreadSafeMap[string, string] {
+	result := utils.NewThreadSafeMap[string, string]()
 
 	for _, context := range contextTree.Flatten() {
-		result[context.GetWindowName()] = context.GetViewName()
+		result.Set(context.GetWindowName(), context.GetViewName())
 	}
 
 	return result
 }
 
 func (gui *Gui) getViewNameForWindow(window string) string {
-	viewName, ok := gui.State.WindowViewNameMap[window]
+	viewName, ok := gui.State.WindowViewNameMap.Get(window)
 	if !ok {
 		panic(fmt.Sprintf("Viewname not found for window: %s", window))
 	}
@@ -51,7 +52,7 @@ func (gui *Gui) setWindowContext(c types.Context) {
 		gui.resetWindowContext(c)
 	}
 
-	gui.State.WindowViewNameMap[c.GetWindowName()] = c.GetViewName()
+	gui.State.WindowViewNameMap.Set(c.GetWindowName(), c.GetViewName())
 }
 
 func (gui *Gui) currentWindow() string {
@@ -60,11 +61,15 @@ func (gui *Gui) currentWindow() string {
 
 // assumes the context's windowName has been set to the new window if necessary
 func (gui *Gui) resetWindowContext(c types.Context) {
-	for windowName, viewName := range gui.State.WindowViewNameMap {
+	for _, windowName := range gui.State.WindowViewNameMap.Keys() {
+		viewName, ok := gui.State.WindowViewNameMap.Get(windowName)
+		if !ok {
+			continue
+		}
 		if viewName == c.GetViewName() && windowName != c.GetWindowName() {
 			for _, context := range gui.State.Contexts.Flatten() {
 				if context.GetKey() != c.GetKey() && context.GetWindowName() == windowName {
-					gui.State.WindowViewNameMap[windowName] = context.GetViewName()
+					gui.State.WindowViewNameMap.Set(windowName, context.GetViewName())
 				}
 			}
 		}
diff --git a/pkg/utils/thread_safe_map.go b/pkg/utils/thread_safe_map.go
new file mode 100644
index 000000000..a70cefc7d
--- /dev/null
+++ b/pkg/utils/thread_safe_map.go
@@ -0,0 +1,90 @@
+package utils
+
+import "sync"
+
+type ThreadSafeMap[K comparable, V any] struct {
+	mutex sync.RWMutex
+
+	innerMap map[K]V
+}
+
+func NewThreadSafeMap[K comparable, V any]() *ThreadSafeMap[K, V] {
+	return &ThreadSafeMap[K, V]{
+		innerMap: make(map[K]V),
+	}
+}
+
+func (m *ThreadSafeMap[K, V]) Get(key K) (V, bool) {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	value, ok := m.innerMap[key]
+	return value, ok
+}
+
+func (m *ThreadSafeMap[K, V]) Set(key K, value V) {
+	m.mutex.Lock()
+	defer m.mutex.Unlock()
+
+	m.innerMap[key] = value
+}
+
+func (m *ThreadSafeMap[K, V]) Delete(key K) {
+	m.mutex.Lock()
+	defer m.mutex.Unlock()
+
+	delete(m.innerMap, key)
+}
+
+func (m *ThreadSafeMap[K, V]) Keys() []K {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	keys := make([]K, 0, len(m.innerMap))
+	for key := range m.innerMap {
+		keys = append(keys, key)
+	}
+
+	return keys
+}
+
+func (m *ThreadSafeMap[K, V]) Values() []V {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	values := make([]V, 0, len(m.innerMap))
+	for _, value := range m.innerMap {
+		values = append(values, value)
+	}
+
+	return values
+}
+
+func (m *ThreadSafeMap[K, V]) Len() int {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	return len(m.innerMap)
+}
+
+func (m *ThreadSafeMap[K, V]) Clear() {
+	m.mutex.Lock()
+	defer m.mutex.Unlock()
+
+	m.innerMap = make(map[K]V)
+}
+
+func (m *ThreadSafeMap[K, V]) IsEmpty() bool {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	return len(m.innerMap) == 0
+}
+
+func (m *ThreadSafeMap[K, V]) Has(key K) bool {
+	m.mutex.RLock()
+	defer m.mutex.RUnlock()
+
+	_, ok := m.innerMap[key]
+	return ok
+}
diff --git a/pkg/utils/thread_safe_map_test.go b/pkg/utils/thread_safe_map_test.go
new file mode 100644
index 000000000..9676cfe5f
--- /dev/null
+++ b/pkg/utils/thread_safe_map_test.go
@@ -0,0 +1,59 @@
+package utils
+
+import (
+	"testing"
+)
+
+func TestThreadSafeMap(t *testing.T) {
+	m := NewThreadSafeMap[int, int]()
+
+	m.Set(1, 1)
+	m.Set(2, 2)
+	m.Set(3, 3)
+
+	if m.Len() != 3 {
+		t.Errorf("Expected length to be 3, got %d", m.Len())
+	}
+
+	if !m.Has(1) {
+		t.Errorf("Expected to have key 1")
+	}
+
+	if m.Has(4) {
+		t.Errorf("Expected to not have key 4")
+	}
+
+	if _, ok := m.Get(1); !ok {
+		t.Errorf("Expected to have key 1")
+	}
+
+	if _, ok := m.Get(4); ok {
+		t.Errorf("Expected to not have key 4")
+	}
+
+	m.Delete(1)
+
+	if m.Has(1) {
+		t.Errorf("Expected to not have key 1")
+	}
+
+	m.Clear()
+
+	if m.Len() != 0 {
+		t.Errorf("Expected length to be 0, got %d", m.Len())
+	}
+}
+
+func TestThreadSafeMapConcurrentReadWrite(t *testing.T) {
+	m := NewThreadSafeMap[int, int]()
+
+	go func() {
+		for i := 0; i < 10000; i++ {
+			m.Set(0, 0)
+		}
+	}()
+
+	for i := 0; i < 10000; i++ {
+		m.Get(0)
+	}
+}

From e3f21f058879e9c42540a033630a5857808db47f Mon Sep 17 00:00:00 2001
From: Jesse Duffield <jessedduffield@gmail.com>
Date: Mon, 3 Oct 2022 09:23:24 -0700
Subject: [PATCH 41/44] strip NUL bytes instead of replacing with space

---
 go.mod                                                     | 2 +-
 go.sum                                                     | 4 ++--
 pkg/integration/tests/custom_commands/menu_from_command.go | 4 ++--
 vendor/github.com/jesseduffield/gocui/view.go              | 6 +++---
 vendor/modules.txt                                         | 2 +-
 5 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/go.mod b/go.mod
index 57baf958b..cb746383c 100644
--- a/go.mod
+++ b/go.mod
@@ -18,7 +18,7 @@ require (
 	github.com/integrii/flaggy v1.4.0
 	github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68
 	github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4
-	github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c
+	github.com/jesseduffield/gocui v0.3.1-0.20221003162644-fead10f7b360
 	github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10
 	github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e
 	github.com/jesseduffield/yaml v2.1.0+incompatible
diff --git a/go.sum b/go.sum
index fea88fbd6..f75d64c9e 100644
--- a/go.sum
+++ b/go.sum
@@ -72,8 +72,8 @@ github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68 h1:EQP2Tv8T
 github.com/jesseduffield/generics v0.0.0-20220320043834-727e535cbe68/go.mod h1:+LLj9/WUPAP8LqCchs7P+7X0R98HiFujVFANdNaxhGk=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4 h1:GOQrmaE8i+KEdB8NzAegKYd4tPn/inM0I1uo0NXFerg=
 github.com/jesseduffield/go-git/v5 v5.1.2-0.20201006095850-341962be15a4/go.mod h1:nGNEErzf+NRznT+N2SWqmHnDnF9aLgANB1CUNEan09o=
-github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c h1:mbOoXlqOzc243zNV71pDxeiEof8IRRw2ZJzVXm/RLjc=
-github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
+github.com/jesseduffield/gocui v0.3.1-0.20221003162644-fead10f7b360 h1:43F6SAmNzsjwhNa7hBfYCXUgPSl76b+3IogJIloMDnU=
+github.com/jesseduffield/gocui v0.3.1-0.20221003162644-fead10f7b360/go.mod h1:znJuCDnF2Ph40YZSlBwdX/4GEofnIoWLGdT4mK5zRAU=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10 h1:jmpr7KpX2+2GRiE91zTgfq49QvgiqB0nbmlwZ8UnOx0=
 github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10/go.mod h1:aA97kHeNA+sj2Hbki0pvLslmE4CbDyhBeSSTUUnOuVo=
 github.com/jesseduffield/minimal/gitignore v0.3.3-0.20211018110810-9cde264e6b1e h1:uw/oo+kg7t/oeMs6sqlAwr85ND/9cpO3up3VxphxY0U=
diff --git a/pkg/integration/tests/custom_commands/menu_from_command.go b/pkg/integration/tests/custom_commands/menu_from_command.go
index 765f7b873..f45d820d6 100644
--- a/pkg/integration/tests/custom_commands/menu_from_command.go
+++ b/pkg/integration/tests/custom_commands/menu_from_command.go
@@ -55,9 +55,9 @@ var MenuFromCommand = NewIntegrationTest(NewIntegrationTestArgs{
 
 		assert.InMenu()
 		assert.MatchCurrentViewTitle(Equals("Choose commit message"))
-		assert.MatchSelectedLine(Equals("baz ")) // TODO: remove the trailing space
+		assert.MatchSelectedLine(Equals("baz"))
 		input.NextItem()
-		assert.MatchSelectedLine(Equals("bar ")) // TODO: remove the trailing space
+		assert.MatchSelectedLine(Equals("bar"))
 		input.Confirm()
 
 		assert.InPrompt()
diff --git a/vendor/github.com/jesseduffield/gocui/view.go b/vendor/github.com/jesseduffield/gocui/view.go
index b3e21a0e0..ea6923781 100644
--- a/vendor/github.com/jesseduffield/gocui/view.go
+++ b/vendor/github.com/jesseduffield/gocui/view.go
@@ -1080,7 +1080,7 @@ func (v *View) BufferLines() []string {
 	lines := make([]string, len(v.lines))
 	for i, l := range v.lines {
 		str := lineType(l).String()
-		str = strings.Replace(str, "\x00", " ", -1)
+		str = strings.Replace(str, "\x00", "", -1)
 		lines[i] = str
 	}
 	return lines
@@ -1098,7 +1098,7 @@ func (v *View) ViewBufferLines() []string {
 	lines := make([]string, len(v.viewLines))
 	for i, l := range v.viewLines {
 		str := lineType(l.line).String()
-		str = strings.Replace(str, "\x00", " ", -1)
+		str = strings.Replace(str, "\x00", "", -1)
 		lines[i] = str
 	}
 	return lines
@@ -1274,7 +1274,7 @@ func (v *View) SelectedLine() string {
 	}
 	line := v.lines[v.SelectedLineIdx()]
 	str := lineType(line).String()
-	return strings.Replace(str, "\x00", " ", -1)
+	return strings.Replace(str, "\x00", "", -1)
 }
 
 func (v *View) SelectedPoint() (int, int) {
diff --git a/vendor/modules.txt b/vendor/modules.txt
index c37a93336..a829719fd 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -172,7 +172,7 @@ github.com/jesseduffield/go-git/v5/utils/merkletrie/filesystem
 github.com/jesseduffield/go-git/v5/utils/merkletrie/index
 github.com/jesseduffield/go-git/v5/utils/merkletrie/internal/frame
 github.com/jesseduffield/go-git/v5/utils/merkletrie/noder
-# github.com/jesseduffield/gocui v0.3.1-0.20221003033055-3b1444b7ce1c
+# github.com/jesseduffield/gocui v0.3.1-0.20221003162644-fead10f7b360
 ## explicit; go 1.12
 github.com/jesseduffield/gocui
 # github.com/jesseduffield/kill v0.0.0-20220618033138-bfbe04675d10

From c686c7f9ed2c9b149a3c424dac2edca6301be0c3 Mon Sep 17 00:00:00 2001
From: TomBaxter <tkb608@gmail.com>
Date: Mon, 3 Oct 2022 13:58:04 -0400
Subject: [PATCH 42/44] Replace regex for retrieving latest version

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 0cb5c045b..a37556e1d 100644
--- a/README.md
+++ b/README.md
@@ -150,7 +150,7 @@ sudo eopkg install lazygit
 ### Ubuntu
 
 ```sh
-LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[0-35.]+')
+LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep '"tag_name":' |  sed -E 's/.*"v*([^"]+)".*/\1/')
 ```
 
 ```sh

From e436922eb60771130f4a6c6222f46b41ccb62022 Mon Sep 17 00:00:00 2001
From: Ryooooooga <eial5q265e5@gmail.com>
Date: Wed, 5 Oct 2022 22:29:51 +0900
Subject: [PATCH 43/44] feat(editors.go): move by words

---
 pkg/gui/editors.go | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/pkg/gui/editors.go b/pkg/gui/editors.go
index 20223d117..9e00f8351 100644
--- a/pkg/gui/editors.go
+++ b/pkg/gui/editors.go
@@ -22,8 +22,12 @@ func (gui *Gui) handleEditorKeypress(textArea *gocui.TextArea, key gocui.Key, ch
 		textArea.MoveCursorDown()
 	case key == gocui.KeyArrowUp:
 		textArea.MoveCursorUp()
+	case key == gocui.KeyArrowLeft && (mod&gocui.ModAlt) != 0:
+		textArea.MoveLeftWord()
 	case key == gocui.KeyArrowLeft || key == gocui.KeyCtrlB:
 		textArea.MoveCursorLeft()
+	case key == gocui.KeyArrowRight && (mod&gocui.ModAlt) != 0:
+		textArea.MoveRightWord()
 	case key == gocui.KeyArrowRight || key == gocui.KeyCtrlF:
 		textArea.MoveCursorRight()
 	case key == newlineKey:

From 7b4b42abd6f458eb667d322ec870bc6b20024812 Mon Sep 17 00:00:00 2001
From: README-bot <actions@users.noreply.github.com>
Date: Thu, 6 Oct 2022 18:26:36 +0000
Subject: [PATCH 44/44] Updated README.md

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a37556e1d..9486a2d9d 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ A simple terminal UI for git commands, written in Go with the [gocui](https://gi
 </p>
 
 <p align="center">
-<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><a href="https://github.com/jakewarren"><img src="https://github.com/jakewarren.png" width="60px" alt="" /></a><a href="https://github.com/huettern"><img src="https://github.com/huettern.png" width="60px" alt="" /></a><a href="https://github.com/lukasjarosch"><img src="https://github.com/lukasjarosch.png" width="60px" alt="" /></a><!-- sponsors -->
+<!-- sponsors --><a href="https://github.com/atecce"><img src="https://github.com/atecce.png" width="60px" alt="" /></a><a href="https://github.com/intabulas"><img src="https://github.com/intabulas.png" width="60px" alt="" /></a><a href="https://github.com/peppy"><img src="https://github.com/peppy.png" width="60px" alt="" /></a><a href="https://github.com/piot"><img src="https://github.com/piot.png" width="60px" alt="" /></a><a href="https://github.com/blacky14"><img src="https://github.com/blacky14.png" width="60px" alt="" /></a><a href="https://github.com/rgwood"><img src="https://github.com/rgwood.png" width="60px" alt="" /></a><a href="https://github.com/oliverguenther"><img src="https://github.com/oliverguenther.png" width="60px" alt="" /></a><a href="https://github.com/pawanjay176"><img src="https://github.com/pawanjay176.png" width="60px" alt="" /></a><a href="https://github.com/bdach"><img src="https://github.com/bdach.png" width="60px" alt="" /></a><a href="https://github.com/naoey"><img src="https://github.com/naoey.png" width="60px" alt="" /></a><a href="https://github.com/jryom"><img src="https://github.com/jryom.png" width="60px" alt="" /></a><a href="https://github.com/sagor999"><img src="https://github.com/sagor999.png" width="60px" alt="" /></a><a href="https://github.com/fargozhu"><img src="https://github.com/fargozhu.png" width="60px" alt="" /></a><a href="https://github.com/carstengehling"><img src="https://github.com/carstengehling.png" width="60px" alt="" /></a><a href="https://github.com/ceuk"><img src="https://github.com/ceuk.png" width="60px" alt="" /></a><a href="https://github.com/akospwc"><img src="https://github.com/akospwc.png" width="60px" alt="" /></a><a href="https://github.com/peterdieleman"><img src="https://github.com/peterdieleman.png" width="60px" alt="" /></a><a href="https://github.com/Xetera"><img src="https://github.com/Xetera.png" width="60px" alt="" /></a><a href="https://github.com/HoldenLucas"><img src="https://github.com/HoldenLucas.png" width="60px" alt="" /></a><a href="https://github.com/barbados-clemens"><img src="https://github.com/barbados-clemens.png" width="60px" alt="" /></a><a href="https://github.com/nartc"><img src="https://github.com/nartc.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/matejcik"><img src="https://github.com/matejcik.png" width="60px" alt="" /></a><a href="https://github.com/lucatume"><img src="https://github.com/lucatume.png" width="60px" alt="" /></a><a href="https://github.com/dbabiak"><img src="https://github.com/dbabiak.png" width="60px" alt="" /></a><a href="https://github.com/davidlattimore"><img src="https://github.com/davidlattimore.png" width="60px" alt="" /></a><a href="https://github.com/zach-fuller"><img src="https://github.com/zach-fuller.png" width="60px" alt="" /></a><a href="https://github.com/escrafford"><img src="https://github.com/escrafford.png" width="60px" alt="" /></a><a href="https://github.com/KowalskiPiotr98"><img src="https://github.com/KowalskiPiotr98.png" width="60px" alt="" /></a><a href="https://github.com/IvanZuy"><img src="https://github.com/IvanZuy.png" width="60px" alt="" /></a><a href="https://github.com/nicholascloud"><img src="https://github.com/nicholascloud.png" width="60px" alt="" /></a><a href="https://github.com/topher200"><img src="https://github.com/topher200.png" width="60px" alt="" /></a><a href="https://github.com/"><img src="https://github.com/.png" width="60px" alt="" /></a><a href="https://github.com/PhotonQuantum"><img src="https://github.com/PhotonQuantum.png" width="60px" alt="" /></a><a href="https://github.com/GitSquared"><img src="https://github.com/GitSquared.png" width="60px" alt="" /></a><a href="https://github.com/ava1ar"><img src="https://github.com/ava1ar.png" width="60px" alt="" /></a><a href="https://github.com/alqh"><img src="https://github.com/alqh.png" width="60px" alt="" /></a><a href="https://github.com/pedropombeiro"><img src="https://github.com/pedropombeiro.png" width="60px" alt="" /></a><a href="https://github.com/minidfx"><img src="https://github.com/minidfx.png" width="60px" alt="" /></a><a href="https://github.com/JoeKlemmer"><img src="https://github.com/JoeKlemmer.png" width="60px" alt="" /></a><a href="https://github.com/MikaelElkiaer"><img src="https://github.com/MikaelElkiaer.png" width="60px" alt="" /></a><a href="https://github.com/smoogipoo"><img src="https://github.com/smoogipoo.png" width="60px" alt="" /></a><a href="https://github.com/ColonelBucket8"><img src="https://github.com/ColonelBucket8.png" width="60px" alt="" /></a><a href="https://github.com/mutewinter"><img src="https://github.com/mutewinter.png" width="60px" alt="" /></a><a href="https://github.com/tobi"><img src="https://github.com/tobi.png" width="60px" alt="" /></a><a href="https://github.com/benmacleod"><img src="https://github.com/benmacleod.png" width="60px" alt="" /></a><a href="https://github.com/claudiofreitas"><img src="https://github.com/claudiofreitas.png" width="60px" alt="" /></a><a href="https://github.com/benbfortis"><img src="https://github.com/benbfortis.png" width="60px" alt="" /></a><a href="https://github.com/jakewarren"><img src="https://github.com/jakewarren.png" width="60px" alt="" /></a><a href="https://github.com/huettern"><img src="https://github.com/huettern.png" width="60px" alt="" /></a><a href="https://github.com/lukasjarosch"><img src="https://github.com/lukasjarosch.png" width="60px" alt="" /></a><a href="https://github.com/tgpholly"><img src="https://github.com/tgpholly.png" width="60px" alt="" /></a><a href="https://github.com/FerencoVonMatterhorn"><img src="https://github.com/FerencoVonMatterhorn.png" width="60px" alt="" /></a><a href="https://github.com/bashcoder"><img src="https://github.com/bashcoder.png" width="60px" alt="" /></a><a href="https://github.com/Fuzznimp"><img src="https://github.com/Fuzznimp.png" width="60px" alt="" /></a><!-- sponsors -->
 </p>
 
 ## Elevator Pitch