From 78f3a7a4786bf5f70af3489e6c4f2e44cddbd978 Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Wed, 22 Feb 2023 19:36:31 +1100 Subject: migrate interactive rebase integration tests --- pkg/commands/git_commands/rebase.go | 35 +++--- pkg/gui/controllers/local_commits_controller.go | 6 + pkg/integration/tests/interactive_rebase/move.go | 84 ++++++++++++++ .../tests/interactive_rebase/move_in_rebase.go | 96 ++++++++++++++++ pkg/integration/tests/interactive_rebase/one.go | 71 ------------ pkg/integration/tests/interactive_rebase/rebase.go | 122 ++++++++++++++++++++ .../interactive_rebase/reword_first_commit.go | 3 + .../tests/interactive_rebase/reword_last_commit.go | 38 +++++++ .../swap_in_rebase_with_conflict.go | 126 +++++++++++++++++++++ .../tests/interactive_rebase/swap_with_conflict.go | 33 ++++++ pkg/integration/tests/tests_gen.go | 7 +- .../rebase/expected/repo/.git_keep/COMMIT_EDITMSG | 30 ----- .../rebase/expected/repo/.git_keep/FETCH_HEAD | 0 .../rebase/expected/repo/.git_keep/HEAD | 1 - .../rebase/expected/repo/.git_keep/ORIG_HEAD | 1 - .../rebase/expected/repo/.git_keep/config | 10 -- .../rebase/expected/repo/.git_keep/description | 1 - .../rebase/expected/repo/.git_keep/index | Bin 353 -> 0 bytes .../rebase/expected/repo/.git_keep/info/exclude | 7 -- .../rebase/expected/repo/.git_keep/logs/HEAD | 9 -- .../expected/repo/.git_keep/logs/refs/heads/master | 5 - .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../18/24d7294d6d3524d83510db27086177a6db97bf | Bin 155 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../47/614f63053804bc596291b8f7cff3b460b1b3ee | Bin 148 -> 0 bytes .../57/8ebf1736e797b78fb670c718ebf177936eb2ef | Bin 146 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../e8/ece6af94d443b67962124243509d8f61a29758 | 3 - .../ec/fc5809e3397bbda6bd4c9f47267a8c5f22346c | Bin 119 -> 0 bytes .../fa/af373a925c1e335894ebf4343a00a917f04edc | Bin 147 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - test/integration/rebase/expected/repo/file0 | 1 - test/integration/rebase/expected/repo/file1 | 1 - test/integration/rebase/expected/repo/file2 | 1 - test/integration/rebase/expected/repo/file4 | 1 - test/integration/rebase/recording.json | 1 - test/integration/rebase/setup.sh | 26 ----- test/integration/rebase/test.json | 1 - .../rebase2/expected/repo/.git_keep/COMMIT_EDITMSG | 16 --- .../rebase2/expected/repo/.git_keep/FETCH_HEAD | 0 .../rebase2/expected/repo/.git_keep/HEAD | 1 - .../rebase2/expected/repo/.git_keep/MERGE_MSG | 4 - .../rebase2/expected/repo/.git_keep/ORIG_HEAD | 1 - .../rebase2/expected/repo/.git_keep/REBASE_HEAD | 1 - .../rebase2/expected/repo/.git_keep/config | 10 -- .../rebase2/expected/repo/.git_keep/description | 1 - .../rebase2/expected/repo/.git_keep/index | Bin 429 -> 0 bytes .../rebase2/expected/repo/.git_keep/info/exclude | 7 -- .../rebase2/expected/repo/.git_keep/logs/HEAD | 10 -- .../expected/repo/.git_keep/logs/refs/heads/master | 7 -- .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../26/d430fb59900099e9992a3c79f30e42309cdce3 | 3 - .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../4a/edafb1a5d371825cbfea5ffcf2692cc786a1bf | Bin 147 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../61/baf480bb5ddfad6d66c785b321d4aadd5367b4 | 2 - .../8d/3ce0d821345b25fef1188e48cba4a1d44c30be | Bin 65 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../bb/c22338ee174004f5c5fa117688249bc5b7e205 | Bin 71 -> 0 bytes .../bc/e4745137c540943900ca78e4b31dd1315bf57c | Bin 153 -> 0 bytes .../c3/6e808d2fa61e16952b7d0ffb8f18d08156cc94 | Bin 161 -> 0 bytes .../c3/901284a9e7fc063d6fa7f0c5797d031445ba45 | Bin 158 -> 0 bytes .../cc/01bf15804065932f5e50340902614b3c04c948 | Bin 127 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../f9/4292928d0bc034fe88c753306b1959300e1264 | 2 - .../ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 | Bin 127 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - test/integration/rebase2/expected/repo/file0 | 1 - test/integration/rebase2/expected/repo/file1 | 1 - test/integration/rebase2/expected/repo/file2 | 1 - test/integration/rebase2/expected/repo/file4 | 1 - test/integration/rebase2/recording.json | 1 - test/integration/rebase2/setup.sh | 34 ------ test/integration/rebase2/test.json | 1 - .../rebase3/expected/repo/.git_keep/COMMIT_EDITMSG | 27 ----- .../rebase3/expected/repo/.git_keep/FETCH_HEAD | 0 .../rebase3/expected/repo/.git_keep/HEAD | 1 - .../rebase3/expected/repo/.git_keep/ORIG_HEAD | 1 - .../rebase3/expected/repo/.git_keep/config | 10 -- .../rebase3/expected/repo/.git_keep/description | 1 - .../rebase3/expected/repo/.git_keep/index | Bin 353 -> 0 bytes .../rebase3/expected/repo/.git_keep/info/exclude | 7 -- .../rebase3/expected/repo/.git_keep/logs/HEAD | 12 -- .../expected/repo/.git_keep/logs/refs/heads/master | 7 -- .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../3c/21f03d819ae34b74084712c3ef1b9b99b2f40e | Bin 154 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../4b/f6ae41c5ef2186c87f5f39dbb8cadd76c597cc | Bin 154 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../51/a0e4a6635c22a062a48b7134dd556541a1e06c | Bin 147 -> 0 bytes .../7b/42ba8a9f370bbbf0db85c5aca61f4e8a7b3d26 | Bin 155 -> 0 bytes .../8f/2acebb8a7a83cfaf3cffc6a9103f633f5cf292 | Bin 154 -> 0 bytes .../9e/68fbe4291e7416d50587d9b6968aa5ceeccff9 | Bin 158 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../cc/01bf15804065932f5e50340902614b3c04c948 | Bin 127 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../d8/ae31faf375fd293cedb0c88c41a9c7a77a2530 | Bin 150 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../f0/6dfb4e9e5a9dfab869590058f2c1ce1c72b2ac | 4 - .../fd/ecf9e3e742db4c8690d56b328b2533e67d2866 | Bin 118 -> 0 bytes .../ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 | Bin 127 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - test/integration/rebase3/expected/repo/file0 | 1 - test/integration/rebase3/expected/repo/file1 | 1 - test/integration/rebase3/expected/repo/file2 | 1 - test/integration/rebase3/expected/repo/file4 | 1 - test/integration/rebase3/recording.json | 1 - test/integration/rebase3/setup.sh | 34 ------ test/integration/rebase3/test.json | 1 - .../expected/repo/.git_keep/COMMIT_EDITMSG | 24 ---- .../expected/repo/.git_keep/FETCH_HEAD | 0 .../expected/repo/.git_keep/HEAD | 1 - .../expected/repo/.git_keep/ORIG_HEAD | 1 - .../expected/repo/.git_keep/config | 10 -- .../expected/repo/.git_keep/description | 1 - .../expected/repo/.git_keep/index | Bin 353 -> 0 bytes .../expected/repo/.git_keep/info/exclude | 7 -- .../expected/repo/.git_keep/logs/HEAD | 14 --- .../expected/repo/.git_keep/logs/refs/heads/master | 8 -- .../0d/633de5bd380e6b42e03ec1e7a055ba4f3c860d | Bin 118 -> 0 bytes .../12/ed10a6439eadfdb8877e39b7c6547591a0a91c | Bin 151 -> 0 bytes .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1d/197a4c509a5e71bad9b0b439c8fd26323ff218 | Bin 153 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../4a/e4346ad59bf70d5ba07184af5a138b6a65c224 | 3 - .../4d/c7f318f68fe1890dba6fb595009c4652c0a861 | Bin 159 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../74/d431c56eac1e359f6f5736978347af68af5702 | 3 - .../76/79fc004a4a40da12907d72ccef14991976aaff | Bin 164 -> 0 bytes .../7b/01314ccdeccc57cee454feca6369237410e786 | Bin 148 -> 0 bytes .../8a/db7457de59c3945566ce7675a31bbf048b38ee | Bin 165 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../cc/01bf15804065932f5e50340902614b3c04c948 | Bin 127 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../db/ab7e62cd7517f73425d46120a931a59c8eda6e | Bin 150 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 | Bin 127 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - .../rebaseFixupAndSquash/expected/repo/file0 | 1 - .../rebaseFixupAndSquash/expected/repo/file1 | 1 - .../rebaseFixupAndSquash/expected/repo/file2 | 1 - .../rebaseFixupAndSquash/expected/repo/file4 | 1 - .../rebaseFixupAndSquash/recording.json | 1 - test/integration/rebaseFixupAndSquash/setup.sh | 34 ------ test/integration/rebaseFixupAndSquash/test.json | 1 - .../expected/repo/.git_keep/COMMIT_EDITMSG | 1 - .../expected/repo/.git_keep/FETCH_HEAD | 0 .../rebaseFixups/expected/repo/.git_keep/HEAD | 1 - .../rebaseFixups/expected/repo/.git_keep/ORIG_HEAD | 1 - .../rebaseFixups/expected/repo/.git_keep/config | 10 -- .../expected/repo/.git_keep/description | 1 - .../rebaseFixups/expected/repo/.git_keep/index | Bin 497 -> 0 bytes .../expected/repo/.git_keep/info/exclude | 7 -- .../rebaseFixups/expected/repo/.git_keep/logs/HEAD | 14 --- .../expected/repo/.git_keep/logs/refs/heads/master | 9 -- .../10/56fd624d61daad06a8726c0ea5626820cafe59 | 2 - .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1d/7ab21ab5322589052cf9d2d62ca58677f454cc | 3 - .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../2a/627747a92ce8c274f7df0da3329616f69b9856 | Bin 152 -> 0 bytes .../2b/d4d58d29b60b5868c19437ff4467d84ed270aa | Bin 156 -> 0 bytes .../30/a685cfa43930aadd5b56b2ec0746564d1a1d22 | Bin 154 -> 0 bytes .../33/1be377b5889b19b5900bc4bed98b1c9cc40095 | Bin 152 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../4d/7b35df7f8ced30495fc0f62b91a270bad7076b | Bin 157 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../69/ebe8bf01f728a9bc787e8553694e36127b48c0 | Bin 148 -> 0 bytes .../77/741cf500de50347e9f4e5a091515e4568ddad3 | Bin 158 -> 0 bytes .../83/90c32b5e687b97e242da46498b574ace0e1eb5 | Bin 21 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../ac/e527b9737b6c554963361f50ce98a0509c2344 | Bin 153 -> 0 bytes .../ad/46c1683d660e21b4f13ad808420a4de18326b7 | 2 - .../b8/c4d6287efcb68cdffbac00ec15ffc25f575cc5 | Bin 119 -> 0 bytes .../ba/860ef885ce294ade006af8afda01a8cc584a12 | 2 - .../c8/07dfd74adc1e1b732025cab46cf56b4d193e74 | Bin 152 -> 0 bytes .../c8/738908c85292494dba61be9c050ad95ff0e182 | Bin 162 -> 0 bytes .../cc/01bf15804065932f5e50340902614b3c04c948 | Bin 127 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d1/3e563982268d8ab77ad47793a2b501dfe6a0dc | Bin 177 -> 0 bytes .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../dc/bade3308277dabb66de476c1cce03bd840d22a | Bin 159 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../e3/ad04c1fd3c9137b052ecb422855052f044d88f | Bin 21 -> 0 bytes .../ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 | Bin 127 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - test/integration/rebaseFixups/expected/repo/file0 | 1 - test/integration/rebaseFixups/expected/repo/file1 | 1 - test/integration/rebaseFixups/expected/repo/file2 | 1 - test/integration/rebaseFixups/expected/repo/file4 | 1 - test/integration/rebaseFixups/expected/repo/file5 | 1 - test/integration/rebaseFixups/expected/repo/file6 | 1 - test/integration/rebaseFixups/recording.json | 1 - test/integration/rebaseFixups/setup.sh | 37 ------ test/integration/rebaseFixups/test.json | 1 - .../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 353 -> 0 bytes .../expected/repo/.git_keep/info/exclude | 7 -- .../expected/repo/.git_keep/logs/HEAD | 4 - .../expected/repo/.git_keep/logs/refs/heads/master | 4 - .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../59/f4e88de812c15bf0fa7b224cdb361f7ede8931 | Bin 153 -> 0 bytes .../74/abc9e0d0ec8dd0f5ea872a851364206008ea2b | Bin 147 -> 0 bytes .../97/066d3866b8e5ead0b68fc746a02222408f28a3 | Bin 148 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d4/83ea1d742e44d9191f3e31e926d7621c513042 | Bin 127 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../e2/98537fd470f70bbb174d78f610fe49539cfe66 | 2 - .../expected/repo/.git_keep/refs/heads/master | 1 - .../rebaseRewordLastCommit/expected/repo/file0 | 1 - .../rebaseRewordLastCommit/expected/repo/file1 | 1 - .../rebaseRewordLastCommit/expected/repo/file2 | 1 - .../rebaseRewordLastCommit/expected/repo/file3 | 1 - .../rebaseRewordLastCommit/recording.json | 1 - test/integration/rebaseRewordLastCommit/setup.sh | 25 ---- test/integration/rebaseRewordLastCommit/test.json | 1 - .../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 | 10 -- .../expected/repo/.git_keep/description | 1 - .../expected/repo/.git_keep/index | Bin 334 -> 0 bytes .../expected/repo/.git_keep/info/exclude | 7 -- .../expected/repo/.git_keep/logs/HEAD | 9 -- .../expected/repo/.git_keep/logs/refs/heads/master | 4 - .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1b/cb7e30b3a5a5ae64397dcfe6b74cc18fc55784 | Bin 150 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../3c/3125afd7a6475dcdd4c4a6b20cc920b31eb96f | Bin 147 -> 0 bytes .../44/79c0a1c7e43a55a3a6909be88a810dbad3fc42 | Bin 118 -> 0 bytes .../64/7b9df53752363ecdc1d4c5cebe7d66e6132bfe | 4 - .../7c/5b8c907caad01842aa84e91b7d4724d57de4fd | Bin 149 -> 0 bytes .../9d/793e4fc04a0583eed7670d52fbb16b402f7499 | Bin 150 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../c0/793b482cdf9ca48686dbf56fc0a46e982003e1 | Bin 161 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d4/83ea1d742e44d9191f3e31e926d7621c513042 | Bin 127 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - .../rebaseRewordOldCommit/expected/repo/file0 | 1 - .../rebaseRewordOldCommit/expected/repo/file1 | 1 - .../rebaseRewordOldCommit/expected/repo/file2 | 1 - .../rebaseRewordOldCommit/expected/repo/file3 | 1 - .../rebaseRewordOldCommit/recording.json | 1 - test/integration/rebaseRewordOldCommit/setup.sh | 25 ---- test/integration/rebaseRewordOldCommit/test.json | 4 - .../expected/repo/.git_keep/COMMIT_EDITMSG | 15 --- .../expected/repo/.git_keep/FETCH_HEAD | 0 .../rebaseSwapping/expected/repo/.git_keep/HEAD | 1 - .../expected/repo/.git_keep/ORIG_HEAD | 1 - .../expected/repo/.git_keep/REBASE_HEAD | 1 - .../rebaseSwapping/expected/repo/.git_keep/config | 10 -- .../expected/repo/.git_keep/description | 1 - .../rebaseSwapping/expected/repo/.git_keep/index | Bin 448 -> 0 bytes .../expected/repo/.git_keep/info/exclude | 7 -- .../expected/repo/.git_keep/logs/HEAD | 10 -- .../expected/repo/.git_keep/logs/refs/heads/master | 7 -- .../0e/45fe2fb8b21adfe348ec5419bd87e4c796c02a | 2 - .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 | Bin 50 -> 0 bytes .../38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da | Bin 21 -> 0 bytes .../41/eefd8a741d391640c4e0528e0b6fff31f90a18 | Bin 157 -> 0 bytes .../44/e5064a45438ffa3e6e4a0f1444552e2199be97 | Bin 127 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../5e/6e75233f7d0501f030400c0b55d4c778b72b73 | Bin 65 -> 0 bytes .../61/3c1bfa180babe5e67317d1ef42d566718a7d8f | Bin 151 -> 0 bytes .../84/c7a918e6bd704aaf4f789ecaea479ab31d4741 | Bin 161 -> 0 bytes .../9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c | Bin 101 -> 0 bytes .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../ac/32b36c1b300cc79ad3f16dfb3c8a77ea7f4965 | Bin 118 -> 0 bytes .../b2/18d34eec545f29156411f24ab609b970082e1c | 4 - .../cc/01bf15804065932f5e50340902614b3c04c948 | Bin 127 -> 0 bytes .../ce/ada384bff8df54abb8acbf497b751aa9220f00 | Bin 153 -> 0 bytes .../d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 | 2 - .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../d2/3bcf26566cbf601e766d12ea206cb7827d6630 | Bin 147 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 | Bin 127 -> 0 bytes .../ff/8d9889fccee3b361f37c46c9f0de3f5ef6d70f | Bin 71 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - .../integration/rebaseSwapping/expected/repo/file0 | 1 - .../integration/rebaseSwapping/expected/repo/file1 | 1 - .../integration/rebaseSwapping/expected/repo/file2 | 1 - .../integration/rebaseSwapping/expected/repo/file4 | 1 - test/integration/rebaseSwapping/recording.json | 1 - test/integration/rebaseSwapping/setup.sh | 34 ------ test/integration/rebaseSwapping/test.json | 1 - .../squash/expected/repo/.git_keep/COMMIT_EDITMSG | 30 ----- .../squash/expected/repo/.git_keep/FETCH_HEAD | 0 .../squash/expected/repo/.git_keep/HEAD | 1 - .../squash/expected/repo/.git_keep/ORIG_HEAD | 1 - .../squash/expected/repo/.git_keep/config | 10 -- .../squash/expected/repo/.git_keep/description | 1 - .../squash/expected/repo/.git_keep/index | Bin 425 -> 0 bytes .../squash/expected/repo/.git_keep/info/exclude | 7 -- .../squash/expected/repo/.git_keep/logs/HEAD | 10 -- .../expected/repo/.git_keep/logs/refs/heads/master | 6 - .../07/5bd21694c75fd12e11cbd487eb64d831362e8c | Bin 157 -> 0 bytes .../0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 | Bin 52 -> 0 bytes .../18/0cf8328022becee9aaa2577a8f84ea2b9f3827 | Bin 21 -> 0 bytes .../1b/838df93e188ddacfce91d03dfcf1386ca57714 | Bin 128 -> 0 bytes .../2b/173c861df433fa43ffad13f80c8b312c5c8bce | Bin 103 -> 0 bytes .../2f/6174050380438f14b16658a356e762435ca591 | Bin 128 -> 0 bytes .../30/a1ca3481fdec3245b02aeacfb72ddfe2a433be | Bin 154 -> 0 bytes .../3c/752371dc0c58af7ff63f7a6c252da9f4d96251 | Bin 151 -> 0 bytes .../4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f | Bin 21 -> 0 bytes .../88/fb48b35f6ece4da3ad62dd3426bca0240d63a5 | Bin 149 -> 0 bytes .../9f/83377e9068d956fe3085934bb32ce22aeb4bf7 | 3 - .../a1/cf7798606057d592f8ef1bee884165b6f629f1 | 2 - .../a5/9b3d4800dcbf39ab31887402dc178e7b7f82a5 | 2 - .../a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 | Bin 21 -> 0 bytes .../a7/341a59f0ddeef969e69fb6368266d22b0f2416 | Bin 77 -> 0 bytes .../c5/9791a0d43d3e0a7ed0a40a62b7929acf675bf0 | 1 - .../d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 | Bin 21 -> 0 bytes .../df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b | Bin 21 -> 0 bytes .../expected/repo/.git_keep/refs/heads/master | 1 - test/integration/squash/expected/repo/myfile1 | 1 - test/integration/squash/expected/repo/myfile2 | 1 - test/integration/squash/expected/repo/myfile3 | 1 - test/integration/squash/expected/repo/myfile5 | 1 - test/integration/squash/recording.json | 1 - test/integration/squash/setup.sh | 26 ----- test/integration/squash/test.json | 1 - 353 files changed, 536 insertions(+), 972 deletions(-) create mode 100644 pkg/integration/tests/interactive_rebase/move.go create mode 100644 pkg/integration/tests/interactive_rebase/move_in_rebase.go delete mode 100644 pkg/integration/tests/interactive_rebase/one.go create mode 100644 pkg/integration/tests/interactive_rebase/rebase.go create mode 100644 pkg/integration/tests/interactive_rebase/reword_last_commit.go create mode 100644 pkg/integration/tests/interactive_rebase/swap_in_rebase_with_conflict.go create mode 100644 pkg/integration/tests/interactive_rebase/swap_with_conflict.go delete mode 100644 test/integration/rebase/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebase/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebase/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebase/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebase/expected/repo/.git_keep/config delete mode 100644 test/integration/rebase/expected/repo/.git_keep/description delete mode 100644 test/integration/rebase/expected/repo/.git_keep/index delete mode 100644 test/integration/rebase/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebase/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebase/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/18/24d7294d6d3524d83510db27086177a6db97bf delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/47/614f63053804bc596291b8f7cff3b460b1b3ee delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/57/8ebf1736e797b78fb670c718ebf177936eb2ef delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/e8/ece6af94d443b67962124243509d8f61a29758 delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/ec/fc5809e3397bbda6bd4c9f47267a8c5f22346c delete mode 100644 test/integration/rebase/expected/repo/.git_keep/objects/fa/af373a925c1e335894ebf4343a00a917f04edc delete mode 100644 test/integration/rebase/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebase/expected/repo/file0 delete mode 100644 test/integration/rebase/expected/repo/file1 delete mode 100644 test/integration/rebase/expected/repo/file2 delete mode 100644 test/integration/rebase/expected/repo/file4 delete mode 100644 test/integration/rebase/recording.json delete mode 100644 test/integration/rebase/setup.sh delete mode 100644 test/integration/rebase/test.json delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/MERGE_MSG delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/REBASE_HEAD delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/config delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/description delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/index delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/26/d430fb59900099e9992a3c79f30e42309cdce3 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/4a/edafb1a5d371825cbfea5ffcf2692cc786a1bf delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/61/baf480bb5ddfad6d66c785b321d4aadd5367b4 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/8d/3ce0d821345b25fef1188e48cba4a1d44c30be delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/bb/c22338ee174004f5c5fa117688249bc5b7e205 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/bc/e4745137c540943900ca78e4b31dd1315bf57c delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/c3/6e808d2fa61e16952b7d0ffb8f18d08156cc94 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/c3/901284a9e7fc063d6fa7f0c5797d031445ba45 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/cc/01bf15804065932f5e50340902614b3c04c948 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/f9/4292928d0bc034fe88c753306b1959300e1264 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/objects/ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 delete mode 100644 test/integration/rebase2/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebase2/expected/repo/file0 delete mode 100644 test/integration/rebase2/expected/repo/file1 delete mode 100644 test/integration/rebase2/expected/repo/file2 delete mode 100644 test/integration/rebase2/expected/repo/file4 delete mode 100644 test/integration/rebase2/recording.json delete mode 100644 test/integration/rebase2/setup.sh delete mode 100644 test/integration/rebase2/test.json delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/config delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/description delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/index delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/3c/21f03d819ae34b74084712c3ef1b9b99b2f40e delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/4b/f6ae41c5ef2186c87f5f39dbb8cadd76c597cc delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/51/a0e4a6635c22a062a48b7134dd556541a1e06c delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/7b/42ba8a9f370bbbf0db85c5aca61f4e8a7b3d26 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/8f/2acebb8a7a83cfaf3cffc6a9103f633f5cf292 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/9e/68fbe4291e7416d50587d9b6968aa5ceeccff9 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/cc/01bf15804065932f5e50340902614b3c04c948 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/d8/ae31faf375fd293cedb0c88c41a9c7a77a2530 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/f0/6dfb4e9e5a9dfab869590058f2c1ce1c72b2ac delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/fd/ecf9e3e742db4c8690d56b328b2533e67d2866 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/objects/ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 delete mode 100644 test/integration/rebase3/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebase3/expected/repo/file0 delete mode 100644 test/integration/rebase3/expected/repo/file1 delete mode 100644 test/integration/rebase3/expected/repo/file2 delete mode 100644 test/integration/rebase3/expected/repo/file4 delete mode 100644 test/integration/rebase3/recording.json delete mode 100644 test/integration/rebase3/setup.sh delete mode 100644 test/integration/rebase3/test.json delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/config delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/description delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/index delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/0d/633de5bd380e6b42e03ec1e7a055ba4f3c860d delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/12/ed10a6439eadfdb8877e39b7c6547591a0a91c delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/1d/197a4c509a5e71bad9b0b439c8fd26323ff218 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/4a/e4346ad59bf70d5ba07184af5a138b6a65c224 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/4d/c7f318f68fe1890dba6fb595009c4652c0a861 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/74/d431c56eac1e359f6f5736978347af68af5702 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/76/79fc004a4a40da12907d72ccef14991976aaff delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/7b/01314ccdeccc57cee454feca6369237410e786 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/8a/db7457de59c3945566ce7675a31bbf048b38ee delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/cc/01bf15804065932f5e50340902614b3c04c948 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/db/ab7e62cd7517f73425d46120a931a59c8eda6e delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/objects/ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/file0 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/file1 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/file2 delete mode 100644 test/integration/rebaseFixupAndSquash/expected/repo/file4 delete mode 100644 test/integration/rebaseFixupAndSquash/recording.json delete mode 100644 test/integration/rebaseFixupAndSquash/setup.sh delete mode 100644 test/integration/rebaseFixupAndSquash/test.json delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/config delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/description delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/index delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/10/56fd624d61daad06a8726c0ea5626820cafe59 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/1d/7ab21ab5322589052cf9d2d62ca58677f454cc delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/2a/627747a92ce8c274f7df0da3329616f69b9856 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/2b/d4d58d29b60b5868c19437ff4467d84ed270aa delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/30/a685cfa43930aadd5b56b2ec0746564d1a1d22 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/33/1be377b5889b19b5900bc4bed98b1c9cc40095 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/4d/7b35df7f8ced30495fc0f62b91a270bad7076b delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/69/ebe8bf01f728a9bc787e8553694e36127b48c0 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/77/741cf500de50347e9f4e5a091515e4568ddad3 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/83/90c32b5e687b97e242da46498b574ace0e1eb5 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/ac/e527b9737b6c554963361f50ce98a0509c2344 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/ad/46c1683d660e21b4f13ad808420a4de18326b7 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/b8/c4d6287efcb68cdffbac00ec15ffc25f575cc5 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/ba/860ef885ce294ade006af8afda01a8cc584a12 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/c8/07dfd74adc1e1b732025cab46cf56b4d193e74 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/c8/738908c85292494dba61be9c050ad95ff0e182 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/cc/01bf15804065932f5e50340902614b3c04c948 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/d1/3e563982268d8ab77ad47793a2b501dfe6a0dc delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/dc/bade3308277dabb66de476c1cce03bd840d22a delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/e3/ad04c1fd3c9137b052ecb422855052f044d88f delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/objects/ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 delete mode 100644 test/integration/rebaseFixups/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebaseFixups/expected/repo/file0 delete mode 100644 test/integration/rebaseFixups/expected/repo/file1 delete mode 100644 test/integration/rebaseFixups/expected/repo/file2 delete mode 100644 test/integration/rebaseFixups/expected/repo/file4 delete mode 100644 test/integration/rebaseFixups/expected/repo/file5 delete mode 100644 test/integration/rebaseFixups/expected/repo/file6 delete mode 100644 test/integration/rebaseFixups/recording.json delete mode 100644 test/integration/rebaseFixups/setup.sh delete mode 100644 test/integration/rebaseFixups/test.json delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/config delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/description delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/index delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/59/f4e88de812c15bf0fa7b224cdb361f7ede8931 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/74/abc9e0d0ec8dd0f5ea872a851364206008ea2b delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/97/066d3866b8e5ead0b68fc746a02222408f28a3 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/d4/83ea1d742e44d9191f3e31e926d7621c513042 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/objects/e2/98537fd470f70bbb174d78f610fe49539cfe66 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/file0 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/file1 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/file2 delete mode 100644 test/integration/rebaseRewordLastCommit/expected/repo/file3 delete mode 100644 test/integration/rebaseRewordLastCommit/recording.json delete mode 100644 test/integration/rebaseRewordLastCommit/setup.sh delete mode 100644 test/integration/rebaseRewordLastCommit/test.json delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/config delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/description delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/index delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/1b/cb7e30b3a5a5ae64397dcfe6b74cc18fc55784 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/3c/3125afd7a6475dcdd4c4a6b20cc920b31eb96f delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/44/79c0a1c7e43a55a3a6909be88a810dbad3fc42 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/64/7b9df53752363ecdc1d4c5cebe7d66e6132bfe delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/7c/5b8c907caad01842aa84e91b7d4724d57de4fd delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/9d/793e4fc04a0583eed7670d52fbb16b402f7499 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/c0/793b482cdf9ca48686dbf56fc0a46e982003e1 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/d4/83ea1d742e44d9191f3e31e926d7621c513042 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/file0 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/file1 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/file2 delete mode 100644 test/integration/rebaseRewordOldCommit/expected/repo/file3 delete mode 100644 test/integration/rebaseRewordOldCommit/recording.json delete mode 100644 test/integration/rebaseRewordOldCommit/setup.sh delete mode 100644 test/integration/rebaseRewordOldCommit/test.json delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/REBASE_HEAD delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/config delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/description delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/index delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/0e/45fe2fb8b21adfe348ec5419bd87e4c796c02a delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/1e/3e67b999db1576ad1ee08bf4f02bdf29e49442 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/38/143ad4a0fe2ab6ee53c2ef89a5d9e2bd9535da delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/41/eefd8a741d391640c4e0528e0b6fff31f90a18 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/44/e5064a45438ffa3e6e4a0f1444552e2199be97 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/5e/6e75233f7d0501f030400c0b55d4c778b72b73 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/61/3c1bfa180babe5e67317d1ef42d566718a7d8f delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/84/c7a918e6bd704aaf4f789ecaea479ab31d4741 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/9e/88a70dc8d82dd2afbfd50176ef78e18823bc2c delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/ac/32b36c1b300cc79ad3f16dfb3c8a77ea7f4965 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/b2/18d34eec545f29156411f24ab609b970082e1c delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/cc/01bf15804065932f5e50340902614b3c04c948 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/ce/ada384bff8df54abb8acbf497b751aa9220f00 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/d0/76cc9cc09acaa2d36fbc7a95fd3e2306494641 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/d2/3bcf26566cbf601e766d12ea206cb7827d6630 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/ff/3fb62dafc2fdd0c81ed64bc132b53584e5e1e2 delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/objects/ff/8d9889fccee3b361f37c46c9f0de3f5ef6d70f delete mode 100644 test/integration/rebaseSwapping/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/rebaseSwapping/expected/repo/file0 delete mode 100644 test/integration/rebaseSwapping/expected/repo/file1 delete mode 100644 test/integration/rebaseSwapping/expected/repo/file2 delete mode 100644 test/integration/rebaseSwapping/expected/repo/file4 delete mode 100644 test/integration/rebaseSwapping/recording.json delete mode 100644 test/integration/rebaseSwapping/setup.sh delete mode 100644 test/integration/rebaseSwapping/test.json delete mode 100644 test/integration/squash/expected/repo/.git_keep/COMMIT_EDITMSG delete mode 100644 test/integration/squash/expected/repo/.git_keep/FETCH_HEAD delete mode 100644 test/integration/squash/expected/repo/.git_keep/HEAD delete mode 100644 test/integration/squash/expected/repo/.git_keep/ORIG_HEAD delete mode 100644 test/integration/squash/expected/repo/.git_keep/config delete mode 100644 test/integration/squash/expected/repo/.git_keep/description delete mode 100644 test/integration/squash/expected/repo/.git_keep/index delete mode 100644 test/integration/squash/expected/repo/.git_keep/info/exclude delete mode 100644 test/integration/squash/expected/repo/.git_keep/logs/HEAD delete mode 100644 test/integration/squash/expected/repo/.git_keep/logs/refs/heads/master delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/07/5bd21694c75fd12e11cbd487eb64d831362e8c delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/0e/6cf0a6b79e8d44e186d812a1f74b43d64fac52 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/18/0cf8328022becee9aaa2577a8f84ea2b9f3827 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/1b/838df93e188ddacfce91d03dfcf1386ca57714 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/2b/173c861df433fa43ffad13f80c8b312c5c8bce delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/2f/6174050380438f14b16658a356e762435ca591 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/30/a1ca3481fdec3245b02aeacfb72ddfe2a433be delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/3c/752371dc0c58af7ff63f7a6c252da9f4d96251 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/4f/346f1ad5ba2917da2109e2eaa2f2dfbb86f10f delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/88/fb48b35f6ece4da3ad62dd3426bca0240d63a5 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/9f/83377e9068d956fe3085934bb32ce22aeb4bf7 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/a1/cf7798606057d592f8ef1bee884165b6f629f1 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/a5/9b3d4800dcbf39ab31887402dc178e7b7f82a5 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/a5/bce3fd2565d8f458555a0c6f42d0504a848bd5 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/a7/341a59f0ddeef969e69fb6368266d22b0f2416 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/c5/9791a0d43d3e0a7ed0a40a62b7929acf675bf0 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/d2/34c5e057fe32c676ea67e8cb38f4625ddaeb54 delete mode 100644 test/integration/squash/expected/repo/.git_keep/objects/df/6b0d2bcc76e6ec0fca20c227104a4f28bac41b delete mode 100644 test/integration/squash/expected/repo/.git_keep/refs/heads/master delete mode 100644 test/integration/squash/expected/repo/myfile1 delete mode 100644 test/integration/squash/expected/repo/myfile2 delete mode 100644 test/integration/squash/expected/repo/myfile3 delete mode 100644 test/integration/squash/expected/repo/myfile5 delete mode 100644 test/integration/squash/recording.json delete mode 100644 test/integration/squash/setup.sh delete mode 100644 test/integration/squash/test.json diff --git a/pkg/commands/git_commands/rebase.go b/pkg/commands/git_commands/rebase.go index 50ab4de7a..cff9b961a 100644 --- a/pkg/commands/git_commands/rebase.go +++ b/pkg/commands/git_commands/rebase.go @@ -95,17 +95,15 @@ func (self *RebaseCommands) GenericAmend(commits []*models.Commit, index int, f } func (self *RebaseCommands) MoveCommitDown(commits []*models.Commit, index int) error { - // we must ensure that we have at least two commits after the selected one - if len(commits) <= index+2 { - // assuming they aren't picking the bottom commit - return errors.New(self.Tr.NoRoom) - } - - orderedCommits := append(commits[0:index], commits[index+1], commits[index]) + // not appending to original slice so that we don't mutate it + orderedCommits := append([]*models.Commit{}, commits[0:index]...) + orderedCommits = append(orderedCommits, commits[index+1], commits[index]) todoLines := self.BuildTodoLinesSingleAction(orderedCommits, "pick") - return self.PrepareInteractiveRebaseCommand(commits[index+2].Sha, todoLines, true).Run() + baseShaOrRoot := getBaseShaOrRoot(commits, index+2) + + return self.PrepareInteractiveRebaseCommand(baseShaOrRoot, todoLines, true).Run() } func (self *RebaseCommands) InteractiveRebase(commits []*models.Commit, index int, action string) error { @@ -189,12 +187,9 @@ func (self *RebaseCommands) BuildSingleActionTodo(commits []*models.Commit, acti } }) - baseSha := "--root" - if baseIndex < len(commits) { - baseSha = commits[baseIndex].Sha - } + baseShaOrRoot := getBaseShaOrRoot(commits, baseIndex) - return todoLines, baseSha, nil + return todoLines, baseShaOrRoot, nil } // AmendTo amends the given commit with whatever files are staged @@ -418,3 +413,17 @@ func (self *TodoLine) ToString() string { return self.Action + " " + self.Commit.Sha + " " + self.Commit.Name + "\n" } } + +// we can't start an interactive rebase from the first commit without passing the +// '--root' arg +func getBaseShaOrRoot(commits []*models.Commit, index int) string { + // We assume that the commits slice contains the initial commit of the repo. + // Technically this assumption could prove false, but it's unlikely you'll + // be starting a rebase from 300 commits ago (which is the original commit limit + // at time of writing) + if index < len(commits) { + return commits[index].Sha + } else { + return "--root" + } +} diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go index 6465dd292..01a531bc9 100644 --- a/pkg/gui/controllers/local_commits_controller.go +++ b/pkg/gui/controllers/local_commits_controller.go @@ -358,6 +358,12 @@ func (self *LocalCommitsController) handleMidRebaseCommand(action string, commit func (self *LocalCommitsController) moveDown(commit *models.Commit) error { index := self.context().GetSelectedLineIdx() commits := self.model.Commits + + // can't move past the initial commit + if index >= len(commits)-1 { + return nil + } + if commit.Status == "rebasing" { if commits[index+1].Status != "rebasing" { return nil diff --git a/pkg/integration/tests/interactive_rebase/move.go b/pkg/integration/tests/interactive_rebase/move.go new file mode 100644 index 000000000..e7679a793 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/move.go @@ -0,0 +1,84 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/components" +) + +var Move = NewIntegrationTest(NewIntegrationTestArgs{ + Description: "Directly move a commit all the way down and all the way back up", + ExtraCmdArgs: "", + Skip: false, + SetupConfig: func(config *config.AppConfig) {}, + SetupRepo: func(shell *Shell) { + shell.CreateNCommits(4) + }, + Run: func(t *TestDriver, keys config.KeybindingConfig) { + t.Views().Commits(). + Focus(). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 04").IsSelected(), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 04").IsSelected(), + Contains("commit 01"), + ). + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + Contains("commit 04").IsSelected(), + ). + // assert nothing happens upon trying to move beyond the last commit + Press(keys.Commits.MoveDownCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + Contains("commit 04").IsSelected(), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 04").IsSelected(), + Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 03"), + Contains("commit 04").IsSelected(), + Contains("commit 02"), + Contains("commit 01"), + ). + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ). + // assert nothing happens upon trying to move beyond the first commit + Press(keys.Commits.MoveUpCommit). + Lines( + Contains("commit 04").IsSelected(), + Contains("commit 03"), + Contains("commit 02"), + Contains("commit 01"), + ) + }, +}) diff --git a/pkg/integration/tests/interactive_rebase/move_in_rebase.go b/pkg/integration/tests/interactive_rebase/move_in_rebase.go new file mode 100644 index 000000000..daeedbf87 --- /dev/null +++ b/pkg/integration/tests/interactive_rebase/move_in_rebase.go @@ -0,0 +1,96 @@ +package interactive_rebase + +import ( + "github.com/jesseduffield/lazygit/pkg/config" + . "github.com/jesseduffield/lazygit/pkg/integration/