zsh-workers
 help / color / mirror / code / Atom feed
From: Wayne Davison <wayned@users.sourceforge.net>
To: zsh-workers@sunsite.dk
Subject: Re: PATCH: _bzr
Date: Tue, 28 Mar 2006 15:07:59 -0800	[thread overview]
Message-ID: <20060328230759.GG8106@dot.blorf.net> (raw)
In-Reply-To: <20050909134846.GA22966@scowler.net>

[-- Attachment #1: Type: text/plain, Size: 434 bytes --]

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..

[-- Attachment #2: _bzr --]
[-- Type: text/plain, Size: 7524 bytes --]

#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

  reply	other threads:[~2006-03-28 23:08 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-06 16:06 Clint Adams
2005-09-09 10:26 ` Oliver Kiddle
2005-09-09 13:48   ` Clint Adams
2006-03-28 23:07     ` Wayne Davison [this message]
2006-03-29  0:04       ` Clint Adams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060328230759.GG8106@dot.blorf.net \
    --to=wayned@users.sourceforge.net \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).