From b8df07ad0615ad593da45973f80afafd018e710f Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Wed, 29 Aug 2018 16:56:30 +0200 Subject: 43351: handle the new diff implementation in the pre-release version of FreeBSD 12 --- Completion/Unix/Type/_diff_options | 121 +++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/Completion/Unix/Type/_diff_options b/Completion/Unix/Type/_diff_options index 55ddecd2a..4fd27442e 100644 --- a/Completion/Unix/Type/_diff_options +++ b/Completion/Unix/Type/_diff_options @@ -1,6 +1,6 @@ #autoload -local of ofwuc ouc oss ofwy ofwg ofwl cmd +local of ofwuc ouc oss ofwy ofwg ofwl cmd variant local -a args cmd="$1" @@ -25,16 +25,16 @@ _diff_palette() { 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 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 \ --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 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 \ -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 \ --old-group-format --new-group-format --changed-group-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 - 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 -D --ifdef" # output formats w/o line format 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" - _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]' \ - '(--no-ignore-file-name-case)--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]' \ - '(-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]' \ + '--ignore-file-name-case[ignore case when comparing file names]' \ + '!(--ignore-file-name-case)--no-ignore-file-name-case' \ '(-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]' \ '(-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]' \ @@ -78,30 +102,18 @@ if _pick_variant -c $cmd gnu=GNU unix -v; then "($of $oss)-u[output a unified diff]" \ "($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 -F --show-function-line)"{-F+,--show-function-line=}'[show the most recent line matching regex]:regex' \ - "($of $ouc $oss)--brief[output only whether files differ]" \ - "($of $ouc $oss)-q[output only whether files differ]" \ + "($of $ouc $oss)"{-q,--brief}'[output only whether files differ]' \ "($of $ouc $oss -e --ed)"{--ed,-e}'[output an ed script]' \ - "($of $ouc $oss)--normal[output a normal diff]" \ - "($of $ouc $oss)--forward-ed[output a reversed ed script]" \ - "($of $ouc $oss)-f[output a reversed ed script]" \ - "($of $ouc $oss)--rcs[RCS format diff]" \ - "($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" \ + "!($of $ouc $oss)--normal" \ + "($of $ouc $oss)"{-f,--forward-ed}'[output a reversed ed script]' \ + "($of $ouc $oss)"{-n,--rcs}'[output an RCS format diff]' \ + "($of $oss)"{-D+,--ifdef=}'[output merged file with preprocessor directives]:preprocessor symbol' \ "($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" \ "($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)--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}'[output through pr]' \ + '(-l --paginate)'{-l,--paginate}'[long output format (paginate with pr(1))]' \ '(-t --expand-tabs)'{-t,--expand-tabs}'[expand tabs to spaces]' \ '(-T --initial-tab)'{-T,--initial-tab}'[prepend a tab]' \ '--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]' \ '(-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-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' \ - '(--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' \ '(-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 of='-c -e -f' case $OSTYPE in - solaris2.<9->) + openbsd*|solaris2.<9->) of+=' -u -U' - args=( + args+=( "($of)-u[output a unified diff]" - "($of)-U[output a unified diff]:lines of context" + "($of)-U+[output a unified diff]:lines of context" ) - ;& - solaris*) - of+=' -C -h -n -D' + ;| + openbsd*|solaris*) args+=( + "($of)-C+[output a context diff]:lines of context" + "($of)-D+[output merged file with preprocessor directives]:preprocessor symbol" '-i[case insensitive]' - '-t[expand tabs to spaces]' + '-l[long output format (paginate with pr(1))]' + '-s[report on identical files]' + '-t[expand tabs in output lines]' + ) + ;| + solaris*) + of+=' -h -n' + args+=( '-w[ignore all white space]' - "($of)-C+[output a context diff]:lines of context" "($of)-h[do a fast, half-hearted job]" - "($of)-n[reversed ed script]" - "($of)-D[output merged file with preprocessor directives]:preprocessor symbol" - '-l[output through pr]' - '-s[report on identical files]' + "($of)-n[output a reversed ed script]" '-S+[set first file in comparison]:start with file:_files' ) ;; openbsd*) of+=' -n -q -u -C -D -U' 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)-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]' '-d[try to produce the smallest diff possible]' '-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[long output format (paginate with pr(1))]' '-p[show characters from the last line before the context]' '-T[consistently align tabs]' - '-t[expand tabs in output lines]' '-w[like -b, but totally ignore whitespace]' '-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]' '-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 a pattern]:pattern' ) -- cgit 1.4.1