From ad1468f66f8af1724a99bc4c1a653ac71c6cadcb Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Sat, 20 Mar 2021 12:07:11 +1100 Subject: [PATCH] better handling of discarding files --- pkg/commands/files.go | 23 ++++++- pkg/commands/git_test.go | 11 ++++ pkg/commands/loading_files.go | 1 + pkg/commands/models/file.go | 1 + pkg/gui/gui.go | 3 +- .../expected/.git_keep/COMMIT_EDITMSG | 1 + .../expected/.git_keep/FETCH_HEAD | 0 .../expected/.git_keep/HEAD | 1 + .../expected/.git_keep/MERGE_HEAD | 1 + .../expected/.git_keep/MERGE_MODE | 0 .../expected/.git_keep/MERGE_MSG | 10 +++ .../expected/.git_keep/ORIG_HEAD | 1 + .../expected/.git_keep/config | 10 +++ .../expected/.git_keep/description | 1 + .../expected/.git_keep/index | Bin 0 -> 1504 bytes .../expected/.git_keep/info/exclude | 7 ++ .../expected/.git_keep/logs/HEAD | 7 ++ .../.git_keep/logs/refs/heads/conflict | 3 + .../.git_keep/logs/refs/heads/conflict_second | 3 + .../0e/5c9fd43732ca064946e9c582fd6f159774db84 | 2 + .../15/fe7f43604da957ffb663b4db95b60d0af66469 | Bin 0 -> 48 bytes .../1c/9488b0e1b8abd1ec8645b3345bdac91290b464 | Bin 0 -> 350 bytes .../26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 | Bin 0 -> 19 bytes .../2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d | Bin 0 -> 27 bytes .../30/07c9c07bf80aaa72b1f1f704e7fea622446678 | Bin 0 -> 342 bytes .../38/b645bf2388b21695d22d7f673d87971a78e4ad | Bin 0 -> 146 bytes .../3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f | Bin 0 -> 30 bytes .../47/966dcaa8ee736e89279b895faf8707de898e04 | Bin 0 -> 30 bytes .../48/f9387742d3cc3017c1a7e292c9187e35321753 | Bin 0 -> 31 bytes .../4d/8452fc76beed0c7b15e40e45d06922bf746c5f | Bin 0 -> 20 bytes .../59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b | Bin 0 -> 351 bytes .../5a/d28e22767f979da2c198dc6c1003b25964e3da | Bin 0 -> 20 bytes .../5b/e4a414b32cf4204f889469942986d3d783da84 | Bin 0 -> 23 bytes .../69/8e214196fed018bb4164380745dd2df3bbac74 | Bin 0 -> 180 bytes .../7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 | Bin 0 -> 30 bytes .../89/44a13fdfc597e4cf1d23797df51977680f8e77 | Bin 0 -> 21 bytes .../90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 | Bin 0 -> 20 bytes .../90/be1f3056c4f471f977a28497b8d4b392c55a02 | Bin 0 -> 22 bytes .../9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 | Bin 0 -> 20 bytes .../9f/5118ee216a6e44728305f90633b0c0e2ad235c | Bin 0 -> 21 bytes .../a1/be04124078e38a592c153942bf75edf210f1ed | Bin 0 -> 48 bytes .../a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c | Bin 0 -> 30 bytes .../ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 | Bin 0 -> 19 bytes .../c6/4dd6aea3efd197ed630dedc1ffb538d35c3fdb | 2 + .../ce/e08babc6b109f011f42eaba5f79e6e693c09e7 | Bin 0 -> 349 bytes .../d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 | Bin 0 -> 27 bytes .../d7/98b86744c3997c186e0f0dc666f02943c797a7 | Bin 0 -> 22 bytes .../e9/55de60e73263440d4651e79e947ec8b2902373 | Bin 0 -> 351 bytes .../eb/4814e3f9d5eb1869704cf4498420c9f4a141da | 1 + .../fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 | Bin 0 -> 20 bytes .../expected/.git_keep/refs/heads/conflict | 1 + .../.git_keep/refs/heads/conflict_second | 1 + .../expected/both-added.txt | 1 + .../expected/both-modded.txt | 1 + .../expected/change-delete.txt | 1 + .../expected/changed-them-added-us.txt | 1 + .../expected/delete-change.txt | 1 + .../expected/deleted-staged.txt | 1 + .../expected/deleted-them.txt | 1 + .../discardFileChanges/expected/deleted.txt | 1 + .../expected/double-modded.txt | 1 + .../expected/modded-staged.txt | 1 + .../discardFileChanges/expected/modded.txt | 1 + .../discardFileChanges/expected/renamed.txt | 1 + .../discardFileChanges/recording.json | 1 + test/integration/discardFileChanges/setup.sh | 62 ++++++++++++++++++ test/integration/discardFileChanges/test.json | 1 + 67 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 test/integration/discardFileChanges/expected/.git_keep/COMMIT_EDITMSG create mode 100644 test/integration/discardFileChanges/expected/.git_keep/FETCH_HEAD create mode 100644 test/integration/discardFileChanges/expected/.git_keep/HEAD create mode 100644 test/integration/discardFileChanges/expected/.git_keep/MERGE_HEAD create mode 100644 test/integration/discardFileChanges/expected/.git_keep/MERGE_MODE create mode 100644 test/integration/discardFileChanges/expected/.git_keep/MERGE_MSG create mode 100644 test/integration/discardFileChanges/expected/.git_keep/ORIG_HEAD create mode 100644 test/integration/discardFileChanges/expected/.git_keep/config create mode 100644 test/integration/discardFileChanges/expected/.git_keep/description create mode 100644 test/integration/discardFileChanges/expected/.git_keep/index create mode 100644 test/integration/discardFileChanges/expected/.git_keep/info/exclude create mode 100644 test/integration/discardFileChanges/expected/.git_keep/logs/HEAD create mode 100644 test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict create mode 100644 test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict_second create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/0e/5c9fd43732ca064946e9c582fd6f159774db84 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/38/b645bf2388b21695d22d7f673d87971a78e4ad create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/69/8e214196fed018bb4164380745dd2df3bbac74 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/c6/4dd6aea3efd197ed630dedc1ffb538d35c3fdb create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/eb/4814e3f9d5eb1869704cf4498420c9f4a141da create mode 100644 test/integration/discardFileChanges/expected/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 create mode 100644 test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict create mode 100644 test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict_second create mode 100644 test/integration/discardFileChanges/expected/both-added.txt create mode 100644 test/integration/discardFileChanges/expected/both-modded.txt create mode 100644 test/integration/discardFileChanges/expected/change-delete.txt create mode 100644 test/integration/discardFileChanges/expected/changed-them-added-us.txt create mode 100644 test/integration/discardFileChanges/expected/delete-change.txt create mode 100644 test/integration/discardFileChanges/expected/deleted-staged.txt create mode 100644 test/integration/discardFileChanges/expected/deleted-them.txt create mode 100644 test/integration/discardFileChanges/expected/deleted.txt create mode 100644 test/integration/discardFileChanges/expected/double-modded.txt create mode 100644 test/integration/discardFileChanges/expected/modded-staged.txt create mode 100644 test/integration/discardFileChanges/expected/modded.txt create mode 100644 test/integration/discardFileChanges/expected/renamed.txt create mode 100644 test/integration/discardFileChanges/recording.json create mode 100644 test/integration/discardFileChanges/setup.sh create mode 100644 test/integration/discardFileChanges/test.json diff --git a/pkg/commands/files.go b/pkg/commands/files.go index 00b32e732..55a5f55d3 100644 --- a/pkg/commands/files.go +++ b/pkg/commands/files.go @@ -107,15 +107,34 @@ func (c *GitCommand) DiscardAllFileChanges(file *models.File) error { return nil } - // if the file isn't tracked, we assume you want to delete it quotedFileName := c.OSCommand.Quote(file.Name) + + if file.ShortStatus == "AA" { + if err := c.OSCommand.RunCommand("git checkout --ours -- %s", quotedFileName); err != nil { + return err + } + if err := c.OSCommand.RunCommand("git add %s", quotedFileName); err != nil { + return err + } + return nil + } + + if file.ShortStatus == "DU" { + return c.OSCommand.RunCommand("git rm %s", quotedFileName) + } + + // if the file isn't tracked, we assume you want to delete it if file.HasStagedChanges || file.HasMergeConflicts { if err := c.OSCommand.RunCommand("git reset -- %s", quotedFileName); err != nil { return err } } - if !file.Tracked { + if file.ShortStatus == "DD" || file.ShortStatus == "AU" { + return nil + } + + if file.Added { return c.removeFile(file.Name) } return c.DiscardUnstagedFileChanges(file) diff --git a/pkg/commands/git_test.go b/pkg/commands/git_test.go index 1f290fbc0..9eea0c34c 100644 --- a/pkg/commands/git_test.go +++ b/pkg/commands/git_test.go @@ -344,6 +344,7 @@ func TestGitCommandGetStatusFiles(t *testing.T) { HasStagedChanges: true, HasUnstagedChanges: true, Tracked: true, + Added: false, Deleted: false, HasMergeConflicts: false, HasInlineMergeConflicts: false, @@ -356,6 +357,7 @@ func TestGitCommandGetStatusFiles(t *testing.T) { HasStagedChanges: true, HasUnstagedChanges: false, Tracked: false, + Added: true, Deleted: false, HasMergeConflicts: false, HasInlineMergeConflicts: false, @@ -368,6 +370,7 @@ func TestGitCommandGetStatusFiles(t *testing.T) { HasStagedChanges: true, HasUnstagedChanges: true, Tracked: false, + Added: true, Deleted: false, HasMergeConflicts: false, HasInlineMergeConflicts: false, @@ -380,6 +383,7 @@ func TestGitCommandGetStatusFiles(t *testing.T) { HasStagedChanges: false, HasUnstagedChanges: true, Tracked: false, + Added: true, Deleted: false, HasMergeConflicts: false, HasInlineMergeConflicts: false, @@ -392,6 +396,7 @@ func TestGitCommandGetStatusFiles(t *testing.T) { HasStagedChanges: false, HasUnstagedChanges: true, Tracked: true, + Added: false, Deleted: false, HasMergeConflicts: true, HasInlineMergeConflicts: true, @@ -1093,6 +1098,9 @@ func TestGitCommandUnstageFile(t *testing.T) { } // TestGitCommandDiscardAllFileChanges is a function. +// these tests don't cover everything, in part because we already have an integration +// test which does cover everything. I don't want to unnecessarily assert on the 'how' +// when the 'what' is what matters func TestGitCommandDiscardAllFileChanges(t *testing.T) { type scenario struct { testName string @@ -1146,6 +1154,7 @@ func TestGitCommandDiscardAllFileChanges(t *testing.T) { &models.File{ Name: "test", Tracked: false, + Added: true, }, func(string) error { return fmt.Errorf("an error occurred when removing file") @@ -1277,6 +1286,7 @@ func TestGitCommandDiscardAllFileChanges(t *testing.T) { &models.File{ Name: "test", Tracked: false, + Added: true, HasStagedChanges: true, }, func(filename string) error { @@ -1301,6 +1311,7 @@ func TestGitCommandDiscardAllFileChanges(t *testing.T) { &models.File{ Name: "test", Tracked: false, + Added: true, HasStagedChanges: false, }, func(filename string) error { diff --git a/pkg/commands/loading_files.go b/pkg/commands/loading_files.go index 2bf77a865..f2a285f58 100644 --- a/pkg/commands/loading_files.go +++ b/pkg/commands/loading_files.go @@ -50,6 +50,7 @@ func (c *GitCommand) GetStatusFiles(opts GetStatusFileOptions) []*models.File { HasUnstagedChanges: unstagedChange != " ", Tracked: !untracked, Deleted: unstagedChange == "D" || stagedChange == "D", + Added: unstagedChange == "A" || untracked, HasMergeConflicts: hasMergeConflicts, HasInlineMergeConflicts: hasInlineMergeConflicts, Type: c.OSCommand.FileType(filename), diff --git a/pkg/commands/models/file.go b/pkg/commands/models/file.go index 482ba5cb5..4e20b7708 100644 --- a/pkg/commands/models/file.go +++ b/pkg/commands/models/file.go @@ -13,6 +13,7 @@ type File struct { HasStagedChanges bool HasUnstagedChanges bool Tracked bool + Added bool Deleted bool HasMergeConflicts bool HasInlineMergeConflicts bool diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index f266c2464..77bd82f63 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -451,6 +451,7 @@ func (gui *Gui) Run() error { if err != nil { return err } + gui.g = g // TODO: always use gui.g rather than passing g around everywhere defer g.Close() if recordEvents { @@ -478,8 +479,6 @@ func (gui *Gui) Run() error { g.Mouse = true } - gui.g = g // TODO: always use gui.g rather than passing g around everywhere - if err := gui.setColorScheme(); err != nil { return err } diff --git a/test/integration/discardFileChanges/expected/.git_keep/COMMIT_EDITMSG b/test/integration/discardFileChanges/expected/.git_keep/COMMIT_EDITMSG new file mode 100644 index 000000000..2bdf67abb --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/COMMIT_EDITMSG @@ -0,0 +1 @@ +three diff --git a/test/integration/discardFileChanges/expected/.git_keep/FETCH_HEAD b/test/integration/discardFileChanges/expected/.git_keep/FETCH_HEAD new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration/discardFileChanges/expected/.git_keep/HEAD b/test/integration/discardFileChanges/expected/.git_keep/HEAD new file mode 100644 index 000000000..52c2dc641 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/HEAD @@ -0,0 +1 @@ +ref: refs/heads/conflict_second diff --git a/test/integration/discardFileChanges/expected/.git_keep/MERGE_HEAD b/test/integration/discardFileChanges/expected/.git_keep/MERGE_HEAD new file mode 100644 index 000000000..6d6a6623d --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/MERGE_HEAD @@ -0,0 +1 @@ +38b645bf2388b21695d22d7f673d87971a78e4ad diff --git a/test/integration/discardFileChanges/expected/.git_keep/MERGE_MODE b/test/integration/discardFileChanges/expected/.git_keep/MERGE_MODE new file mode 100644 index 000000000..e69de29bb diff --git a/test/integration/discardFileChanges/expected/.git_keep/MERGE_MSG b/test/integration/discardFileChanges/expected/.git_keep/MERGE_MSG new file mode 100644 index 000000000..d6189997a --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/MERGE_MSG @@ -0,0 +1,10 @@ +Merge branch 'conflict' into conflict_second + +# Conflicts: +# added-them-changed-us.txt +# both-added.txt +# both-deleted.txt +# both-modded.txt +# changed-them-added-us.txt +# deleted-them.txt +# deleted-us.txt diff --git a/test/integration/discardFileChanges/expected/.git_keep/ORIG_HEAD b/test/integration/discardFileChanges/expected/.git_keep/ORIG_HEAD new file mode 100644 index 000000000..07e446d60 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/ORIG_HEAD @@ -0,0 +1 @@ +c64dd6aea3efd197ed630dedc1ffb538d35c3fdb diff --git a/test/integration/discardFileChanges/expected/.git_keep/config b/test/integration/discardFileChanges/expected/.git_keep/config new file mode 100644 index 000000000..8ae104545 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/config @@ -0,0 +1,10 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true + precomposeunicode = true +[user] + email = CI@example.com + name = CI diff --git a/test/integration/discardFileChanges/expected/.git_keep/description b/test/integration/discardFileChanges/expected/.git_keep/description new file mode 100644 index 000000000..498b267a8 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/integration/discardFileChanges/expected/.git_keep/index b/test/integration/discardFileChanges/expected/.git_keep/index new file mode 100644 index 0000000000000000000000000000000000000000..68453567499898accafe934dbf1f3db0962f01cb GIT binary patch literal 1504 zcmZ?q402{*U|<4bo`g_eUDk~i!7!SUfq{ihAXc7%p>YWV1LIeq8WA97>vUOYfB)$8 zC+B6AD{H?>mS^zyl{4@q<(FjWCZ?pMrs$PalmOK+fXq?y`VTf2L_^I}MKh1}*W})r z-`>R>O*+eO{43>e#`T^@FB$m3=H=!i83;1ZQ1n_CjE0)0iDn+3`?TCsE8Z37b*j(q zj9=f*ey_8Sg+VYmBQY;MRW~IyC$%IM>_nhBI!yK(#9=hVyqLFW=CRIQw|-}v&liKx zb(8mPSby#KMVI|c7$hO)rRbJqq~=2Wty@|QGgnVwWjY7YTrdrFryiQQd~0pT3+y0A?=8|Bx65nxoH?qaq2Tq3$$CGY`8vxuNDki~>0ilz#N3*3Wi_(NOcO z(9GkrufFlEv;E4$?Ed`a-!>F?J4x`$1H&=DG$|)l7byjS%+dH7%m<^P=Gmf|$D-D7 z{_fuS3v5_t9plx06BoJguu~(0AjBZ#U<8?C_Hl+3jE0(LPn3CFNDc%07VKXG@ydkn zK=Z&f)I4DRM9F`ARZ8pUN^;zYv+>TIm^C}6*e3Mk1P1P+)V#!8ln4$9a&-k7&BmZ> zs9?Yq=5n81(LjUU)&AV4?{&(IB zY{iOiOVFRPeQ$ZHMW67wUdUA1Uy>6K3kA%K4EG{-mto`pR5uwgL|y7rDyyG9chSKa zcX9-nH$|pAzJ)C_!3=`N13W;WjQN2Q?-aB0T#A}mf3g{GIPhq#att 1616203051 +1100 commit (initial): one +0e5c9fd43732ca064946e9c582fd6f159774db84 eb4814e3f9d5eb1869704cf4498420c9f4a141da CI 1616203051 +1100 commit: both-deleted.txt renamed in added-them-changed-us.txt +eb4814e3f9d5eb1869704cf4498420c9f4a141da 38b645bf2388b21695d22d7f673d87971a78e4ad CI 1616203051 +1100 commit: two +38b645bf2388b21695d22d7f673d87971a78e4ad 0e5c9fd43732ca064946e9c582fd6f159774db84 CI 1616203051 +1100 checkout: moving from conflict to conflict_second +0e5c9fd43732ca064946e9c582fd6f159774db84 698e214196fed018bb4164380745dd2df3bbac74 CI 1616203051 +1100 commit: both-deleted.txt renamed in changed-them-added-us.txt +698e214196fed018bb4164380745dd2df3bbac74 c64dd6aea3efd197ed630dedc1ffb538d35c3fdb CI 1616203052 +1100 commit: three +c64dd6aea3efd197ed630dedc1ffb538d35c3fdb c64dd6aea3efd197ed630dedc1ffb538d35c3fdb CI 1616203052 +1100 reset: moving to conflict_second diff --git a/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict b/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict new file mode 100644 index 000000000..4827c7871 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 0e5c9fd43732ca064946e9c582fd6f159774db84 CI 1616203051 +1100 commit (initial): one +0e5c9fd43732ca064946e9c582fd6f159774db84 eb4814e3f9d5eb1869704cf4498420c9f4a141da CI 1616203051 +1100 commit: both-deleted.txt renamed in added-them-changed-us.txt +eb4814e3f9d5eb1869704cf4498420c9f4a141da 38b645bf2388b21695d22d7f673d87971a78e4ad CI 1616203051 +1100 commit: two diff --git a/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict_second b/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict_second new file mode 100644 index 000000000..0e1748048 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/logs/refs/heads/conflict_second @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 0e5c9fd43732ca064946e9c582fd6f159774db84 CI 1616203051 +1100 branch: Created from conflict +0e5c9fd43732ca064946e9c582fd6f159774db84 698e214196fed018bb4164380745dd2df3bbac74 CI 1616203051 +1100 commit: both-deleted.txt renamed in changed-them-added-us.txt +698e214196fed018bb4164380745dd2df3bbac74 c64dd6aea3efd197ed630dedc1ffb538d35c3fdb CI 1616203052 +1100 commit: three diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/0e/5c9fd43732ca064946e9c582fd6f159774db84 b/test/integration/discardFileChanges/expected/.git_keep/objects/0e/5c9fd43732ca064946e9c582fd6f159774db84 new file mode 100644 index 000000000..3ad31c1dc --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/objects/0e/5c9fd43732ca064946e9c582fd6f159774db84 @@ -0,0 +1,2 @@ +xA +@ @Qs cRU)x|{n?~PKܡGtOK̔ʔkvEtW`aZ@B㍠#B G=&OPI* \ No newline at end of file diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469 b/test/integration/discardFileChanges/expected/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469 new file mode 100644 index 0000000000000000000000000000000000000000..cd888e56cf518570ce7c6a622c49a5f1027a4dc4 GIT binary patch literal 48 zcmb8GGZ_^FfcPQQAkWlNlno$$wN*Ly@ zTfei-=Zit;y2<-CtiN{rqRajzP)$ksB^kP4onVy{stp>`KXmYKT6*ANqW6a5N&IsU zBdg5K2U!AE>e~|Zr)=L_o@&u2e6ANVmG+n9#6y)rtk+FR%}Fgu1uJ%+mV0W&yW+e~ z_1T^A>)YAyb@s796+=`(oeWmI@WCAYTj@K0TybG2K5*DR&oyIq4T|Cv-Qto&p#Q+C zSFgRpJ@0OiO{Q3u&U~wRhD%NqKSomx4TkG8cBH!;o>?Q2$Ip8#?SrQC@#)J^RT4BX zzceW)RTn7~?5l5l>ukUBFuOm0`L_+l-A)p`@=!A&s*s(k)^Psr-uVk`SZ5vM)qWEf wx$v-4BZ^|M{diOrrRF8(Lj7H(w0^E6$Bj4}@7#%5vvZ1VLQhTr0F@8Z^N4t_DgXcg literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 b/test/integration/discardFileChanges/expected/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 new file mode 100644 index 0000000000000000000000000000000000000000..0931fd1bd3ae67a11709c6569502cab617db4545 GIT binary patch literal 19 acmb8G-WU}FfcPQQAo-!$n88pu>RWdi!S?@Agj&IPf39)y>f9|WnhF>sf^J7x<&Ku)tdjE_X4UkIU_MIJr!y& z*j)E%xu;gVE6(dwpWPY1zMcJEXCDhxF~oXZh#s)wg%9TF-%8*4<)LOmR3Upyt>OILz4I5?u+BQhtNkV}a^Yd8Mij+h o`|+qMO3h2mg@#d;()ziQ95>=@ymKdJ&CV&d2|YOh0CHE-ST`xJ>;M1& literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/38/b645bf2388b21695d22d7f673d87971a78e4ad b/test/integration/discardFileChanges/expected/.git_keep/objects/38/b645bf2388b21695d22d7f673d87971a78e4ad new file mode 100644 index 0000000000000000000000000000000000000000..45642dcb1ef75a84165dbe1774906cf9165886cb GIT binary patch literal 146 zcmV;D0B!$x0gaA93c@fD06pgwxeKz}Y~wD72tD-~$!3d!F{MQG`SuB3<}l1*wAK3P z9t944GxMlI%oz+br(DpKBaJzP9VMyYAdo4NThnH*?ky7|Sy-fumXV{Jfpj4frU6tI zN=R6eOYeSfo1bQXndX~)Q(d2S(pIk?BgO#&jOdSu0B*PYRJT8K*FVku0M>dqlk5RQ AbN~PV literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f b/test/integration/discardFileChanges/expected/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f new file mode 100644 index 0000000000000000000000000000000000000000..01335af9cb1ba115d2ffd38c8c9b43e84684e6bf GIT binary patch literal 30 mcmbUlF$Df&Hw6H`gA3~b literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753 b/test/integration/discardFileChanges/expected/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753 new file mode 100644 index 0000000000000000000000000000000000000000..96d96c7feaad918f388df7977912d1f7a8281c57 GIT binary patch literal 31 ncmb8WW6uBp$r=m% literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f b/test/integration/discardFileChanges/expected/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f new file mode 100644 index 0000000000000000000000000000000000000000..879dad0ba70403c3523afea0d80ea35925ce7065 GIT binary patch literal 20 bcmb8GGQ<@FfcPQQAo-!$mS^zyl_RUn&4(-fHMw`@w|6l|lg{!R|4R9ralPl!OQ_Q1jKsY3RNa)+oYaz3 zu(|Hja!;*zSDe?WKD#r1eLMTT&OR0t#VNWa8L7Dtm*|!jgEh@vw|-}v&liKxb(8mP zSby#KMVI|cpqd~?>q0C7D_;0uj{dFmoj;V;%+AiUU{gQ5LL*IRcknZcklcKHmtLb@oK+` xi(GivsS!mn*nT{!ic<3ubD=)3Qd&P(lH*34jd$+Etl2rmHlZgc001r?*QL_BwVeO} literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da b/test/integration/discardFileChanges/expected/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da new file mode 100644 index 0000000000000000000000000000000000000000..a49384ff604c8486178beafbf3cf566283daef9a GIT binary patch literal 20 bcmbATBS!MzNbrcA{ literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/69/8e214196fed018bb4164380745dd2df3bbac74 b/test/integration/discardFileChanges/expected/.git_keep/objects/69/8e214196fed018bb4164380745dd2df3bbac74 new file mode 100644 index 0000000000000000000000000000000000000000..de9f05a03a9b74decf43662a65e0cf3a1c3e8314 GIT binary patch literal 180 zcmV;l089UP0gaA9YQr!PMZ4B1W?vj6c_dj-N+GKpL)LuPfyfT-1akZ;H^}bsc#Bu} z)~-sP?S~!!A%`G{7HRZxWVXUFIHZis33Zx%wth^bxt9Z*l0~R_5$?*@Vk2jc$TduU zk+`^!Q(~DXHszt~e$e?sU+2pYo~7MyIMuyZHRw|z?SW^U$P*FkWD iLQeWr>T9Jz=(DE40!jRW`C3o_ literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 b/test/integration/discardFileChanges/expected/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 new file mode 100644 index 0000000000000000000000000000000000000000..d248b43e804b22aa8a33283b729c49d1f5b38a4b GIT binary patch literal 30 mcmb%!0b9!l!TXAvH$=8 literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed b/test/integration/discardFileChanges/expected/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed new file mode 100644 index 0000000000000000000000000000000000000000..72043ce4795e744924a7c22e53baeb2bf78cc511 GIT binary patch literal 48 zcmbs`XRn& E0H^H!-*X;ky#1dtF$6`jn*sp12Mb34 literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 b/test/integration/discardFileChanges/expected/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 new file mode 100644 index 0000000000000000000000000000000000000000..7ce146a5a77b54048c196767d8dc96e278a42107 GIT binary patch literal 19 acmb8GGQ<@FfcPQQAkWlNlno$$wN*Ly@ zTfei-=Zit;y2<-CtiN{rqRajzP)$ksB^kQ8`5>)erB^O)s|<|LDwPrXU$8{b`6T+6y4&IM4+p|s#mYQ!#(eAkWHpomd<>ud4@|)6hB5&4e}{i zZPcYcrLy|za~B<)aVJNBc~fM{<6CHIp#d>JP~x3pR-Q{yGwV+_;|&KMtyPXeRY}nD z{L-YHROAq|ufFlEv;E4$?Ed`a-!>F?J4x`$L(PPQE3&uL8qVL{JAZ)<>#SqE+Hc|_ v7an$ML{SX3ACIb{)V#!8Xc$!~t)DB&aU;&gJ9lE%?3`ko(32AY=}OgreRi)< literal 0 HcmV?d00001 diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 b/test/integration/discardFileChanges/expected/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 new file mode 100644 index 0000000000000000000000000000000000000000..901facc5d0f38e8d6f7a8343b5bc8c5da36fe55c GIT binary patch literal 27 jcmb8GGQ<@FfcPQQAo-!$vy*Kd@%@JH+kQN_1BJHblJZIstIDWF2o|R;)M_9=-*1; z`QwTUL-B#b_Ia)uvujWkr|1@!B&I_hzk2N*?s<2EY%;~Nbmm*lGhA|__%WJlkbA%; zM_uYuDyyG9chSKacX9-nH$|pAzJ;b1>frf-67LkV@?46VS%0z_Z#eL1t#S;iO0a?W zEYB}Z%1K2IX8Y"0Vc!MyFl;/u)~éllҧǔME=SXJוVA,{EVJK \ No newline at end of file diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 b/test/integration/discardFileChanges/expected/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 new file mode 100644 index 0000000000000000000000000000000000000000..4fc7dee503dafb7062a87bd94341f9ef5f529f75 GIT binary patch literal 20 bcmb both-deleted.txt +git checkout -b conflict && git add both-deleted.txt +echo bothmodded > both-modded.txt && git add both-modded.txt +echo haha > deleted-them.txt && git add deleted-them.txt +echo haha2 > deleted-us.txt && git add deleted-us.txt +echo mod > modded.txt & git add modded.txt +echo mod > modded-staged.txt & git add modded-staged.txt +echo del > deleted.txt && git add deleted.txt +echo del > deleted-staged.txt && git add deleted-staged.txt +echo change-delete > change-delete.txt && git add change-delete.txt +echo delete-change > delete-change.txt && git add delete-change.txt +echo double-modded > double-modded.txt && git add double-modded.txt +echo "renamed\nhaha" > renamed.txt && git add renamed.txt +git commit -m one + +# stuff on other branch +git branch conflict_second && git mv both-deleted.txt added-them-changed-us.txt +git commit -m "both-deleted.txt renamed in added-them-changed-us.txt" +echo blah > both-added.txt && git add both-added.txt +echo mod1 > both-modded.txt && git add both-modded.txt +rm deleted-them.txt && git add deleted-them.txt +echo modded > deleted-us.txt && git add deleted-us.txt +git commit -m "two" + +# stuff on our branch +git checkout conflict_second +git mv both-deleted.txt changed-them-added-us.txt +git commit -m "both-deleted.txt renamed in changed-them-added-us.txt" +echo mod2 > both-modded.txt && git add both-modded.txt +echo blah2 > both-added.txt && git add both-added.txt +echo modded > deleted-them.txt && git add deleted-them.txt +rm deleted-us.txt && git add deleted-us.txt +git commit -m "three" +git reset --hard conflict_second +git merge conflict + +echo "new" > new.txt +echo "new staged" > new-staged.txt && git add new-staged.txt +echo mod2 > modded.txt +echo mod2 > modded-staged.txt && git add modded-staged.txt +rm deleted.txt +rm deleted-staged.txt && git add deleted-staged.txt +echo change-delete2 > change-delete.txt && git add change-delete.txt +rm change-delete.txt +rm delete-change.txt && git add delete-change.txt +echo "changed" > delete-change.txt +echo "change1" > double-modded.txt && git add double-modded.txt +echo "change2" > double-modded.txt +echo before > added-changed.txt && git add added-changed.txt +echo after > added-changed.txt +rm renamed.txt && git add renamed.txt +echo "renamed\nhaha" > renamed2.txt && git add renamed2.txt diff --git a/test/integration/discardFileChanges/test.json b/test/integration/discardFileChanges/test.json new file mode 100644 index 000000000..7a06a6c50 --- /dev/null +++ b/test/integration/discardFileChanges/test.json @@ -0,0 +1 @@ +{ "description": "discard file changes for various kinds of situations (merge conflicts, etc)", "speed": 2 }