about summary refs log tree commit diff
path: root/Completion/Unix/Command/_sccs
blob: 4083fe54e1185e35d2d18116bd387023b0e4c34f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#compdef sccs admin cdc comb delta get help prs prt rmdel sact sccsdiff unget val what

(( $+functions[_sccs_files] )) ||
_sccs_files() {
  local dir expl ret=1 pref=$PREFIX ipref=$IPREFIX
  dir="${(M)PREFIX##*/}$finalpath"
  [[ $~dir = (.|..|)/* ]] || dir="${PROJECTDIR:-~+}/$dir"
  compset -P "*/"
  _wanted file expl file compadd "$@" - $~dir/s.*(N.:t:s/s.//) && ret=0
  PREFIX="$pref"
  IPREFIX="$ipref"
  _wanted sccs-files expl 'sccs file' _files -W ${PROJECTDIR:-~+} \
      -g 's.*(-.)' && ret=0
  
  return ret
}

local curcontext="$curcontext" state line ret=1
typeset -A opt_args
local subcmds ropt copt sfiles finalpath

subcmds=(
  'admin:modify the flags or checksum of an sccs history file'
  'cdc:annotate the commentary of an sccs delta'
  'check:check for files currently being edited'
  'clean:remove files that can be retrieved from sccs history'
  'comb:generate scripts to combine deltas'
  'create:create (initialize) history files'
  'deledit:check file in and straight out again'
  'delget:check file in and maintain read-only copy'
  'delta:check in changes'
  'diffs:compare working copy with version in sccs history'
  'edit:retrieve file for editing (check out)'
  "enter:like create, but omits the final 'sccs get'"
  'fix:revise a (leaf) delta'
  'get:retrieve a version from the sccs history'
  'help:get information on sccs commands and error messages'
  {info,tell}':list files being edited'
  'print:print history of specified files'
  'prs:display delta table for an sccs file'
  'prt:display the delta table, but omit the MR field'
  'rmdel:remove specified delta from history file'
  'sact:show editing activity status of an sccs file'
  'sccsdiff:compare two versions from sccs history'
  {unedit,unget}':undo check out'
  'val:validate history file'
  'what:display any ID keyword strings in a file'
)

ropt='-r+[specify sccs delta id]:sccs delta id'
copt='-c+[specify date]:date-stamp'
sfiles=':file:_files -g "s.*(-.)"'

if [[ $service = sccs ]]; then
  _arguments -C -A "-*" \
    '-r[run with real and not effective user ID]' \
    '-d+[specify root prefix]:root prefix:_directories' \
    '-p+[specify subdirectory of history file]:path to history file:_directories' \
    '*::command:->subcmd' && ret=0

  if (( CURRENT == 1 )); then
    _describe -t commands 'sccs command' subcmds && ret=0
  fi
  (( ret )) || return 0

  service="$words[1]"
  sfiles=':file:_sccs_files'
  curcontext="${curcontext%:*}-$service:"
fi
finalpath="${opt_args[-p]:-SCCS}"

case $service in
  admin)
    _arguments "$ropt" "$sfiles" \
      '-b[force encoding of binary data]' \
      '-h[check structure of s.file]' \
      '-n[create a new history file]' \
      '-z[recompute file checksum]' \
      '-a+[add access for a user or group]:user or group:_users' \
      '-e+[erase access for a user or group]:user or group:_users' \
      '-d+[delete flag from file]:flag' \
      '-f+[set specified flag]:flag' \
      '-i+[initialise history from specified file]:file:_files' \
      '-m+[insert specified MR numbers into commentary]' \
      '-t+[insert descriptive text from specified file]:file:_files' \
      '-y+[specify comment for initial delta]'
  ;;
  cdc)
    _arguments "$ropt" "$sfiles" \
      '-m+[specify MR numbers to add/delete in delta comment]' \
      '-y+[specify the comment]:comment' \
  ;;
  check|info|tell)
    _arguments "$sfiles" \
      '-b[ignore branches]' \
      '(-U)-u+[restrict to files being modified by specified user]::user:_users' \
      '(-u)-U[restrict to files being modified by current user]'
  ;;
  clean)
    _arguments '-b[ignore branches]'
  ;;
  comb)
    _arguments "$sfiles" \
      '-o[access reconstructed file at delta to be created]' \
      '-s[generate script that will produce a report]' \
      '-p+[specify SID of oldest delta to preserve]:sccs delta id'
      '-c+[specify list of deltas to preserve]:sccs delta list'
  ;;
  sact|print) _sccs_files;;
  create|enter) _files;;
  deledit|delget|delta)
    _arguments "$sfiles" \
	'-s[silent]' \
	'-y+[specify delta commentary]:comment' \
  ;;
  diffs)
    _diff_options diff "$sfiles" "$ropt" "$copt" \
      '-C[output a context diff]'
  ;;
  edit|get)
    _arguments "$sfiles" "$ropt" "$copt" \
      '-e[retrieve for editing]' \
      '-k[retrieve writable copy without checking out]' \
      '-m[precede each line with the delta in which it was added]' \
      '-p[produce retrieved version on standard output]' \
      '-s[silent]'
  ;;
  fix) _arguments "$ropt" "$sfiles";;
  help)
    [[ $PREFIX$SUFFIX = [0-9]# ]] &&
        _message -e message-codes "sccs message code"
    subcmds+=( "stuck:help on help" )
    _describe -t commands 'sccs command' subcmds
  ;;
  prs)
    _arguments "$sfiles" "$ropt" "$copt" \
      '-a[include all deltas including those marked removed]' \
      '-e[display delta info for all deltas earlier than that specified]' \
      '-l[display delta info for all deltas later than that specified]' \
      '-d+[specify format of report]:data spec'
  ;;
  prt)
    _arguments "$sfiles" "$copt" \
      '-a[include all deltas including those marked removed]' \
      '-b[print the body of the s.file]' \
      '-d[print delta table entries]' \
      '(-d -i -u -f -t)-e[everything - imply other options]' \
      '-i[print serial numbers of included, excluded and ignored deltas]' \
      '-s[print first line only of delta table entries]' \
      '-t[print descriptive text held in s.file]' \
      '-u[print usernames of users allowed to make deltas]' \
      '-r+[exclude delta entries newer than date]:date-time' \
      '-y+[exclude delta entries prior to sid]'
    ;;
  rmdel) _arguments "$ropt" "$sfiles";;
  sccsdiff) _diff_options diff "$ropt" "$sfiles";;
  unedit|unget)
    _arguments "$sfiles" "$ropt" \
      '-s[silent]' \
      '-n[retain the retrieved version]'
    ;;
  val)
    _arguments "$sfiles" "$ropt" \
      '-s[silent]' \
      '-m+[compare specified name with the ID keyword in the s.file]:name' \
      '-y+[compare specified type with the ID keyword]:type'
    ;;
  what) _arguments '-s[stop after first occurrence]' '*:file:_files';;

  *) _message "unknown sccs command: $service";;
esac