mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-15 22:44:01 +00:00
Make rsync escaping version-dependent
This commit is contained in:
parent
f2b16a822e
commit
3e0bd0b7e1
1 changed files with 23 additions and 1 deletions
|
@ -176,6 +176,28 @@ complete -c rsync -d Hostname -a "
|
||||||
#
|
#
|
||||||
# Remote path
|
# Remote path
|
||||||
#
|
#
|
||||||
|
# Unfortunately, the escaping changed in version 3.2.4.
|
||||||
|
# Even more unfortunate, rsync's version output is horrible:
|
||||||
|
# rsync version v3.2.4 protocol version 31
|
||||||
|
# Copyright (C) 1996-2022 by Andrew Tridgell, Wayne Davison, and others.
|
||||||
|
# Web site: https://rsync.samba.org/
|
||||||
|
# ... (and then a ton of lines about capabilities)
|
||||||
|
#
|
||||||
|
# This includes multiple spaces, the version might start with "v" depending on whether it's
|
||||||
|
# built from a git tag or not...
|
||||||
|
|
||||||
|
set -l new_escaping # has an element if the new escaping style introduced in 3.2.4 is required
|
||||||
|
|
||||||
|
set -l rsync_ver (rsync --version |
|
||||||
|
string replace -rf '^rsync +version\D+([\d.]+) .*' '$1' |
|
||||||
|
string split .)
|
||||||
|
|
||||||
|
if test "$rsync_ver[1]" -gt 3 2>/dev/null
|
||||||
|
or test "$rsync_ver[1]" -eq 3 -a "$rsync_ver[2]" -gt 2 2>/dev/null
|
||||||
|
or test "$rsync_ver[1]" -eq 3 -a "$rsync_ver[2]" -eq 2 -a "$rsync_ver[3]" -gt 3 2>/dev/null
|
||||||
|
set new_escaping 1
|
||||||
|
end
|
||||||
|
|
||||||
complete -c rsync -d "Remote path" -n "commandline -ct | string match -q '*:*'" -xa "
|
complete -c rsync -d "Remote path" -n "commandline -ct | string match -q '*:*'" -xa "
|
||||||
(
|
(
|
||||||
# Prepend any user@host:/path information supplied before the remote completion.
|
# Prepend any user@host:/path information supplied before the remote completion.
|
||||||
|
@ -183,6 +205,6 @@ complete -c rsync -d "Remote path" -n "commandline -ct | string match -q '*:*'"
|
||||||
)(
|
)(
|
||||||
# Get the list of remote files from the specified rsync server.
|
# Get the list of remote files from the specified rsync server.
|
||||||
rsync --list-only (__rsync_remote_target) 2>/dev/null | string replace -r '^d.*' '\$0/' |
|
rsync --list-only (__rsync_remote_target) 2>/dev/null | string replace -r '^d.*' '\$0/' |
|
||||||
string replace -r '(\S+\s+){4}' '' # drop the first four columns
|
string replace -r '(\S+\s+){4}' '' "(set -q new_escaping[1]; or echo ' | string escape -n'; echo)"
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
|
|
Loading…
Reference in a new issue