#compdef prcs # lookup project names in the repository # (this does not handle subprojects) (( $+functions[_prcs_projects] )) || _prcs_projects() { compadd $@ - ${~opt_args[-R]:-${opt_args[--repository]:-${PRCS_REPOSITORY:-$HOME/PRCS}}}/*(/:t) } # standard options for all subcommands (( $+functions[_prcs_arguments] )) || _prcs_arguments() { _arguments -s \ '(-f)--force[resolve interactive queries in some fixed way]' \ '(--force)-f[resolve interactive queries in some fixed way]' \ '(-h -H)--help[print out help]' \ '(--help -H)-h[print out help]' \ '(--help -h)-H[print out help]' \ '(-j)--jobs=[spawn many child processes at once]:number:' \ '(--jobs)-j[spawn many child processes at once]:number:' \ '(-l)--long-format[long format]' \ '(--long-format)-l[long format]' \ '(-L)--long-long-format[long format]' \ '(--long-long-format)-L[longer format]' \ '(-n)--no-action[no action]' \ '(--no-action)-n[no action]' \ '(-q)--quiet[suppress normal informational messages]' \ '(--quiet)-q[suppress normal informational messages]' \ "--plain-format[don't break lines at screen width]" \ '(-R)--repository=[set the repository directory]:directory:_files -/' \ '(--repository)-R[set the repository directory]:directory:_files -/' \ '(-v)--version[print PRCS version and exits]' \ '(--version)-v[print PRCS version and exits]' \ $@ } if (( CURRENT == 2 )); then _arguments \ ':prcs command:(( admin\:"admin subcommand" checkin\:"checkin project revision" checkout\:"checkout project revision" config\:"verify configuration" delete\:"delete named revision of project" depopulate\:"remove named files from project descriptor" diff\:"show differences between two revisions" execute\:"execute a command for each file in a project" info\:"print information about versions of project" merge\:"reconcile differences between working files and another revision" package\:"package the project and all its revisions into packagefile" populate\:"add named files to project descriptor" rekey\:"set keywords in selected files" unpackage\:"unpackage project in packagefile"))' else shift words (( --CURRENT )) case "$words[1]" in admin) if (( CURRENT == 2 )); then _arguments \ ':admin subcommand:(( access\:"set the access permissions on the repository" compress\:"instruct PRCS to save disk space for project" init\:"create a repository entry" pdelete\:"delete a repository entry" pinfo\:"list all projects in the repository" prename\:"rename a repository entry" rebuild\:"reconstruct PRCS data files in the repository" uncompress\:"instruct PRCS to save time in processing project"))' else shift words (( --CURRENT )) case "$words[1]" in access|compress|init|pdelete|prename|rebuild) _prcs_arguments ':project name:_prcs_projects' ;; pinfo) _prcs_arguments ;; uncompress) _prcs_arguments \ '-i[expand the entire project immediately]' \ ':project name:_prcs_projects' ;; *) _message "unknown prcs administrative subfunction: $words[1]" ;; esac fi ;; checkin) _prcs_arguments \ '(-r)--revision=[version of the project]:revision:' \ '(--revision)-r[version of the project]:revision:' \ '(-s)--skilled-merge[turn off most of the safety features of merge]' \ '(--skilled-merge)-s[turn off most of the safety features of merge]' \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; checkout) _prcs_arguments \ '(-r)--revision=[version of the project]:revision:' \ '(--revision)-r[version of the project]:revision:' \ '(-p)--preserve[preserve permissions on files that are checked out]' \ '(--preserve)-p[preserve permissions on files that are checked out]' \ "(-u)--unlink[don't overwrite symbolic link references]" \ "(--unlink)-u[don't overwrite symbolic link references]" \ "(-P)--exclude-project-file[don't checkout the project file]" \ "(--exclude-project-file)-P[don't checkout the project file]" \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; config) _prcs_arguments ;; delete) _prcs_arguments \ '(-r)--revision=[version of the project]:reversion:' \ '(--revision)-r[version of the project]:reversion:' \ ':project name:_prcs_projects' ;; depopulate) _prcs_arguments \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; diff) _prcs_arguments \ '*--revision=[version of the project]:revision:' \ '*-r[version of the project]:revision:' \ '(-k)--keywords[compare keywords too]' \ '(--keywords)-k[compare keywords too]' \ '(-N)--new[compare new files against empty files]' \ '(--new)-N[compare new files against empty files]' \ "(-P)--exclude-project-file[don't diff the project file]" \ "(--exclude-project-file)-P[don't diff the project file]" \ '--[introduce diff options]:*::diff options:= _diff_options ${PRCS_DIFF_COMMAND:-diff}' \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; execute) _prcs_arguments \ '(-r)--revision=[version of the project]:reversion:' \ '(--revision)-r[version of the project]:reversion:' \ '--pre[list directories first]' \ '(--pipe)--all[execute command once, with all files as arguments]' \ '(--all)--pipe[supply file contents as the standard input]' \ '--match[execute command on files matching a pattern]:pattern:' \ '--not[execute command on files not matching a pattern]:pattern:' \ '--:command: _command_names -e:*::arguments: _normal' \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; info) _prcs_arguments \ '(-r)--revision=[version of the project]:revision:' \ '(--revision)-r[version of the project]:revision:' \ '--sort=[set sorting type]:sorting type:(version date)' \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; merge) _prcs_arguments \ '(-r)--revision=[version of the project]:revision:' \ '(--revision)-r[version of the project]:revision:' \ '(-s)--skilled-merge[turn off most of the safety features of merge]' \ '(--skilled-merge)-s[turn off most of the safety features of merge]' \ "(-u)--unlink[don't overwrite symbolic link references]" \ "(--unlink)-u[don't overwrite symbolic link references]" \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; package) _prcs_arguments \ '(-r)--revision=[version of the project]:revision:' \ '(--revision)-r[version of the project]:revision:' \ '(-z)--compress=[compress the output]' \ '(--compress)-z[compress the output]' \ ':project name:_prcs_projects' \ ':file:_files' ;; populate) _prcs_arguments \ '(-d)--delete=[perform optional deletions]' \ '(--delete)-d[perform optional deletions]' \ ':project name:_prcs_projects' \ '*:file or directory:_files' ;; rekey) _prcs_arguments \ "(-u)--unlink[don't overwrite symbolic link references]" \ "(--unlink)-u[don't overwrite symbolic link references]" \ ':project name:_prcs_projects' ;; unpackage) _prcs_arguments \ ':file:_files' \ ':project name:_prcs_projects' ;; *) _message "unknown prcs command: $words[1]" ;; esac fi