From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 4014ce3b for ; Sun, 11 Nov 2018 09:02:03 +0000 (UTC) Received: (qmail 12769 invoked by alias); 11 Nov 2018 09:01:52 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: List-Unsubscribe: X-Seq: 43817 Received: (qmail 2203 invoked by uid 1010); 11 Nov 2018 09:01:52 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.6/5.0):. Processed in 0.797832 secs); 11 Nov 2018 09:01:52 -0000 X-Envelope-From: SRS0=zefv=NW=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1541926904; bh=Mv0Xy5j+AcgBxQzNLu6ePuWg8Nsj4S4GuQPfMjTUDc8=; h=From:To:Subject:Date:From:Subject; b=abz/DXXD7HOdZQJDPedpdhNNt4JBr4ZCTuz1lUA262PIsRi3KluAqXt4mUv7E91Rl5OEVY+B/TOwHsK+hbBiDr8vJnFDlV/BSkuNd5zPBpvwmR/9OXbaJ7t9ONA3ociQxgvvWNhdqeO7HgbCqu5bnM6s+qfKOY/wi+V3koxpuL3Xv7LjzoGpmx4jsMkGt7K0vXws2UNUpOVDzE1jR64d0ykg1XogkOjLpQeBmBNZuhoG+ZVk96e2FoPuCWmnxUx25FLgzvqhRdpp/lst84XPBtBevD/xEtupY/Ns9ZB8rSpMKEfrMklL8UUeB17OBRAYiw2W763CbfBffOMh10RqZA== X-YMail-OSG: HRZTbxEVM1k1AHD18DXRSJggsWQTOsxyw_I4Y1D6R4oKtOQZzOF6Zy4cVQC41SJ RqaUxRcoiPQePT1qBurqiTTfgeE8Q1fl3ez2VjyQvSUuoYr9Kdd78OCWTnTcyoyFDalxTPmfnUdW RVyCZ4oXm061FX1Ar.F3V_UX1gR.XvOy7ZlhFDQnq4zFxCJanCeIi3W_Sk8sf0wbBXeuKjf4vM17 Syra0wyE7KfcdEDc9kgwAKqfpyRuiilkmTNMu6wZXrtoEbvjTjsNWyUv1bVdInEnifwVJjH2aQTJ UNxeY2zXxX_XLYAnsrfnlP.vEOCZHlBIYp4T3WgCt2Vf3.w1Ajt1hur01KgO6maVMS1SG8irY0uF 0PXvOwJ.EV1wDvvFxtAeNAE2tJNOoM5Swha9jByI6tpotIJD6EJpjnyjHvPx70rgl8cTgi3DiA1j 89vnXHtGaYW9ay5oaq9ECiQJlEwBuIhKzkmkC_zoBNEh4PbOLY.H1vAd8Y8LQBRQv702cLtrQgHE HH2hg0_VUxh_ID9.N7jgln7FG_SESnL4k_8anSgRz5qc0nMUX6Lxf4_Q.dUaHiFvn0e8XocTB2Et Ja1Fxkbqj8OKo5DVRCzDo3oxKGU8He4ukd4lRGgzYghjkoFtmKClHerH.A2ouSbqOeR4Lr4OKPN4 vSxsx0jf_TAg4wVJXQABDN0xDBN384jnOwKkXRQ01Ws8lDtGb1dJKitufF.ggIrEPC.LrX9u2kco uJxCWjZdISCvt83Ng8XcGVuZwtN.SfRarsOheCBBixvsacBZMOTPfGXQ0nfqGbkwTYWMl3._xXRe d_MzTXjnaDVRbq63K..5hu5qaBn.Y7MGnEclGJ4RvOaIxxsX5wjLzxhKDfVAGMLzkmOjuiYDlVjg e.p59DG9NAiW.H6VGDcG3q0jql2JPAP_cVvOqpjOs6lZDH.4ani3UgWbNDmCDTpRAC.e6a3cLTPJ IhTQp84CN94y.mIkN1Ejaa7jHpmXR3gpDTOjTi9BY4BU5X_tiSX.D6QGechbB_PvqoOw47sAK2qA - From: Oliver Kiddle To: Zsh workers Subject: PATCH: update btrfs completion MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <52435.1541926901.1@hydra> Date: Sun, 11 Nov 2018 10:01:41 +0100 Message-ID: <52436-1541926901.295562@NK5W.RmZW.X_6N> This updates btrfs completion for new options. This had got a bit behind as I don't tend to use btrfs anymore. I've only updated options and commands from the manual pages and not really verified that completion for devices etc is doing the right thing in new places. Oliver diff --git a/Completion/Linux/Command/_btrfs b/Completion/Linux/Command/_btrfs index 33b5c76f9..3ecebe62a 100644 --- a/Completion/Linux/Command/_btrfs +++ b/Completion/Linux/Command/_btrfs @@ -1,27 +1,25 @@ #compdef btrfs -# based on Btrfs v3.12+20131125 local curcontext="$curcontext" curstate state line expl grp cmd cont shift ret=1 local -a cmds_1 cmds_2 cmds_3 cmds_4 cmds_5 cmds_6 cmds_7 cmds_8 cmds_9 cmds_10 local -a groups args -groups=( subvolume filesystem device scrub balance inspect-internal +groups=( subvolume filesystem device scrub balance inspect-internal property quota qgroup replace rescue check restore send receive help version ) -cmds_1=( create delete list snapshot get-default set-default find-new show help ) -cmds_2=( df show sync defragment resize label balance help ) -cmds_3=( add delete ready scan stats help ) +cmds_1=( create delete list snapshot get-default set-default find-new show sync help ) +cmds_2=( df du show sync defragment resize label usage help ) +cmds_3=( add delete remove ready scan stats usage help ) cmds_4=( start cancel resume status help ) cmds_5=( start pause cancel resume status ) -cmds_6=( inode-resolve logical-resolve subvolid-resolve rootid help ) -cmds_7=( enable disable rescan help ) -cmds_8=( assign remove create destroy show limit help ) -cmds_9=( start status cancel help ) -cmds_10=( chunk-recover super-recover ) +cmds_6=( dump-{super,tree} {inode,logical,subvolid}-resolve min-dev-size rootid tree-stats help ) +cmds_7=( get set list ) +cmds_8=( enable disable rescan help ) +cmds_9=( assign remove create destroy show limit help ) +cmds_10=( start status cancel help ) +cmds_11=( chunk-recover fix-device-size super-recover zero-log ) -[[ $words[2] = h(|e(|l(|p))) ]] && args=( '--full[display detailed help]' ) - -_arguments -C "$args[@]" \ +_arguments -C -A "-*" "$args[@]" \ '(- *)--help[print help information]' \ '(- *)--version[print version information]' \ '(--version)1: :->groups' \ @@ -37,10 +35,10 @@ while (( $#state )); do ;; cmds) grp=${groups[(i)$words[2]*]} - (( grp && grp <= 14 )) || return 1 + (( grp && grp <= 16 )) || return 1 cont=${groups[grp]} curcontext="${curcontext%:*:*}:$service-${cont}:" - if (( grp <= 10 )); then + if (( grp <= 11 )); then _wanted commands expl command compadd -a cmds_$grp && ret=0 continue fi @@ -48,9 +46,9 @@ while (( $#state )); do args) if [[ $curstate != cmds ]]; then grp=${groups[(i)$words[1]*]} - (( grp && grp <= 15 )) || return 1 + (( grp && grp <= 16 )) || return 1 cont=${groups[grp]} - if (( grp <= 10 )); then + if (( grp <= 11 )); then local group=cmds_$grp local cmd=${${(P)group}[(i)$words[2]*]} (( cmd )) || return 1 @@ -62,18 +60,20 @@ while (( $#state )); do fi args=( '(-)--help[print help information]' ) case ${cont} in - filesystem:balance) - if (( CURRENT == 3 )); then - state+=cmds - else - shift words - (( CURRENT-- )) - state+=args - fi - continue + subvolume:create) + args+=( + '*-i[add the newly created subvolume to a qgroup]:qgroup' + '1:destination:->mounts' + ) + ;; + subvolume:delete) + args+=( + '(-c --commit-after -C --commit-each)'{-c,--commit-after}'[wait for transaction commit at the end of the operation]' + '(-c --commit-after -C --commit-each)'{-C,--commit-each}'[wait for transaction commit after deleting each subvolume]' + '(-v --verbose)'{-v,--verbose}'[verbose output of operations]' + '1:subvolume:_files -/' + ) ;; - subvolume:create) args+=( '1:destination:->mounts' );; - subvolume:delete) args+=( '1:subvolume:_files -/' );; subvolume:snapshot) args+=( '-r[readonly snapshot]' @@ -91,53 +91,100 @@ while (( $#state )); do '-o[include only subvolumes below the path]' '-u[include UUID of subvolume]' '-q[include parent UUID of subvolume]' + '-R[include the uuid of the received snapshots]' '-t[print results as a table]' '-s[list only snapshot subvolumes]' '-r[list only readonly subvolumes]' + '-d[list deleted subvolumes that are not yet cleaned]' '-G[subvolume generation is more or less than]:gen: _guard "(|+|-)[0-9]#"' '-C[subvolume ogeneration is more or less than]:ogen: _guard "(|+|-)[0-9]#"' - '--sort=-[list in order]:sort:_values -s "," sort rootid gen ogen path' + '--sort=-[list in order]:order:_sequence compadd - rootid gen ogen path' '1:path:->mounts' ) ;; subvolume:set-default) args+=( '1:id:_guard "[0-9]#" id' '2:path:->mounts' );; - subvolume:get-default) args+=( '1:path:_files -/' );; + subvolume:show) + args+=( + '(-r --rootid)'{-r,--rootid}'[rootid of the subvolume]' + '(-u --uuid)'{-u,--uuid}'[uuid of the subvolume]' + '1:subvolume path:_directories' + ) + ;; + subvolume:sync) args+=( '-s[sleep between checks]:delay (seconds) [1]' );; subvolume:find-new) args+=( '1:subvol:_files -/' '2:lastgen: _message "last gen"' );; + (device|filesystem|qgroup):(df|du|show|usage)) + args+=( + '--iec[use 1024 as a base]' + '--si[use 1000 as a base]' + ) + ;| + (device|filesystem):(df|usage)) + args+=( + '(-b --raw)'{-b,--raw}'[output raw numbers in bytes]' + '(-h --human-readable -H)'{-h,--human-readable}'[output human friendly numbers, base 1024]' + '(-h --human-readable -H)-H[output human friendly numbers, base 1000]' + '(-k --kbytes)'{-k,--kbytes}'[show sizes in KiB, or kB with --si]' + '(-m --mbytes)'{-m,--mbytes}'[show sizes in MiB, or MB with --si]' + '(-g --gbytes)'{-g,--gbytes}'[show sizes in GiB, or GB with --si]' + '(-t --tbytes)'{-t,--tbytes}'[show sizes in TiB, or TB with --si]' + ) + ;| + (filesystem|qgroup):(du|show)) + args+=( + '--raw[output raw numbers in bytes]' + '--human-readable[output human friendly numbers, base 1024]' + '--kbytes[show sizes in KiB, or kB with --si]' + '--mbytes[show sizes in MiB, or MB with --si]' + '--gbytes[show sizes in GiB, or GB with --si]' + '--tbytes[show sizes in TiB, or TB with --si]' + ) + ;| filesystem:resize) args+=( '1:size:_guard "(|+|-)[0-9]#[GKM]"' '2:path:->mounts' );; filesystem:defragment) args+=( '-v[verbose]' - '-c[compress files while defragmenting]' + '-r[defragment files recursively]' + '-c+[compress files while defragmenting]::compression algorithm:(zlib lzo zstd)' '-r[defragment files recursively]' '-f[flush after defragmenting]' '-s[start position]:byte position' '-l[defragment limited number of bytes]:length (bytes)' - '-t[defragment only files over a certain size]:minimum size (bytes)' + '-t[defragment only files over a certain size]:minimum size (bytes) [32M]' '*:file:_files' ) ;; - filesystem:label) args+=( '1:device:_files -g "*(d)"' '2:label' );; + filesystem:du) args+=( '(-s --summarize)'{-s,--summarize}'[display only a total for each argument]' );; + filesystem:label) args+=( '1:device:_files -g "*(-%)"' '2:new label' );; filesystem:show) args+=( '(1 -)'{-d,--all-devices}'[scan all devices in /dev]' '(1 -)'{-m,--mounted}'[show only mounted filesystems]' + '--raw[output raw numbers in bytes]' + '--human-readable[output human friendly numbers, base 1024]' '1: :_guard "^-*" uuid or label' ) ;; - device:(add|delete)) + filesystem:usage) args+=( '-T[show data in tabular format]' );; + device:(add|delete|ready|remove)) args+=( - '1:device:_files -g "*(d)"' + '1:device:_files -g "*(-%)"' '2:path:->mounts' ) [[ ${${(P)group}[cmd]} == add ]] && args+=( - {-K,--nodiscard}'[do not perform discard]' + {-K,--nodiscard}"[don't perform discard]" {-f,--force}'[force overwrite of existing filesystem]' ) ;; - device:scan) args+=( '(1 -)--all-devices[scan all devices in /dev]' '1:device:_files -g "*(d)"' );; - device:stats) args+=( "1:device or mountpoint:_files -g '*(d,/)'" '-z[reset stats when done]' );; - device:ready) args+=( '1:device: _files -g "*(d)"' );; + device:scan) args+=( '(1 -)'{-d,--all-devices}'[scan all devices in /dev]' '1:device:_files -g "*(-%)"' );; + device:stats) + args+=( + '(-c --check)'{-c,--check}'[return non-zero if any stat counter is not zero]' + '(-z --reset)'{-z,--reset}'[reset stats when done]' + "1:device or mountpoint:_files -g '*(-%,/)'" + ) + ;; + device:ready) args+=( '1:device: _files -g "*(-%)"' );; scrub:(start|resume)) args+=( "-B[don't background and print statistics at end]" @@ -149,10 +196,18 @@ while (( $#state )); do '-n[set ioprio classdata]:classdata:(0 1 2 3 4 5 6 7)' '1:path or device:_files' ) - [[ ${${(P)group}[cmd]} == start ]] && args+=( '-R[raw print mode]' ) + [[ ${${(P)group}[cmd]} == start ]] && args+=( + '-f[force starting new scrub even if a scrub is already running]' + ) + ;; + scrub:cancel) args+=( '1: : _guard "^-*" "path or device"' );; + scrub:status) + args+=( + '-d[separate statistics for each device]' + '-R[print raw stats]' + '1:path or device:_files' + ) ;; - scrub:cancel) args+=( '1:path or device' );; - scrub:status) args+=( '-d[separate statistics for each device]' '1:path or device:_files' );; balance:start) args+=( '(-m -s)-d+[act on data chunks]:filter:->filters' @@ -160,11 +215,21 @@ while (( $#state )); do '(-d -m)-s+[act on system chunks (only under -f)]:filters:->filters' '-v[verbose mode]' '-f[force reducing of metadata integrity]' + "--full-balance[don't print warning and don't delay start]" + '(--background --bg)'{--background,--bg}'[run balance operation asynchronously in the background]' '1:path:_files -/' ) ;; balance:status) args+=( '-v[verbose mode]' '1:path:_files -/' );; balance:(pause|cancel|resume)) args+=( '1:path:_files -/' );; + property:set) args+=( '3:value' );& + property:get) args+=( '2:property:(ro label compression)' );& + property:list) + args+=( + '-t[specify object type]:object type:(subvol filesystem inode device)' + '1:object' + ) + ;; quota:(enable|disable)) args+=( '1:path:_files -/' );; quota:rescan) args+=( @@ -174,7 +239,10 @@ while (( $#state )); do ) ;; qgroup:(assign|remove)) args+=( '1:source path:_files -/' - '2:destination path:_files -/' '3:path:_files -/' );; + '2:destination path:_files -/' '3:path:_files -/' );| + qgroup:assign) args+=( \!--rescan + "--no-rescan[don't do a rescan, even if the assignment will make the quotas inconsitent]" ) + ;; qgroup:(create|destroy)) args+=( '1:qgroupid:' '2:path:_files -/' );; qgroup:show) args+=( @@ -182,10 +250,11 @@ while (( $#state )); do '-c[print child qgroup id]' '-r[print max referenced size of qgroup]' '-e[print max exclusive size of qgroup]' - '-F[list impacted qgroups\(include ancestral qgroups\)]' - '-f[list impacted qgroups\(exclude ancestral qgroups\)]' + '-F[list impacted qgroups \(include ancestral qgroups\)]' + '-f[list impacted qgroups \(exclude ancestral qgroups\)]' '--sort=-[sort qgroups]:sort:_values -s , sort \ qgroupid rfer excl max_rfer max_excl' + '--sync[do filesystem sync before getting information]' '1:path:_files -/' ) ;; @@ -193,68 +262,106 @@ while (( $#state )); do args+=( '-c[limit amount of data after compression]' '-e[limit space exclusively to qgroup]' - ':size or none: _message "size or none"' + ': :_guard "^-*" "size or none"' ':qgroup id or path:_files -/' ':path:_files -/' ) ;; replace:start) args+=( - '-r[read from only]:srcdev:_files' + '-r[read from specified source device only]:srcdev:_files' '-f[force overwriting of target]' - '-B[do not background]' + "-B[don't background]" ':srcdev or devid:_files' ':target:_files' ':path:->mounts' ) ;; - replace:status) args+=( '-1[print once]' ':path:->mounts' );; + replace:status) args+=( '-1[print once rather than continuously]' ':path:->mounts' );; replace:cancel) args+=( ':path:->mounts' );; + inspect*:dump-tree) + args+=( + '(-e --extents)'{-e,--extents}'[print only extent info: extent and device trees]' + '(-d --device)'{-d,--device}'[print only device info: tree root, chunk and device trees]' + '(-r --roots)'{-r,--roots}'[print only short root node info]' + '(-R --backups)'{-R,--backups}'[same as --roots plus print backup root info]' + '(-u --uuid)'{-u,--uuid}'[print only the uuid tree]' + '(-b --block)'{-b,--block}'[print info from the specified block only]:block' + '(-t --tree)'{-t,--tree}'[print only tree with the given id (string or number)]:tree id' + '--follow[use with -b, to show all children tree blocks of the block]' + ) + ;; + inspect*:dump-super) + args+=( \!-s:byte\ number '!-i:super:(0 1 2)' + '(-f --full)'{-f,--full}'[print full superblock information, backup roots etc.]' + '(-a --all)'{-a,--all}'[print information about all superblocks]' + '(-s --super)'{-s,--super}'[specify which copy to print out]:super:(0 1 2)' + '(-F --force)'{-F,--force}'[attempt to dump superblocks with bad magic]' + '--bytenr[specify alternate superblock offset]:offset' + ) + ;; inspect*:inode*) args+=( '-v[verbose mode]' '1:inode:_files' '2:path:_files -/' );; inspect*:subvol*) args+=( '-v[verbose mode]' '1:subvolid:_guard "[0-9]#" subvolume id' '2:path:_files -/' );; inspect*:logical*) args+=( '-v[verbose mode]' '-P[skip the path resolving and print the inodes instead]' - '-s[buffer size]:buffer size:' + '-s[specify buffer size]:buffer size [4096]' '1:logical address:_files' '2:filesystem path:_files -/' ) ;; + inspect*:min*) args+=( '--id[specify the device id to query]:device id [1]' );; inspect*:rootid) args+=( '1:path:_files -/' );; + inspect*:tree*) args+=( '-b[print raw numbers in bytes]' );; rescue:(chunk|super)-recover) args+=( '-y[assume yes to every question]' '-v[verbose mode]' + '1:device:_files' ) - [[ ${${(P)group}[cmd]} == chunk-recover ]] && args+=('-h[display help]') + [[ ${${(P)group}[cmd]} == chunk-recover ]] && args+=('(-)-h[display help]') ;; subvolume:get-default) ;& *:sync) ;& *:df) args+=( '1:path:->mounts' );; check) - args+=( - {-s,--support}'[specify superblock]:superblock' + args+=( \!--readonly + '(-s --super)'{-s,--super}'[specify superblock]:superblock' + '(-b --backup)'{-b,--backup}'[use the backup root copy]' + '(-r --tree-root)'{-r,--tree-root}'[use specified byte number for the tree root]:byte number' + '--chunk-root[ use the given offset for the chunk tree root]:byte offset' '--repair[try to repair the filesystem]' + '--force[skip mount checks, repair is not possible]' + '--mode[select memory/IO trade-off]:mode:(original lowmem)' '--init-csum-tree[create a new CRC tree]' '--init-extent-tree[create a new extent tree]' + '--clear-space-cache[clear space cache for v1 or v2]:version:(v1 v2)' + '--check-data-csum[verify checkums of data blocks]' + '(-Q --qgroup-report)'{-Q,--qgroup-report}'[verify qgroup accounting and compare against filesystem accounting]' + '(-E --subvol-extents)'{-E,--subvol-extents}'[show extent state for the given subvolume]:subvolume id' + '(-p --progress)'{-p,--progress}'[indicate progress at various checking phases]' '1:path:_files -/' ) ;; restore) args+=( - '-s[get snapshots]' - '-x[get extended attributes]' - '-v[verbose]' - '-i[ignore errors]' - '-o[overwrite]' - '-t[tree location]:tree' - '-f[filesystem location]:filesystem' - '-u[super mirror]:mirror' - '-r[root objectid]:objectid' - '-d[find dir]' - '-l[list tree roots]' - '--path-regex[restore matching filenames]:regex' + '(-s --snapshots)'{-s,--snapshots}'[get snapshots]' + '(-x --xattr)'{-x,--xattr}'[restore extended attributes]' + '(-m --metadata)'{-m,--metadata}'[restore owner, mode and times]' + '(-S --symlink)'{-S,--symlink}'[restore symbolic links]' + '(-v --verbose)'{-v,--verbose}'[be verbose and output what is restored]' + '(-i --ignore-errors)'{-i,--ignore-errors}'[ignore errors]' + '(-o --overwrite)'{-o,--overwrite}'[overwrite directories and files]' + '-t[specify tree location]:tree root' + '-f[specify filesystem location]:byte offset' + '(-u --super)'{-u,--super}'[use specified superblock mirror]:mirror:(0 1 2)' + '(-r --root)'{-r,--root}'[specify root objectid]:root id' + '-d[find directory]' + '(-l --list-roots)'{-l,--list-roots}'[list tree roots]' + '(-D --dry-run)'{-D,--dry-run}'[dry run (only list files that would be recovered)]' + '--path-regex[restore only filenames matching regex]:regex' + '-c[ignore case (--path-regex only)]' '1:device:_files -/' '2:path:_files -/' ) @@ -262,9 +369,13 @@ while (( $#state )); do send) args+=( '*-v[verbose mode]' + '-e[if sending multiple subvolumes at once, use the new format]' '-p[send incremental stream]:parent:_files -/' '*-c[use snapshot as clone source]:clone:_files -/' - '-f[output file]:file:_files' + '-f[specify output file]:file:_files' + '--no-data[send in NO_FILE_DATA mode]' + '(-v --verbose)'{-v,--verbose}'[enable verbose output]' + '(-q --quiet)'{-q,--quiet}'[suppress all messages except errors]' '1:subvolume:_files -/' ) ;; @@ -273,9 +384,14 @@ while (( $#state )); do '*-v[verbose mode]' '-f[input file]:file: _files' '-e[terminate after ]' + '(-C --chroot)'{-C,--chroot}'[confine the process to destination path using chroot(1)]' + '(-E --max-errors)'{-E,--max-errors}'[terminate as soon as specified number of errors occur]:errors [1]' + '(--dump)-m[specify root mount point of the destination filesystem]:mount point:_directories' + '(-m)--dump[dump stream metadata, one line per operation]' '1:mount:->mounts' ) ;; + h(|e(|l(|p)))) args+=( '--full[display detailed help]' );; *) args+=( '*: :_default' );; # fallback for unknown subcommands esac if ! (( shift )); then