feat(config): add per-host/bucket extra args for SSH, S3, and FTP
Problem: `extra_scp_args`, `extra_s3_args`, and `extra_curl_args` are global — there's no way to pass adapter-specific args only to a single host or bucket (e.g. `-O` for a Synology NAS that requires legacy SCP protocol, or `--endpoint-url` for an R2 bucket). Solution: add `ssh_hosts`, `s3_buckets`, and `ftp_hosts` config tables that map exact hostnames/bucket names to per-target arg lists. Per-target args are appended after the global args at call time. The `scp()` helper in `ssh.lua` accepts a `hosts` list so cross-host copies deduplicate host lookups. `create_s3_command` in `s3fs.lua` extracts the bucket from the command args with no call-site changes needed. `resolved_curl_args` in `ftp.lua` is called by both `curl()` and `ftpcmd()`. Based on: stevearc/oil.nvim#607
This commit is contained in:
parent
6845cfe64a
commit
1e5c96ca2c
7 changed files with 227 additions and 22 deletions
|
|
@ -46,8 +46,22 @@ end
|
|||
---@param cmd string[] cmd and flags
|
||||
---@return string[] Shell command to run
|
||||
local function create_s3_command(cmd)
|
||||
local bucket
|
||||
for _, arg in ipairs(cmd) do
|
||||
bucket = arg:match('^s3://([^/]+)')
|
||||
if bucket then
|
||||
break
|
||||
end
|
||||
end
|
||||
local extra = vim.deepcopy(config.extra_s3_args)
|
||||
if bucket then
|
||||
local bucket_cfg = config.s3_buckets[bucket]
|
||||
if bucket_cfg and bucket_cfg.extra_s3_args then
|
||||
vim.list_extend(extra, bucket_cfg.extra_s3_args)
|
||||
end
|
||||
end
|
||||
local full_cmd = vim.list_extend({ 'aws', 's3' }, cmd)
|
||||
return vim.list_extend(full_cmd, config.extra_s3_args)
|
||||
return vim.list_extend(full_cmd, extra)
|
||||
end
|
||||
|
||||
---@param url string
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue