From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10132 invoked from network); 28 Mar 2006 23:08:12 -0000 X-Spam-Checker-Version: SpamAssassin 3.1.1 (2006-03-10) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00, FORGED_RCVD_HELO autolearn=ham version=3.1.1 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 28 Mar 2006 23:08:12 -0000 Received: (qmail 32763 invoked from network); 28 Mar 2006 23:08:07 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 28 Mar 2006 23:08:07 -0000 Received: (qmail 12540 invoked by alias); 28 Mar 2006 23:08:03 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 22390 Received: (qmail 12530 invoked from network); 28 Mar 2006 23:08:02 -0000 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by sunsite.dk with SMTP; 28 Mar 2006 23:08:02 -0000 Received: (qmail 32445 invoked from network); 28 Mar 2006 23:08:02 -0000 Received: from dsl3-63-249-88-2.cruzio.com (HELO dot.blorf.net) (63.249.88.2) by a.mx.sunsite.dk with SMTP; 28 Mar 2006 23:08:00 -0000 Received: by dot.blorf.net (Postfix, from userid 1000) id 1911846F0; Tue, 28 Mar 2006 15:07:59 -0800 (PST) Date: Tue, 28 Mar 2006 15:07:59 -0800 From: Wayne Davison To: zsh-workers@sunsite.dk Subject: Re: PATCH: _bzr Message-ID: <20060328230759.GG8106@dot.blorf.net> References: <20050906160630.GA10503@scowler.net> <5740.1126261568@trentino.groupinfra.com> <20050909134846.GA22966@scowler.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="H8ygTp4AXg6deix2" Content-Disposition: inline In-Reply-To: <20050909134846.GA22966@scowler.net> User-Agent: Mutt/1.5.11+cvs20060126 --H8ygTp4AXg6deix2 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline There's another _bzr completion function available that was in the bzr repository (in the contrib/zsh subdir). This one is more complete than what we have, so I refined it quite a bit, and then checked it in. Since many of you folks are much better at completion functions than me, please feel free to give it a look and see if it can't be improved even more. I'll attach it to this message to make it easy to review... ..wayne.. --H8ygTp4AXg6deix2 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=_bzr #compdef bzr # bzr is the bazaar-ng revision-control system local curcontext="$curcontext" state line expl cmd args ret=1 typeset -A opt_args _arguments -C \ '1: :->cmd' \ '*:: :->args' && ret=0 if (( ! $+_bzr_cmds )); then typeset -gH _bzr_cmds _bzr_cmds=(${(f)"$(_call_program bzr bzr shell-complete)"}) fi if [[ $state != 'args' ]]; then _describe -t subcommand 'subcommand' _bzr_cmds return 0 fi cmd="$words[1]" curcontext="${curcontext%:*:*}:bzr-$cmd:" (( $+functions[_bzr_unknownFiles] )) || _bzr_unknownFiles() { local fileList fileList=(${(ps:\0:)"$(bzr ls --null --unknown)"}) compadd -af fileList return 0 } (( $+functions[_bzr_unknownRoot] )) || _bzr_unknownRoot() { local fileList fileList=(${(ps:\0:)"$(bzr ls --null --from-root --unknown)"}) compadd -af fileList return 0 } (( $+functions[_bzr_versionedFiles] )) || _bzr_versionedFiles() { local fileList fileList=(${(ps:\0:)"$(bzr ls --null --versioned)"}) compadd -af fileList return 0 } (( $+functions[_bzr_completeParents] )) || _bzr_completeParents() { local parentFile=$(bzr root 2>/dev/null)/.bzr/parent [[ -r $parentFile ]] && compadd -X "Completing parents" $(cat $parentFile) } args=( '(-)'{--help,-h}'[show help message]' ) case $cmd in (add) args+=( '--no-recurse[do not recurse into subdirectories]' '(-q --quiet)'{--quiet,-q}'[be quiet]' '*:unknown files:_bzr_unknownFiles' ) ;; (annotate|praise|blame) args+=( '*:files:_bzr_versionedFiles' ) ;; (clone|branch|get) args+=( '(-r --revision)'{--revision,-r}'[revision]:rev:' '--basis[specify basis branch]:basis:' ) if (( CURRENT == 2 )); then args+=( '*:FROM_LOCATION:_files -/' ) elif (( CURRENT == 3 )); then args+=( '*:TO_LOCATION:_files -/' ) fi ;; (rename|mv) if (( CURRENT == 2 )); then args+=( '*:old name:_bzr_versionedFiles' ) else args+=( '*:new name:' ) fi ;; (cat) args+=( '(-r --revision)'{--revision,-r}'[revision]:rev:' '*:file:_bzr_versionedFiles' ) ;; (root) args+=( '*:file:_files' ) ;; (log) args+=( '(-r --revision)'{--revision,-r}'[revision or range]:rev or rev range:' '(-v --verbose)'{--verbose,-v}'[show revision manifest]' '(-l --short --long)'{--long,-l}'[use long format (default)]' '(-l --long)--short[use short format]' '(-m --message)'{--message,-m}'[specify regexp]:regexp:' '--show-ids[show file IDs]' '--forward[reverse direction of revisions]' '--timezone[specify timezone for dates]:timezone:' '*:file:_bzr_versionedFiles' ) ;; (resolve) args+=( '--all[resolve all conflicts in this tree]' '*:file:_bzr_versionedFiles' ) ;; (status|st|stat) args+=( '--all[include unchanged versioned files]' '--show-ids[show file IDs]' '*:file:_bzr_versionedFiles' ) ;; (check) args+=( '(-v --verbose)'{--verbose,-v}'[display more information]' '*:DIR:_files -/' ) ;; (mkdir|upgrade|renames) args+=( '*:DIR:_files -/' ) ;; (remove|rm) args+=( '(-v --verbose)'{--verbose,-v}'[display more information]' '*:file:_bzr_versionedFiles' ) ;; (pull) args+=( '--remember[Remember the specified location as a default]' '--overwrite[Ignore differences, overwrite unconditionally]' '*:local repository:_files -/' ) _bzr_completeParents ;; (missing) args+=( '(-v --verbose -q --quiet)'{--verbose,-v}'[display more information]' '(-q --quiet -v --verbose)'{--quiet,-q}'[be quiet]' '(-l --long --short --log_format)--line[Use log format with one line per revision. Same as "--log-format line"]' '(-l --long --short --line)--log-format[Use the specified log format]:log format' '(-l --long --short --line --log-format)'{--long,-l}'[Use detailed log format. Same as "--log-format long"]' '--mine-only[Display changes in the local branch only]' '--reverse[Reverse the order of revisions]' '(-l --long --log_format)--short[Use moderately short log format. Same as "--log-format short"]' '--show-ids[show internal object ids]' '--theirs-only[Display changes in the remote branch only]' '*:local repository:_files -/' ) _bzr_completeParents ;; (commit|checkin|ci) args+=( '(-m --message)'{--message,-m}'[commit message]:message text:' '(-F --file)'{--file,-F}'[commit message from file]:message file:' '--unchanged[include unchanged files]' '(-v --verbose)'{--verbose,-v}'[display more information]' '*:modified files:_bzr_versionedFiles' ) ;; (conflicts|added|deleted|modified|unknowns|directories|ignored) ;; (revno|init|version) ;; (whoami) args+=( '--email[only show e-mail address]' ) ;; (inventory) args+=( '(-r --revision)'{--revision,-r}'[show inventory of a revision]:revision:' '--show-ids[show file IDs]' ) ;; (diff|dif|di) args+=( '(-r --revision)'{--revision,-r}'[revision]:revision:' '--diff-options[options to pass to gdiff]:diff options:' '*:files:_files' ) ;; (export) args+=( '(-r --revision)'{--revision,-r}'[revision]:revision:' '--format=[format of exported file]:format:(dir tar tgz tbz2)' '--root[root directory of patch]:_files -/' '*:destination:_files' ) ;; (ignore) args+=( '*:NAME_PATTERN:_bzr_unknownRoot' ) ;; (info) args+=( '*:branch:_files -/' ) ;; (testament) args+=( '(-r --revision)'{--revision,-r}'[revision]:revision:' '(-l --long)'{--long,-l}'[use long format]' '*:branch:_files -/' ) ;; (revert|merge-revert) args+=( '(-r --revision)'{--revision,-r}'[revision]:revision:' '--no-backup[skip generation of backup~ files]' '*:file:_bzr_versionedFiles' ) ;; (merge) args+=( '(-r --revision)'{--revision,-r}'[revision]:revision:' '--reprocess[Reprocess to reduce spurious conflicts]' '--show-base[Show base revision text in conflicts]' '--force[ignore uncommitted changes]' '--merge-type:merge type:(diff3 merge3 weave)' '*:local repository:_files -/' ) _bzr_completeParents ;; (ls) args+=( '(-v --verbose)'{--verbose,-v}'[display more information]' '(-r --revision)'{--revision,-r}'[revision]:revision:' '--from-root[Print all paths from the root of the branch]' '--non-recursive[Do not recurse into subdirectories]' '--null[Null separate the files]' '--ignored[Print ignored files]' '--unknown[Print unknown files]' '--versioned[Print versioned files]' ) ;; (move) if (( CURRENT == 2 )); then args+=( '*:files:_bzr_versionedFiles' ) else args=( '*:destination dir:_files -/' ) fi ;; (help) args=( '(-l --long)'{--long,-l}'[use long format]' '*:subcmds:->cmds' ) _arguments -s "$args[@]" && ret=0 _describe -t subcommand 'subcommand' _bzr_cmds return 0 ;; # Plugins (visualize|visualise|viz|vis) args+=( '(-r --revision)'{--revision,-r}'[starting revision]:rev:' ) ;; (gannotate|gblame|gpraise) args+=( '--all[show annotations on all lines]' '--plain[do not hightlight annotation lines]' '*:files:_bzr_versionedFiles' ) ;; (push) args+=( '--overwrite[Ignore differences, overwrite unconditionally]' '*:local repository:_files -/' ) _bzr_completeParents ;; (clean-tree) args+=( '--dry-run[show files to delete instead of deleting them]' '--ignored[delete all ignored files]' '--detritus[delete conflict files, merge backups, failed self-tests, *~, *.tmp, etc]' ) ;; (*) _message "unknown bzr command completion: $cmd" return 1 ;; esac _arguments -s "$args[@]" && ret=0 return ret --H8ygTp4AXg6deix2--