# Programmable completion for the Bazaar-NG bzr command under bash. Source # this file (or on some systems add it to ~/.bash_completion and start a new # shell) and bash's completion mechanism will know all about bzr's options! # Known to work with bash 2.05a with programmable completion and extended # pattern matching enabled (use 'shopt -s extglob progcomp' to enable # these if they are not already enabled). # Based originally on the svn bash completition script. # Customized by Sven Wilhelm/Icecrash.com _bzr () { local cur cmds cmdOpts opt helpCmds optBase i plugins plugin COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} # builtin cmds='alias annotate bind branch break-lock cat cbranch check checkout commit ci checkin conflicts \ deleted diff export ignore ignored info init init-repository log merge missing \ move nick pack pull push reconcile reconfigure remerge remove remove-tree \ renames resolve revert revno root send sign-my-commits split status switch tag \ tags testament unbind uncommit update upgrade version-info whoami' # plugins plugins=$( bzr plugins | grep '^[a-z]* ' | cut -f1 -d' ' ) for plugin in $plugins do case $plugin in bzrtools) addCmds="branch-history branches cdiff clean-tree fetch-ghosts \ graph-ancestry heads import link-tree multi-pull patch rspush shelf \ shell shelve trees unshelve" ;; launchpad) addCmds="launchpad-login register-branch" ;; gtk) addCmds="gannotate gbranch gcheckout gcommit gconflicts gdiff ginit gmerge \ gmissing gpreferences gpush gsend gstatus gtags visualize" ;; xmloutput) addCmds="xmlls" ;; *) ;; esac cmds="${cmds} ${addCmds}" done if [[ $COMP_CWORD -eq 1 ]] ; then COMPREPLY=( $( compgen -W "$cmds" -- $cur ) ) return 0 fi # if not typing an option, or if the previous option required a # parameter, then fallback on ordinary filename expansion helpCmds='help|--help|h|\?' if [[ ${COMP_WORDS[1]} != @($helpCmds) ]] && \ [[ "$cur" != -* ]] ; then return 0 fi cmdOpts= case ${COMP_WORDS[1]} in alias) cmdOpts="--remove" ;; annotate) cmdOpts="--long --show-ids -r --revision" ;; branch) cmdOpts="--standalone --hardlink --stacked --revision -r" ;; cat) cmdOpts="--name-from-revision -r --revision" ;; cbranch) cmdOpts="--files-from --heardlink --lightweight -r --revision" ;; cdiff|diff) cmdOpts="--check-style --old -p --prefix --using --new --revision --diff-options -c --change" ;; check) cmdOpts="--repo --branch --tree" ;; checkout) cmdOpts="--files-from --hardlink --lightweight" ;; clean-tree) cmdOpts="--ignored --dry-run --unknow --detritus" ;; commit|ci|checkin) cmdOpts="--author --unchanged --fixes --show-diff --strict -F --file --message -m --local" ;; conflicts) cmdOpts="--text" ;; deleted) cmdOpts="--show-ids" ;; export) cmdOpts="--format --root --revision -r" ;; fetch-ghosts) cmdOpts="--no-fix" ;; gannotate) cmdOpts="--all --plain --line --revision -r" ;; gdiff) cmdOpts="--revision -r" ;; graph-ancestry) cmdOpts="--no-collapse --cluster --merge-branch --no-antialias -d --directory --max-distance" ;; gstatus) cmdOpts="--revision -r" ;; head) cmdOpts="--all --debug-time --dead-only --by-date --tips" ;; ignore) cmdOpts="--old-default-rules" ;; init) cmdOpts="--create-prefix --append-revision-only --format --1.6 --1.6.1-rich-root --default \ --dirstate --dirstate-tags --knit --metawave --pack-0.92 --rich-root \ --rich-root-pack --weave" ;; init-repository) cmdOpts="--create-prefix --append-revision-only --format --1.6 --1.6.1-rich-root --default \ --dirstate --dirstate --dirstate-tags --knit --metawave --pack-0.92 --rich-root \ --rich-root-pack --weave --no-trees" ;; launchpad-login) cmdOpts="--no-check" ;; log) cmdOpts="--forward -l --limit -m --message -c --change --log-format --line --long --short --xml \ --timezone -v --verbose --show-ids -r --revision" ;; merge) cmdOpts="--pull --remember --force --reprocess --uncommitted -d --directory --show-base --preview\ -c -r --revision --change --diff3 --lca --merge3 --weave" ;; missing) cmdOpts="--reverse --this --other --include-merges --mine-only --show-ids --theirs-only \ --log-format --line --long --short --xml" ;; move) cmdOpts="--after" ;; patch) cmdOpts="--strip --silent" ;; pull) cmdOpts="--remember -d --directory --overwrite --revision -r" ;; push) cmdOpts="--remember --create-prefix --stacked-on --use-existing-dir -d --directory --stacked \ --overwrite --revision -r" ;; reconfigure) cmdOpts="--bind-to --force --branch --checkout --lightweight-checkout --standalone --tree \ --use-shared" ;; register-branch) cmdOpts="--product --dry-run --author --branch-description --link-bug --branch-name \ --branch-title" ;; remerge) cmdOpts="--reprocess --show-base --merge-type --diff3 --lca --merge3 --weave" ;; remove) cmdOpts="--new --force --keep --safe" ;; remove-tree) cmdOpts="--force" ;; resolve) cmdOpts="--all" ;; revert) cmdOpts="--forget-merges --no-backup --revision -r" ;; rspush) cmdOpts="--no-tree --overwrite" ;; send) cmdOpts="-f --from --remember --mail-to --format --no-bundle -o --output -m --message --revision \ -r --no-patch" ;; shelf) cmdOpts="list delete switch show upgrade" ;; shelve) cmdOpts="--all -m --message --no-color --revision -r" ;; sign-my-commits) cmdOpts="--dry-run" ;; status) cmdOpts="--all -S --short -V --versioned --no-pending -c --change --revision -r --show-ids" ;; switch) cmdOpts="--force" ;; tag) cmdOpts="--force -d --directory --revision -r --delete" ;; tags) cmdOpts="--sort -d --directory --show-ids" ;; testament) cmdOpts="--long --strict --revision -r" ;; unshelve) cmdOpts="--all --force --no-color" ;; upgrade) cmdOpts="--format --1.6 --1.6.1-rich-root --default --developmet --development-subtree \ --dirstate --dirstate-tags --knit --metaweave --pack-0.92 --rich-root --rich-root-pack --weave" ;; version-info) cmdOpts="--all --check-clean --include-history --template --include-file-revision --format\ --custom --python --rio" ;; visualise) cmdOpts="--limit --revision -r" ;; whoami) cmdOpts="--email --branch" ;; xmlls) cmdOpts="--from-root --ignored --kind --versioned --unknown --no-recursive --null --revision -r" ;; help|h|\?) cmdOpts="$cmds $qOpts" ;; *) ;; esac cmdOpts="$cmdOpts --help -h -v --verbose -q --quiet" # take out options already given for (( i=2; i<=$COMP_CWORD-1; ++i )) ; do opt=${COMP_WORDS[$i]} case $opt in --*) optBase=${opt/=*/} ;; -*) optBase=${opt:0:2} ;; esac cmdOpts=" $cmdOpts " cmdOpts=${cmdOpts/ ${optBase} / } # take out alternatives case $optBase in -v) cmdOpts=${cmdOpts/ --verbose / } ;; --verbose) cmdOpts=${cmdOpts/ -v / } ;; -h) cmdOpts=${cmdOpts/ --help / } ;; --help) cmdOpts=${cmdOpts/ -h / } ;; -r) cmdOpts=${cmdOpts/ --revision / } ;; --revision) cmdOpts=${cmdOpts/ -r / } ;; -p) cmdOpts=${cmdOpts/ --prefix / } ;; --prefix) cmdOpts=${cmdOpts/ -p / } ;; -c) cmdOpts=${cmdOpts/ --change / } ;; --change) cmdOpts=${cmdOpts/ -c / } ;; -m) cmdOpts=${cmdOpts/ --message / } ;; --message) cmdOpts=${cmdOpts/ -m / } ;; -F) cmdOpts=${cmdOpts/ --file / } ;; --file) cmdOpts=${cmdOpts/ -F / } ;; -d) cmdOpts=${cmdOpts/ --directory / } ;; --directory) cmdOpts=${cmdOpts/ -d / } ;; -l) cmdOpts=${cmdOpts/ --limit / } ;; --limit) cmdOpts=${cmdOpts/ -l / } ;; -V) cmdOpts=${cmdOpts/ --versioned / } ;; --versioned) cmdOpts=${cmdOpts/ -V / } ;; -f) cmdOpts=${cmdOpts/ --from / } ;; --from) cmdOpts=${cmdOpts/ -f / } ;; -o) cmdOpts=${cmdOpts/ --output / } ;; --output) cmdOpts=${cmdOpts/ -o / } ;; -S) cmdOpts=${cmdOpts/ --short / } ;; --short) cmdOpts=${cmdOpts/ -S / } ;; esac # skip next option if this one requires a parameter if [[ $opt == @($optsParam) ]] ; then ((++i)) fi done COMPREPLY=( $( compgen -W "$cmdOpts" -- $cur ) ) return 0 } complete -F _bzr -o default bzr