diff --git a/lua/oil/mutator/parser.lua b/lua/oil/mutator/parser.lua index a8d3d58..f2db295 100644 --- a/lua/oil/mutator/parser.lua +++ b/lua/oil/mutator/parser.lua @@ -207,6 +207,12 @@ M.parse = function(bufnr) entry_type = "link", link = parsed_entry.link_target, }) + elseif entry[FIELD_TYPE] ~= parsed_entry._type then + table.insert(diffs, { + type = "new", + name = parsed_entry.name, + entry_type = parsed_entry._type, + }) else original_entries[parsed_entry.name] = nil end diff --git a/tests/mutator_spec.lua b/tests/mutator_spec.lua index f13add0..55b9c0c 100644 --- a/tests/mutator_spec.lua +++ b/tests/mutator_spec.lua @@ -200,6 +200,20 @@ a.describe("mutator", function() }, diffs) end) + it("detects a new trailing slash as a delete + create", function() + local file = test_adapter.test_set("/foo", "file") + vim.cmd.edit({ args = { "oil-test:///" } }) + local bufnr = vim.api.nvim_get_current_buf() + set_lines(bufnr, { + string.format("/%d foo/", file[FIELD_ID]), + }) + local diffs = parser.parse(bufnr) + assert.are.same({ + { type = "new", name = "foo", entry_type = "directory" }, + { type = "delete", id = file[FIELD_ID], name = "foo" }, + }, diffs) + end) + it("detects renamed files that conflict", function() local afile = test_adapter.test_set("/foo/a.txt", "file") local bfile = test_adapter.test_set("/foo/b.txt", "file")