Fix error in dirname computation in TreeView
In TreeView:on_mouse_pressed() we need to find the directory a relative filename belongs to from its absolute filename. The code was using string.find to locate the relative filename within the absolute path but in some very specific cases we can find a pattern which is not the right-most one leading to a wrong directory name. Fix the error by adding a loop to make sure we find the right-most match. The standard Lua library has not a string.rfind to make a reverse search. Add a check to avoid trying to updating a topdir project directory.
This commit is contained in:
parent
4fc910dbdb
commit
66275fe207
|
@ -194,6 +194,16 @@ local function project_scan_thread()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function core.is_project_folder(dirname)
|
||||||
|
for _, dir in ipairs(core.project_directories) do
|
||||||
|
if dir.name == dirname then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
function core.scan_project_folder(dirname, filename)
|
function core.scan_project_folder(dirname, filename)
|
||||||
for _, dir in ipairs(core.project_directories) do
|
for _, dir in ipairs(core.project_directories) do
|
||||||
if dir.name == dirname then
|
if dir.name == dirname then
|
||||||
|
|
|
@ -222,10 +222,19 @@ function TreeView:on_mouse_pressed(button, x, y, clicks)
|
||||||
else
|
else
|
||||||
if core.project_files_limit and not hovered_item.expanded then
|
if core.project_files_limit and not hovered_item.expanded then
|
||||||
local filename, abs_filename = hovered_item.filename, hovered_item.abs_filename
|
local filename, abs_filename = hovered_item.filename, hovered_item.abs_filename
|
||||||
local index = string.find(abs_filename, filename, 1, true)
|
local index = 0
|
||||||
|
-- The loop below is used to find the first match starting from the end
|
||||||
|
-- in case there are multiple matches.
|
||||||
|
while index and index + #filename < #abs_filename do
|
||||||
|
index = string.find(abs_filename, filename, index + 1, true)
|
||||||
|
end
|
||||||
|
-- we assume here index is not nil because the abs_filename must contain the
|
||||||
|
-- relative filename
|
||||||
local dirname = string.sub(abs_filename, 1, index - 2)
|
local dirname = string.sub(abs_filename, 1, index - 2)
|
||||||
core.scan_project_folder(dirname, filename)
|
if core.is_project_folder(dirname) then
|
||||||
self:invalidate_cache(dirname)
|
core.scan_project_folder(dirname, filename)
|
||||||
|
self:invalidate_cache(dirname)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
hovered_item.expanded = not hovered_item.expanded
|
hovered_item.expanded = not hovered_item.expanded
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue