fix: allow converting a file to directory and vice-versa (#117)
If you rename a file to have a `/` at the end, oil will detect the change as a delete + new directory. Similarly, if you delete the trailing `/` from a directory, it will delete the dir and create a new file. This should help with the case where you want to create a new file but forgot to add the trailing `/` and now you have a file instead.
This commit is contained in:
parent
d4eb4f3bbf
commit
926ae067eb
2 changed files with 20 additions and 0 deletions
|
|
@ -207,6 +207,12 @@ M.parse = function(bufnr)
|
||||||
entry_type = "link",
|
entry_type = "link",
|
||||||
link = parsed_entry.link_target,
|
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
|
else
|
||||||
original_entries[parsed_entry.name] = nil
|
original_entries[parsed_entry.name] = nil
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -200,6 +200,20 @@ a.describe("mutator", function()
|
||||||
}, diffs)
|
}, diffs)
|
||||||
end)
|
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()
|
it("detects renamed files that conflict", function()
|
||||||
local afile = test_adapter.test_set("/foo/a.txt", "file")
|
local afile = test_adapter.test_set("/foo/a.txt", "file")
|
||||||
local bfile = test_adapter.test_set("/foo/b.txt", "file")
|
local bfile = test_adapter.test_set("/foo/b.txt", "file")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue