feat: Add fetch/push commands and log keybinds, make long-running operations non-blocking

Convert blocking jj commands to async using vim.fn.jobstart() to prevent UI
freezing during fetch, push, rebase, squash, and other heavy operations.

Changes:
- Implement execute_command_async() in runner with proper error handling
  - Captures stdout from job and passes to success callback
  - Supports stdin input for commands that require it
  - Includes silent flag to suppress error notifications
  - Replicates sync version's error handling behavior

- Convert blocking operations to async:
  - handle_log_fetch, handle_log_push_all, handle_log_new
  - handle_log_edit, handle_log_abandon, handle_log_describe
  - describe.execute_describe, all init.lua commands

- Add push/fetch as public commands with CLI support:
  - M.fetch() - fetch from remote
  - M.push(opts) - push all changes or specific bookmark
  - CLI: :J push, :J push <bookmark>, :J fetch

- Implement handle_log_push_bookmark() for revision under cursor:
  - Retrieves and strips modified bookmark indicator (*)
  - Pushes specific bookmark to remote
  - Keybind: Shift+p in log buffer

- Update README with new keybinds:
  - a: abandon revision under cursor
  - f: fetch from remote
  - p: push all changes
  - Shift+p: push revision's bookmark

- Add Lua API docs for push command options
This commit is contained in:
NicolasGB
2025-11-27 20:58:34 +01:00
committed by Nicolas GB
parent 8f1a60342a
commit e22bf5ec4e
6 changed files with 282 additions and 71 deletions
+3 -3
View File
@@ -30,10 +30,9 @@ local function execute_describe(description, revset)
cmd = cmd .. " --stdin"
-- Use --stdin to properly handle multi-line and special characters
local _, success = runner.execute_command(cmd, "Failed to describe", description)
if success then
runner.execute_command_async(cmd, function()
utils.notify("Description set.", vim.log.levels.INFO)
end
end, "Failed to describe", description)
end
--- Resolve describe editor keymaps from config
@@ -151,3 +150,4 @@ function M.describe(description, revset, opts)
end
return M