Skip to content

Commit a965c65

Browse files
committed
update git status of links
1 parent 5851dec commit a965c65

File tree

5 files changed

+20
-22
lines changed

5 files changed

+20
-22
lines changed

lua/nvim-tree/git/init.lua

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -283,32 +283,35 @@ function M.load_project_status(path)
283283
end
284284
end
285285

286+
---Git file and directory status for an absolute path with optional file fallback
286287
---@param parent_ignored boolean
287288
---@param status table|nil
288-
---@param absolute_path string
289+
---@param path string
290+
---@param path_file string? alternative file path when no other file status
289291
---@return GitStatus|nil
290-
function M.git_status_dir(parent_ignored, status, absolute_path)
292+
function M.git_status_dir(parent_ignored, status, path, path_file)
291293
if parent_ignored then
292294
return { file = "!!" }
293295
end
294296

295297
if status then
296298
return {
297-
file = status.files and status.files[absolute_path],
299+
file = status.files and status.files[path] or path_file and status.files[path_file],
298300
dir = status.dirs and {
299-
direct = status.dirs.direct[absolute_path],
300-
indirect = status.dirs.indirect[absolute_path],
301+
direct = status.dirs.direct[path],
302+
indirect = status.dirs.indirect[path],
301303
},
302304
}
303305
end
304306
end
305307

306-
---Git file status for an absolute path
308+
---Git file status for an absolute path with optional fallback
307309
---@param parent_ignored boolean
308310
---@param status table|nil
309-
---@param absolute_paths string[] status for first match is returned
311+
---@param path string
312+
---@param path_fallback string?
310313
---@return GitStatus
311-
function M.git_status_file(parent_ignored, status, absolute_paths)
314+
function M.git_status_file(parent_ignored, status, path, path_fallback)
312315
if parent_ignored then
313316
return { file = "!!" }
314317
end
@@ -317,14 +320,9 @@ function M.git_status_file(parent_ignored, status, absolute_paths)
317320
return {}
318321
end
319322

320-
for _, p in ipairs(absolute_paths) do
321-
local s = status.files[p]
322-
if s then
323-
return { file = s }
324-
end
325-
end
326-
327-
return {}
323+
return {
324+
file = status.files[path] or status.files[path_fallback]
325+
}
328326
end
329327

330328
function M.purge_state()

lua/nvim-tree/node/directory-link.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ function DirectoryLinkNode:create(explorer, parent, absolute_path, link_to, name
3232
return o
3333
end
3434

35-
-----Update the GitStatus of link target
35+
-----Update the directory GitStatus of link target and the file status of the link itself
3636
-----@param parent_ignored boolean
3737
-----@param status table|nil
3838
function DirectoryLinkNode:update_git_status(parent_ignored, status)
39-
self.git_status = git.git_status_dir(parent_ignored, status, self.link_to)
39+
self.git_status = git.git_status_dir(parent_ignored, status, self.link_to, self.absolute_path)
4040
end
4141

4242
---Create a sanitized partial copy of a node, populating children recursively.

lua/nvim-tree/node/directory.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ function DirectoryNode:destroy()
5959
end
6060
end
6161

62-
---Update the GitStatus of absolute path of the directory
62+
---Update the GitStatus of the directory
6363
---@param parent_ignored boolean
6464
---@param status table|nil
6565
function DirectoryNode:update_git_status(parent_ignored, status)
66-
self.git_status = git.git_status_dir(parent_ignored, status, self.absolute_path)
66+
self.git_status = git.git_status_dir(parent_ignored, status, self.absolute_path, nil)
6767
end
6868

6969
---@return GitStatus|nil

lua/nvim-tree/node/file-link.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ end
3232
-----@param parent_ignored boolean
3333
-----@param status table|nil
3434
function FileLinkNode:update_git_status(parent_ignored, status)
35-
self.git_status = git.git_status_file(parent_ignored, status, { self.link_to, self.absolute_path, })
35+
self.git_status = git.git_status_file(parent_ignored, status, self.link_to, self.absolute_path)
3636
end
3737

3838
---Create a sanitized partial copy of a node

lua/nvim-tree/node/file.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ end
4141
---@param parent_ignored boolean
4242
---@param status table|nil
4343
function FileNode:update_git_status(parent_ignored, status)
44-
self.git_status = git.git_status_file(parent_ignored, status, { self.absolute_path })
44+
self.git_status = git.git_status_file(parent_ignored, status, self.absolute_path, nil)
4545
end
4646

4747
---@return GitStatus|nil

0 commit comments

Comments
 (0)