mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-11 13:01:28 +02:00
43351: handle the new diff implementation in the pre-release version of FreeBSD 12
This commit is contained in:
parent
245503929e
commit
b8df07ad06
1 changed files with 64 additions and 63 deletions
|
@ -1,6 +1,6 @@
|
||||||
#autoload
|
#autoload
|
||||||
|
|
||||||
local of ofwuc ouc oss ofwy ofwg ofwl cmd
|
local of ofwuc ouc oss ofwy ofwg ofwl cmd variant
|
||||||
local -a args
|
local -a args
|
||||||
|
|
||||||
cmd="$1"
|
cmd="$1"
|
||||||
|
@ -25,16 +25,16 @@ _diff_palette() {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
if _pick_variant -c $cmd gnu=GNU unix -v; then
|
if _pick_variant -r variant -c $cmd gnu=GNU unix -v || [[ $OSTYPE = freebsd<12->.* ]]; then
|
||||||
# output formats
|
# output formats
|
||||||
of="-y --side-by-side -n --rcs -e -f --ed -q --brief -c -C --context -u -U \
|
of="-y --side-by-side -n --rcs -e -f --ed -q --brief -c -C --context -u -U \
|
||||||
--unified --old-group-format --new-group-format --changed-group-format \
|
--unified --old-group-format --new-group-format --changed-group-format \
|
||||||
--unchanged-group-format --line-format --old-line-format --new-line-format \
|
--unchanged-group-format --line-format --old-line-format --new-line-format \
|
||||||
--unchanged-line-format --normal -D --ifdef"
|
--unchanged-line-format -D --ifdef"
|
||||||
|
|
||||||
# output formats w/o unified and context
|
# output formats w/o unified and context
|
||||||
ofwuc="-y --side-by-side -n --rcs -e -f --ed -q --brief --old-group-format \
|
ofwuc="-y --side-by-side -n --rcs -e -f --ed -q --brief --old-group-format \
|
||||||
--new-group-format --changed-group-format --unchanged-group-format --normal \
|
--new-group-format --changed-group-format --unchanged-group-format \
|
||||||
--line-format --old-line-format --new-line-format --unchanged-line-format \
|
--line-format --old-line-format --new-line-format --unchanged-line-format \
|
||||||
-D --ifdef"
|
-D --ifdef"
|
||||||
|
|
||||||
|
@ -48,26 +48,50 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then
|
||||||
ofwy="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
|
ofwy="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
|
||||||
--old-group-format --new-group-format --changed-group-format \
|
--old-group-format --new-group-format --changed-group-format \
|
||||||
--unchanged-group-format --line-format --old-line-format \
|
--unchanged-group-format --line-format --old-line-format \
|
||||||
--new-line-format --unchanged-line-format --normal -D --ifdef"
|
--new-line-format --unchanged-line-format -D --ifdef"
|
||||||
|
|
||||||
# output formats w/o group format
|
# output formats w/o group format
|
||||||
ofwg="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified --normal \
|
ofwg="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
|
||||||
--line-format --old-line-format --new-line-format --unchanged-line-format
|
--line-format --old-line-format --new-line-format --unchanged-line-format
|
||||||
-D --ifdef"
|
-D --ifdef"
|
||||||
|
|
||||||
# output formats w/o line format
|
# output formats w/o line format
|
||||||
ofwl="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
|
ofwl="-n --rcs -e -f --ed -q --brief -c -C --context -u -U --unified \
|
||||||
--old-group-format --new-group-format --changed-group-format --normal \
|
--old-group-format --new-group-format --changed-group-format \
|
||||||
--unchanged-group-format"
|
--unchanged-group-format"
|
||||||
|
|
||||||
_arguments -s \
|
if [[ $variant = gnu ]]; then
|
||||||
|
(( $#words > 2 )) || args+=(
|
||||||
|
'(-v --version)'{-v,--version}'[display version information]'
|
||||||
|
'--help[display usage information]'
|
||||||
|
)
|
||||||
|
args+=(
|
||||||
|
'(-H --speed-large-files)'{-H,--speed-large-files}'[assume large files and many small changes]'
|
||||||
|
'(-E --ignore-tab-expansion)'{-E,--ignore-tab-expansion}'[ignore changes due to tab expansion]'
|
||||||
|
'(-Z --ignore-trailing-space)'{-Z,--ignore-trailing-space}'[ignore white space at line end]'
|
||||||
|
"($ofwuc $oss -F --show-function-line)"{-F+,--show-function-line=}'[show the most recent line matching regex]:regex'
|
||||||
|
"($ofwy $ouc --width -W)"{--width=,-W+}'[set size of line]:number of characters per line'
|
||||||
|
"($ofwy $ouc)--left-column[output only left column of common lines]"
|
||||||
|
"($ofwy $ouc)--suppress-common-lines[do not output common lines]"
|
||||||
|
"($ofwg $ouc $oss)--old-group-format=[set old group format]:old group format"
|
||||||
|
"($ofwg $ouc $oss)--new-group-format=[set new group format]:new group format"
|
||||||
|
"($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format"
|
||||||
|
'(--to-file)--from-file=[compare specified file to all operands]:from file:_files' \
|
||||||
|
'(--from-file)--to-file=[compare all operands to specified file]:to file:_files' \
|
||||||
|
'--color=-[use colors in output]::when [auto]:(never always auto)'
|
||||||
|
'--palette=[specify colors to use]:color:_diff_palette'
|
||||||
|
"($of $ouc)--side-by-side[output in two columns]"
|
||||||
|
"($of $ouc)-y[output in two columns]"
|
||||||
|
)
|
||||||
|
else
|
||||||
|
args+=( '!--speed-large-files' )
|
||||||
|
fi
|
||||||
|
|
||||||
|
_arguments -s $args \
|
||||||
'(-i --ignore-case)'{-i,--ignore-case}'[case insensitive]' \
|
'(-i --ignore-case)'{-i,--ignore-case}'[case insensitive]' \
|
||||||
'(--no-ignore-file-name-case)--ignore-file-name-case[ignore case when comparing file names]' \
|
'--ignore-file-name-case[ignore case when comparing file names]' \
|
||||||
'(--ignore-file-name-case)--no-ignore-file-name-case[consider case when comparing file names]' \
|
'!(--ignore-file-name-case)--no-ignore-file-name-case' \
|
||||||
'(-E --ignore-tab-expansion)'{-E,--ignore-tab-expansion}'[ignore changes due to tab expansion]' \
|
|
||||||
'(-Z --ignore-trailing-space)'{-Z,--ignore-trailing-space}'[ignore white space at line end]' \
|
|
||||||
'(-b --ignore-space-change)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \
|
'(-b --ignore-space-change)'{-b,--ignore-space-change}'[ignore changes in the amount of white space]' \
|
||||||
'(--ignore-all-space -w)'{--ignore-all-space,-w}'[ignore all white space]' \
|
|
||||||
'(-B --ignore-blank-lines)'{-B,--ignore-blank-lines}'[ignore lines that are all blank]' \
|
'(-B --ignore-blank-lines)'{-B,--ignore-blank-lines}'[ignore lines that are all blank]' \
|
||||||
'(-I --ignore-matching-lines)'{-I+,--ignore-matching-lines=}'[ignore lines that match regex]:line exclusion regex:' \
|
'(-I --ignore-matching-lines)'{-I+,--ignore-matching-lines=}'[ignore lines that match regex]:line exclusion regex:' \
|
||||||
'--strip-trailing-cr[strip trailing carriage return on input]' \
|
'--strip-trailing-cr[strip trailing carriage return on input]' \
|
||||||
|
@ -78,30 +102,18 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then
|
||||||
"($of $oss)-u[output a unified diff]" \
|
"($of $oss)-u[output a unified diff]" \
|
||||||
"($ofwuc $oss)*"{-L+,--label=}'[set label to use instead of file name and timestamp]:label' \
|
"($ofwuc $oss)*"{-L+,--label=}'[set label to use instead of file name and timestamp]:label' \
|
||||||
"($ofwuc $oss -p --show-c-function)"{-p,--show-c-function}'[show C function of each change]' \
|
"($ofwuc $oss -p --show-c-function)"{-p,--show-c-function}'[show C function of each change]' \
|
||||||
"($ofwuc $oss -F --show-function-line)"{-F+,--show-function-line=}'[show the most recent line matching regex]:regex' \
|
"($of $ouc $oss)"{-q,--brief}'[output only whether files differ]' \
|
||||||
"($of $ouc $oss)--brief[output only whether files differ]" \
|
|
||||||
"($of $ouc $oss)-q[output only whether files differ]" \
|
|
||||||
"($of $ouc $oss -e --ed)"{--ed,-e}'[output an ed script]' \
|
"($of $ouc $oss -e --ed)"{--ed,-e}'[output an ed script]' \
|
||||||
"($of $ouc $oss)--normal[output a normal diff]" \
|
"!($of $ouc $oss)--normal" \
|
||||||
"($of $ouc $oss)--forward-ed[output a reversed ed script]" \
|
"($of $ouc $oss)"{-f,--forward-ed}'[output a reversed ed script]' \
|
||||||
"($of $ouc $oss)-f[output a reversed ed script]" \
|
"($of $ouc $oss)"{-n,--rcs}'[output an RCS format diff]' \
|
||||||
"($of $ouc $oss)--rcs[RCS format diff]" \
|
"($of $oss)"{-D+,--ifdef=}'[output merged file with preprocessor directives]:preprocessor symbol' \
|
||||||
"($of $ouc $oss)-n[RCS format diff]" \
|
|
||||||
"($of $ouc)--side-by-side[output in two columns]" \
|
|
||||||
"($of $ouc)-y[output in two columns]" \
|
|
||||||
"($ofwy $ouc --width -W)"{--width=,-W+}'[set size of line]:number of characters per line' \
|
|
||||||
"($ofwy $ouc)--left-column[output only left column of common lines]" \
|
|
||||||
"($ofwy $ouc)--suppress-common-lines[do not output common lines]" \
|
|
||||||
"($of $oss)"{-D,--ifdef=}'[output merged file with preprocessor directives]:preprocessor symbol' \
|
|
||||||
"($ofwg $ouc $oss)--old-group-format=[set old group format]:old group format" \
|
|
||||||
"($ofwg $ouc $oss)--new-group-format=[set new group format]:new group format" \
|
|
||||||
"($ofwg $ouc $oss)--changed-group-format=[set changed group format]:changed group format" \
|
"($ofwg $ouc $oss)--changed-group-format=[set changed group format]:changed group format" \
|
||||||
"($ofwg $ouc $oss)--unchanged-group-format=[set unchanged group format]:unchanged group format" \
|
"($ofwg $ouc $oss)--unchanged-group-format=[set unchanged group format]:unchanged group format" \
|
||||||
"($ofwl $ouc $oss)--line-format=[set line format]:line format" \
|
"($ofwl $ouc $oss)--line-format=[set line format]:line format" \
|
||||||
"($ofwl $ouc $oss)--old-line-format=[set old line format]:old line format" \
|
"($ofwl $ouc $oss)--old-line-format=[set old line format]:old line format" \
|
||||||
"($ofwl $ouc $oss)--new-line-format=[set new line format]:new line format" \
|
"($ofwl $ouc $oss)--new-line-format=[set new line format]:new line format" \
|
||||||
"($ofwl $ouc $oss)--unchanged-line-format=[set unchanged line format]:unchanged line format" \
|
'(-l --paginate)'{-l,--paginate}'[long output format (paginate with pr(1))]' \
|
||||||
'(-l --paginate)'{-l,--paginate}'[output through pr]' \
|
|
||||||
'(-t --expand-tabs)'{-t,--expand-tabs}'[expand tabs to spaces]' \
|
'(-t --expand-tabs)'{-t,--expand-tabs}'[expand tabs to spaces]' \
|
||||||
'(-T --initial-tab)'{-T,--initial-tab}'[prepend a tab]' \
|
'(-T --initial-tab)'{-T,--initial-tab}'[prepend a tab]' \
|
||||||
'--tabsize=[specify width of tab]:width [8]' \
|
'--tabsize=[specify width of tab]:width [8]' \
|
||||||
|
@ -111,66 +123,55 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then
|
||||||
'(-P --unidirectional-new-file)'{-P,--unidirectional-new-file}'[treat absent first files as empty]' \
|
'(-P --unidirectional-new-file)'{-P,--unidirectional-new-file}'[treat absent first files as empty]' \
|
||||||
'(-s --report-identical-files)'{-s,--report-identical-files}'[report when two files are the same]' \
|
'(-s --report-identical-files)'{-s,--report-identical-files}'[report when two files are the same]' \
|
||||||
\*{-x+,--exclude=}'[exclude files matching pattern]:exclusion pattern' \
|
\*{-x+,--exclude=}'[exclude files matching pattern]:exclusion pattern' \
|
||||||
'(-X --exclude-from)'{-X+,--exclude-from=}'[exclude files matching pattern in file]:exclude file:_files' \
|
\*{-X+,--exclude-from=}'[exclude files matching pattern in file]:exclude file:_files' \
|
||||||
'(-S --starting-file)'{-S+,--starting-file=}'[set first file in comparison]:start with file:_files' \
|
'(-S --starting-file)'{-S+,--starting-file=}'[set first file in comparison]:start with file:_files' \
|
||||||
'(--to-file)--from-file=[compare specified file to all operands]:from file:_files' \
|
|
||||||
'(--from-file)--to-file=[compare all operands to specified file]:to file:_files' \
|
|
||||||
'--horizon-lines=[set number of lines to keep in prefix and suffix]:number of horizon lines' \
|
'--horizon-lines=[set number of lines to keep in prefix and suffix]:number of horizon lines' \
|
||||||
'(-d --minimal)'{-d,--minimal}'[try to find a smaller set of changes]' \
|
'(-d --minimal)'{-d,--minimal}'[try to find a smaller set of changes]' \
|
||||||
'(-H --speed-large-files)'{-H,--speed-large-files}'[assume large files and many small changes]' \
|
|
||||||
'--color=-[use colors in output]::when [auto]:(never always auto)' \
|
|
||||||
'--palette=[specify colors to use]:color:_diff_palette' \
|
|
||||||
'(-v --version)'{-v,--version}'[display version info]' \
|
|
||||||
'--help[display help info]' \
|
|
||||||
"$@"
|
"$@"
|
||||||
else
|
else
|
||||||
of='-c -e -f'
|
of='-c -e -f'
|
||||||
case $OSTYPE in
|
case $OSTYPE in
|
||||||
solaris2.<9->)
|
openbsd*|solaris2.<9->)
|
||||||
of+=' -u -U'
|
of+=' -u -U'
|
||||||
args=(
|
|
||||||
"($of)-u[output a unified diff]"
|
|
||||||
"($of)-U[output a unified diff]:lines of context"
|
|
||||||
)
|
|
||||||
;&
|
|
||||||
solaris*)
|
|
||||||
of+=' -C -h -n -D'
|
|
||||||
args+=(
|
args+=(
|
||||||
'-i[case insensitive]'
|
"($of)-u[output a unified diff]"
|
||||||
'-t[expand tabs to spaces]'
|
"($of)-U+[output a unified diff]:lines of context"
|
||||||
'-w[ignore all white space]'
|
)
|
||||||
|
;|
|
||||||
|
openbsd*|solaris*)
|
||||||
|
args+=(
|
||||||
"($of)-C+[output a context diff]:lines of context"
|
"($of)-C+[output a context diff]:lines of context"
|
||||||
"($of)-h[do a fast, half-hearted job]"
|
"($of)-D+[output merged file with preprocessor directives]:preprocessor symbol"
|
||||||
"($of)-n[reversed ed script]"
|
'-i[case insensitive]'
|
||||||
"($of)-D[output merged file with preprocessor directives]:preprocessor symbol"
|
'-l[long output format (paginate with pr(1))]'
|
||||||
'-l[output through pr]'
|
|
||||||
'-s[report on identical files]'
|
'-s[report on identical files]'
|
||||||
|
'-t[expand tabs in output lines]'
|
||||||
|
)
|
||||||
|
;|
|
||||||
|
solaris*)
|
||||||
|
of+=' -h -n'
|
||||||
|
args+=(
|
||||||
|
'-w[ignore all white space]'
|
||||||
|
"($of)-h[do a fast, half-hearted job]"
|
||||||
|
"($of)-n[output a reversed ed script]"
|
||||||
'-S+[set first file in comparison]:start with file:_files'
|
'-S+[set first file in comparison]:start with file:_files'
|
||||||
)
|
)
|
||||||
;;
|
;;
|
||||||
openbsd*)
|
openbsd*)
|
||||||
of+=' -n -q -u -C -D -U'
|
of+=' -n -q -u -C -D -U'
|
||||||
args=(
|
args=(
|
||||||
"($of)-n[produce an rcsdiff(1)-compatible diff]"
|
"($of)-n[output an rcsdiff(1)-compatible diff]"
|
||||||
"($of)-q[only print a line when the files differ; does not produce a list of changes]"
|
"($of)-q[only print a line when the files differ; does not produce a list of changes]"
|
||||||
"($of)-u[produce a unified diff with 3 lines of context]"
|
|
||||||
"($of)-C+[produce a context diff]:number of lines of context"
|
|
||||||
"($of)-D[produce a merged file with preprocessor directives]:preprocessor symbol"
|
|
||||||
"($of)-U+[produce a unified diff]:number of lines of context"
|
|
||||||
'-a[treat all files as ASCII text]'
|
'-a[treat all files as ASCII text]'
|
||||||
'-d[try to produce the smallest diff possible]'
|
'-d[try to produce the smallest diff possible]'
|
||||||
'-I[ignore changes whose lines match the extended regular expression]:extended regular expression pattern'
|
'-I[ignore changes whose lines match the extended regular expression]:extended regular expression pattern'
|
||||||
'-i[ignore case]'
|
|
||||||
'*-L[print a label instead of the file name and time]:label'
|
'*-L[print a label instead of the file name and time]:label'
|
||||||
'-l[long output format (paginate with pr(1))]'
|
|
||||||
'-p[show characters from the last line before the context]'
|
'-p[show characters from the last line before the context]'
|
||||||
'-T[consistently align tabs]'
|
'-T[consistently align tabs]'
|
||||||
'-t[expand tabs in output lines]'
|
|
||||||
'-w[like -b, but totally ignore whitespace]'
|
'-w[like -b, but totally ignore whitespace]'
|
||||||
'-N[treat absent files in either directory as if they were empty]'
|
'-N[treat absent files in either directory as if they were empty]'
|
||||||
'-P[treat absent files in the second directory as if they were empty]'
|
'-P[treat absent files in the second directory as if they were empty]'
|
||||||
'-S[start a directory diff from a file name]:file name:_files'
|
'-S[start a directory diff from a file name]:file name:_files'
|
||||||
'-s[report files that are the same]'
|
|
||||||
'*-X[exclude files and subdirectories whose basenames match lines in a file]:file name:_files'
|
'*-X[exclude files and subdirectories whose basenames match lines in a file]:file name:_files'
|
||||||
'-x[exclude files and subdirectories whose basenames match a pattern]:pattern'
|
'-x[exclude files and subdirectories whose basenames match a pattern]:pattern'
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue