Update files
This commit is contained in:
@@ -116,4 +116,94 @@ vim.api.nvim_create_autocmd('BufWritePost', {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
local configs = {
|
||||||
|
{
|
||||||
|
path = os.getenv("HOME") .. "/.config/nixos",
|
||||||
|
worktree = nil,
|
||||||
|
git_dir = nil,
|
||||||
|
track_untracked = false,
|
||||||
|
force_add = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path = os.getenv("HOME") .. "/.config/nvim",
|
||||||
|
worktree = nil,
|
||||||
|
git_dir = nil,
|
||||||
|
track_untracked = false,
|
||||||
|
force_add = false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path = os.getenv("HOME"),
|
||||||
|
worktree = os.getenv("HOME"),
|
||||||
|
git_dir = os.getenv("HOME") .. "/.config/dotfiles/.git",
|
||||||
|
track_untracked = true,
|
||||||
|
force_add = true, -- Handles ignored files in dotfiles
|
||||||
|
include_dirs = { ".config", ".local/bin", ".local/share" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local function get_git_status(config)
|
||||||
|
local base = "git"
|
||||||
|
if config.git_dir and config.worktree then
|
||||||
|
base = string.format("git --git-dir=%s --worktree=%s", config.git_dir, config.worktree)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Check modified and untracked (including ignored if force_add is true)
|
||||||
|
local cmd = base .. " status --porcelain"
|
||||||
|
if config.force_add then cmd = cmd .. " --ignored" end
|
||||||
|
|
||||||
|
local handle = io.popen(cmd)
|
||||||
|
local result = handle:read("*a")
|
||||||
|
handle:close()
|
||||||
|
|
||||||
|
local has_changes = false
|
||||||
|
for line in result:gmatch("[^\r\n]+") do
|
||||||
|
local status = line:sub(1, 2)
|
||||||
|
local file = line:sub(4)
|
||||||
|
|
||||||
|
if status:match("[MAR]") then
|
||||||
|
has_changes = true
|
||||||
|
elseif (status == "??" or status == "!!") and config.track_untracked then
|
||||||
|
if config.include_dirs then
|
||||||
|
for _, dir in ipairs(config.include_dirs) do
|
||||||
|
if file:sub(1, #dir) == dir then
|
||||||
|
has_changes = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
has_changes = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return has_changes, base
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd("VimLeavePre", {
|
||||||
|
callback = function()
|
||||||
|
local cwd = vim.fn.getcwd()
|
||||||
|
|
||||||
|
for _, config in ipairs(configs) do
|
||||||
|
if cwd:sub(1, #config.path) == config.path then
|
||||||
|
local has_changes, git_base = get_git_status(config)
|
||||||
|
|
||||||
|
if has_changes then
|
||||||
|
local confirm = vim.fn.confirm("Uncommitted changes in managed path. Commit?", "&Yes\n&No", 2)
|
||||||
|
if confirm == 1 then
|
||||||
|
local msg = vim.fn.input("Commit message: ", "chore: update files")
|
||||||
|
if msg ~= "" then
|
||||||
|
msg = "Update files"
|
||||||
|
end
|
||||||
|
local add_cmd = config.force_add and " add -f -A" or " add -A"
|
||||||
|
os.execute(git_base .. add_cmd)
|
||||||
|
os.execute(git_base .. " commit -m " .. vim.fn.shellescape(msg))
|
||||||
|
print("\nChanges committed.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
require('helpers').edit_cf('a', '/lua/autocmd.lua')
|
require('helpers').edit_cf('a', '/lua/autocmd.lua')
|
||||||
|
|||||||
Reference in New Issue
Block a user