mirror of
https://github.com/zoriya/jj.nvim.git
synced 2026-08-05 18:56:13 +00:00
Migrate command execution to structured argv lists across the plugin, replacing shell-string command construction with `vim.system` argv execution. The runner API now exposes argv-based execution as the default path:
- `runner.execute_command` -> `runner.execute`
- `runner.execute_command_async` -> `runner.execute_async`
- `runner.execute_command_raw` -> `runner.execute_raw`
- `runner.execute_command_raw_async` -> `runner.execute_raw_async`
- `runner.execute_command_sync` was removed; use `runner.execute` and handle the result directly
BREAKING CHANGES:
- `cmd.new({ args = ... })` now requires `args` as `string[]` argv tokens, not a single string.
- `cmd.log({ ... })` now uses `raw_flags` as `string[]` for raw passthrough flags; `raw = "..."` is no longer supported.
- Direct users of `jj.core.runner` must migrate from the old `execute_command*` string helpers to the new argv-based `execute*` helpers.
66 lines
1.6 KiB
Lua
66 lines
1.6 KiB
Lua
local M = {}
|
|
|
|
local utils = require("jj.utils")
|
|
local jj_args = require("jj.core.args")
|
|
local terminal = require("jj.ui.terminal")
|
|
local runner = require("jj.core.runner")
|
|
|
|
--- Resolve conflicts in the current change.
|
|
--- @param opts? jj.cmd.resolve.opts
|
|
function M.resolve(opts)
|
|
opts = vim.tbl_deep_extend("force", {}, opts or {}) --[[@as jj.cmd.resolve.opts]]
|
|
local rev = opts.rev or "@"
|
|
local filesets = opts.filesets or {}
|
|
local args = opts.args or {}
|
|
|
|
if not utils.ensure_jj() then
|
|
return
|
|
end
|
|
|
|
local cmd = { "jj", "resolve", "--revision", rev }
|
|
-- Extra arguments
|
|
vim.list_extend(cmd, args)
|
|
|
|
-- Append filesets as jj string literal
|
|
for _, fileset in ipairs(filesets) do
|
|
table.insert(cmd, jj_args.fileset(fileset))
|
|
end
|
|
|
|
utils.notify(string.format("Resolving conflicts in change `%s`...", rev), vim.log.levels.INFO)
|
|
|
|
-- If external is set, run the command asynchronously and invoke the on_exit callback if provided
|
|
if opts.external then
|
|
-- Run the command asynchronously and notify the user of the result
|
|
runner.execute_async(
|
|
cmd,
|
|
function(output)
|
|
if output and output ~= "" then
|
|
utils.notify(output, vim.log.levels.INFO)
|
|
end
|
|
if opts.on_exit then
|
|
opts.on_exit(0)
|
|
end
|
|
end,
|
|
string.format("Could not resolve conflicts in `%s`", rev),
|
|
nil,
|
|
nil,
|
|
function()
|
|
if opts.on_exit then
|
|
opts.on_exit(1)
|
|
end
|
|
end
|
|
)
|
|
else
|
|
-- Otherwise, run in a floating terminal
|
|
terminal.run_floating(cmd, nil, {
|
|
title = " JJ Resolve ",
|
|
modifiable = true,
|
|
keep_modifiable = true,
|
|
interactive = true,
|
|
on_exit = opts.on_exit or nil,
|
|
})
|
|
end
|
|
end
|
|
|
|
return M
|