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 000000000..684535674 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/index differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/info/exclude b/test/integration/discardFileChanges/expected/.git_keep/info/exclude new file mode 100644 index 000000000..8e9f2071f --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/info/exclude @@ -0,0 +1,7 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ +.DS_Store diff --git a/test/integration/discardFileChanges/expected/.git_keep/logs/HEAD b/test/integration/discardFileChanges/expected/.git_keep/logs/HEAD new file mode 100644 index 000000000..84066dbf1 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/logs/HEAD @@ -0,0 +1,7 @@ +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 +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 000000000..cd888e56c Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/15/fe7f43604da957ffb663b4db95b60d0af66469 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464 b/test/integration/discardFileChanges/expected/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464 new file mode 100644 index 000000000..43396deed Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/1c/9488b0e1b8abd1ec8645b3345bdac91290b464 differ 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 000000000..0931fd1bd Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/26/80cfddbd9fa03c059ac60d2bec5e59a1c34281 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d b/test/integration/discardFileChanges/expected/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d new file mode 100644 index 000000000..4b382c69a Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/2c/e75e2a24f7d6841a504cf3616ef5a59edb3a2d differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678 b/test/integration/discardFileChanges/expected/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678 new file mode 100644 index 000000000..6e1003c13 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/30/07c9c07bf80aaa72b1f1f704e7fea622446678 differ 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 000000000..45642dcb1 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/38/b645bf2388b21695d22d7f673d87971a78e4ad differ 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 000000000..01335af9c Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/3f/7bd8f68987d4e16b8f6fa7f6b0738b42180d1f differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04 b/test/integration/discardFileChanges/expected/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04 new file mode 100644 index 000000000..0c3f6db60 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/47/966dcaa8ee736e89279b895faf8707de898e04 differ 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 000000000..96d96c7fe Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/48/f9387742d3cc3017c1a7e292c9187e35321753 differ 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 000000000..879dad0ba Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/4d/8452fc76beed0c7b15e40e45d06922bf746c5f differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b b/test/integration/discardFileChanges/expected/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b new file mode 100644 index 000000000..8c946f2fb Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/59/cf7b78af9aab84813bcb0bc8be27fdd9216b2b differ 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 000000000..a49384ff6 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/5a/d28e22767f979da2c198dc6c1003b25964e3da differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84 b/test/integration/discardFileChanges/expected/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84 new file mode 100644 index 000000000..4cb486fbd Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/5b/e4a414b32cf4204f889469942986d3d783da84 differ 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 000000000..de9f05a03 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/69/8e214196fed018bb4164380745dd2df3bbac74 differ 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 000000000..d248b43e8 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/7a/22af9d1908d85e3c4b6d916a9b6c733c55c990 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77 b/test/integration/discardFileChanges/expected/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77 new file mode 100644 index 000000000..7bba19849 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/89/44a13fdfc597e4cf1d23797df51977680f8e77 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 b/test/integration/discardFileChanges/expected/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 new file mode 100644 index 000000000..20cd3d000 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/90/7b308167f0880fb2a5c0e1614bb0c7620f9dc3 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02 b/test/integration/discardFileChanges/expected/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02 new file mode 100644 index 000000000..b448be25d Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/90/be1f3056c4f471f977a28497b8d4b392c55a02 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 b/test/integration/discardFileChanges/expected/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 new file mode 100644 index 000000000..4667dcf6f Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/9d/aeafb9864cf43055ae93beb0afd6c7d144bfa4 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c b/test/integration/discardFileChanges/expected/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c new file mode 100644 index 000000000..6b863c7fc Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/9f/5118ee216a6e44728305f90633b0c0e2ad235c differ 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 000000000..72043ce47 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/a1/be04124078e38a592c153942bf75edf210f1ed differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c b/test/integration/discardFileChanges/expected/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c new file mode 100644 index 000000000..935ea9931 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/a1/e09c2fda67b9f8d4440073c0c33f6e45689b7c differ 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 000000000..7ce146a5a Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/ab/addc0b9edd523c69166a2c9f3a9e31a4c873e3 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/c6/4dd6aea3efd197ed630dedc1ffb538d35c3fdb b/test/integration/discardFileChanges/expected/.git_keep/objects/c6/4dd6aea3efd197ed630dedc1ffb538d35c3fdb new file mode 100644 index 000000000..5da5ff4bc --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/objects/c6/4dd6aea3efd197ed630dedc1ffb538d35c3fdb @@ -0,0 +1,2 @@ +xA +0@Q9ELd"BW=F&`l)<=_ƮjTZȹ=" E)Za]ÆJ1E<jڜH.ћubroK/e7@ s7q':G \ No newline at end of file diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7 b/test/integration/discardFileChanges/expected/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7 new file mode 100644 index 000000000..2e84f7f16 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/ce/e08babc6b109f011f42eaba5f79e6e693c09e7 differ 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 000000000..901facc5d Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/d4/d1b67951582a751c12ff7ea29ede7d37fd9ee8 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7 b/test/integration/discardFileChanges/expected/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7 new file mode 100644 index 000000000..7cb3efd4a Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/d7/98b86744c3997c186e0f0dc666f02943c797a7 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373 b/test/integration/discardFileChanges/expected/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373 new file mode 100644 index 000000000..56e224b23 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/e9/55de60e73263440d4651e79e947ec8b2902373 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/objects/eb/4814e3f9d5eb1869704cf4498420c9f4a141da b/test/integration/discardFileChanges/expected/.git_keep/objects/eb/4814e3f9d5eb1869704cf4498420c9f4a141da new file mode 100644 index 000000000..1d1e8b355 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/objects/eb/4814e3f9d5eb1869704cf4498420c9f4a141da @@ -0,0 +1 @@ +xAj0E)f_F$[PJ!c$}Ձr:7=╭;@9K.1[NmA6%D4N]vJPR~FWO>"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 000000000..4fc7dee50 Binary files /dev/null and b/test/integration/discardFileChanges/expected/.git_keep/objects/fa/938d99f6ee5cc562cd0f33fa64fd68d78ce2e9 differ diff --git a/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict b/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict new file mode 100644 index 000000000..6d6a6623d --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict @@ -0,0 +1 @@ +38b645bf2388b21695d22d7f673d87971a78e4ad diff --git a/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict_second b/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict_second new file mode 100644 index 000000000..07e446d60 --- /dev/null +++ b/test/integration/discardFileChanges/expected/.git_keep/refs/heads/conflict_second @@ -0,0 +1 @@ +c64dd6aea3efd197ed630dedc1ffb538d35c3fdb diff --git a/test/integration/discardFileChanges/expected/both-added.txt b/test/integration/discardFileChanges/expected/both-added.txt new file mode 100644 index 000000000..8944a13fd --- /dev/null +++ b/test/integration/discardFileChanges/expected/both-added.txt @@ -0,0 +1 @@ +blah2 diff --git a/test/integration/discardFileChanges/expected/both-modded.txt b/test/integration/discardFileChanges/expected/both-modded.txt new file mode 100644 index 000000000..fa938d99f --- /dev/null +++ b/test/integration/discardFileChanges/expected/both-modded.txt @@ -0,0 +1 @@ +mod2 diff --git a/test/integration/discardFileChanges/expected/change-delete.txt b/test/integration/discardFileChanges/expected/change-delete.txt new file mode 100644 index 000000000..47966dcaa --- /dev/null +++ b/test/integration/discardFileChanges/expected/change-delete.txt @@ -0,0 +1 @@ +change-delete diff --git a/test/integration/discardFileChanges/expected/changed-them-added-us.txt b/test/integration/discardFileChanges/expected/changed-them-added-us.txt new file mode 100644 index 000000000..9daeafb98 --- /dev/null +++ b/test/integration/discardFileChanges/expected/changed-them-added-us.txt @@ -0,0 +1 @@ +test diff --git a/test/integration/discardFileChanges/expected/delete-change.txt b/test/integration/discardFileChanges/expected/delete-change.txt new file mode 100644 index 000000000..a1e09c2fd --- /dev/null +++ b/test/integration/discardFileChanges/expected/delete-change.txt @@ -0,0 +1 @@ +delete-change diff --git a/test/integration/discardFileChanges/expected/deleted-staged.txt b/test/integration/discardFileChanges/expected/deleted-staged.txt new file mode 100644 index 000000000..abaddc0b9 --- /dev/null +++ b/test/integration/discardFileChanges/expected/deleted-staged.txt @@ -0,0 +1 @@ +del diff --git a/test/integration/discardFileChanges/expected/deleted-them.txt b/test/integration/discardFileChanges/expected/deleted-them.txt new file mode 100644 index 000000000..d798b8674 --- /dev/null +++ b/test/integration/discardFileChanges/expected/deleted-them.txt @@ -0,0 +1 @@ +modded diff --git a/test/integration/discardFileChanges/expected/deleted.txt b/test/integration/discardFileChanges/expected/deleted.txt new file mode 100644 index 000000000..abaddc0b9 --- /dev/null +++ b/test/integration/discardFileChanges/expected/deleted.txt @@ -0,0 +1 @@ +del diff --git a/test/integration/discardFileChanges/expected/double-modded.txt b/test/integration/discardFileChanges/expected/double-modded.txt new file mode 100644 index 000000000..3f7bd8f68 --- /dev/null +++ b/test/integration/discardFileChanges/expected/double-modded.txt @@ -0,0 +1 @@ +double-modded diff --git a/test/integration/discardFileChanges/expected/modded-staged.txt b/test/integration/discardFileChanges/expected/modded-staged.txt new file mode 100644 index 000000000..2680cfddb --- /dev/null +++ b/test/integration/discardFileChanges/expected/modded-staged.txt @@ -0,0 +1 @@ +mod diff --git a/test/integration/discardFileChanges/expected/modded.txt b/test/integration/discardFileChanges/expected/modded.txt new file mode 100644 index 000000000..2680cfddb --- /dev/null +++ b/test/integration/discardFileChanges/expected/modded.txt @@ -0,0 +1 @@ +mod diff --git a/test/integration/discardFileChanges/expected/renamed.txt b/test/integration/discardFileChanges/expected/renamed.txt new file mode 100644 index 000000000..7a22af9d1 --- /dev/null +++ b/test/integration/discardFileChanges/expected/renamed.txt @@ -0,0 +1 @@ +renamed\nhaha diff --git a/test/integration/discardFileChanges/recording.json b/test/integration/discardFileChanges/recording.json new file mode 100644 index 000000000..f5f9dbc7a --- /dev/null +++ b/test/integration/discardFileChanges/recording.json @@ -0,0 +1 @@ +[{"Timestamp":23,"Event":{"Type":1,"Mod":0,"Key":0,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":0,"Bytes":null}},{"Timestamp":377,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":481,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":593,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":713,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":816,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":952,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":1057,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":1185,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":1305,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":1425,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":1537,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":1673,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":1760,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":1897,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":1992,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":2129,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":2225,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":2361,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":2473,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":2592,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":2705,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":2825,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":2937,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":3065,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":3185,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":3297,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":3409,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":3537,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":3641,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":3777,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":3873,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":4008,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":4121,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":4233,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":4345,"Event":{"Type":0,"Mod":0,"Key":0,"Ch":100,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"ZA=="}},{"Timestamp":4449,"Event":{"Type":0,"Mod":0,"Key":13,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"DQ=="}},{"Timestamp":4751,"Event":{"Type":0,"Mod":0,"Key":27,"Ch":0,"Width":0,"Height":0,"Err":null,"MouseX":0,"MouseY":0,"N":1,"Bytes":"Gw=="}}] \ No newline at end of file diff --git a/test/integration/discardFileChanges/setup.sh b/test/integration/discardFileChanges/setup.sh new file mode 100644 index 000000000..df68833f9 --- /dev/null +++ b/test/integration/discardFileChanges/setup.sh @@ -0,0 +1,62 @@ +#!/bin/sh + +cd $1 + +git init + +git config user.email "CI@example.com" +git config user.name "CI" + +# common stuff +echo test > both-deleted.txt +git checkout -b conflict && git add both-deleted.txt +echo bothmodded > both-modded.txt && git add both-modded.txt +echo haha > deleted-them.txt && git add deleted-them.txt +echo haha2 > deleted-us.txt && git add deleted-us.txt +echo mod > modded.txt & git add modded.txt +echo mod > modded-staged.txt & git add modded-staged.txt +echo del > deleted.txt && git add deleted.txt +echo del > deleted-staged.txt && git add deleted-staged.txt +echo change-delete > change-delete.txt && git add change-delete.txt +echo delete-change > delete-change.txt && git add delete-change.txt +echo double-modded > double-modded.txt && git add double-modded.txt +echo "renamed\nhaha" > renamed.txt && git add renamed.txt +git commit -m one + +# stuff on other branch +git branch conflict_second && git mv both-deleted.txt added-them-changed-us.txt +git commit -m "both-deleted.txt renamed in added-them-changed-us.txt" +echo blah > both-added.txt && git add both-added.txt +echo mod1 > both-modded.txt && git add both-modded.txt +rm deleted-them.txt && git add deleted-them.txt +echo modded > deleted-us.txt && git add deleted-us.txt +git commit -m "two" + +# stuff on our branch +git checkout conflict_second +git mv both-deleted.txt changed-them-added-us.txt +git commit -m "both-deleted.txt renamed in changed-them-added-us.txt" +echo mod2 > both-modded.txt && git add both-modded.txt +echo blah2 > both-added.txt && git add both-added.txt +echo modded > deleted-them.txt && git add deleted-them.txt +rm deleted-us.txt && git add deleted-us.txt +git commit -m "three" +git reset --hard conflict_second +git merge conflict + +echo "new" > new.txt +echo "new staged" > new-staged.txt && git add new-staged.txt +echo mod2 > modded.txt +echo mod2 > modded-staged.txt && git add modded-staged.txt +rm deleted.txt +rm deleted-staged.txt && git add deleted-staged.txt +echo change-delete2 > change-delete.txt && git add change-delete.txt +rm change-delete.txt +rm delete-change.txt && git add delete-change.txt +echo "changed" > delete-change.txt +echo "change1" > double-modded.txt && git add double-modded.txt +echo "change2" > double-modded.txt +echo before > added-changed.txt && git add added-changed.txt +echo after > added-changed.txt +rm renamed.txt && git add renamed.txt +echo "renamed\nhaha" > renamed2.txt && git add renamed2.txt diff --git a/test/integration/discardFileChanges/test.json b/test/integration/discardFileChanges/test.json 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 }