diff options
Diffstat (limited to 'Completion')
-rw-r--r-- | Completion/Unix/Command/_perforce | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/Completion/Unix/Command/_perforce b/Completion/Unix/Command/_perforce index aab8d99ed..3d7de0cb1 100644 --- a/Completion/Unix/Command/_perforce +++ b/Completion/Unix/Command/_perforce @@ -397,7 +397,7 @@ _perforce_call_p4() { (( $+functions[_perforce_gen_cmd_list] )) || _perforce_gen_cmd_list() { (( ${+_perforce_cmd_list} )) || typeset -ga _perforce_cmd_list - local hline + local hline line match mbegin mend # Output looks like <tab>command-name<space>description in words... # Ignore blank lines and the heading line beginning `Perforce...' # Just gets run once, then cached, so don't bother optimising @@ -407,6 +407,18 @@ _perforce_gen_cmd_list() { [[ $hline[1] = (#i)perforce ]] && continue _perforce_cmd_list+=("${hline[1]}:${hline[2,-1]}") done + # Also cache the server version for nefarious purposes. + _perforce_call_p4 info info | while read line; do + if [[ $line = (#b)"Server version: "*/*/(<->.<->)/*" "(*) ]]; then + _perforce_server_version=$match[1] + fi + done + if [[ -n ${_perforce_server_version} && \ + ${_perforce_server_version%%.*} -ge 2004 && \ + ${_perforce_cmd_list[(r)attribute:*]} = '' ]]; then + # As yet unsupported attribute command + _perforce_cmd_list+=("attribute:Set attributes for open file (EXPERIMENTAL)") + fi } @@ -1389,6 +1401,23 @@ _perforce_cmd_annotate() { '*::file:_perforce_files -tR' } + +(( $+functions[_perforce_cmd_attribute] )) || +_perforce_cmd_attribute() { + # This is currently (2005.1) an unsupported command. + # See "p4 help undoc". + local limit + # If -f is present, search unopened files, else don't + [[ ${words[(I)-f]} -eq 0 ]] && limit=" -to" + _arguments -s : \ + '-e[Value is in hex]' \ + '-f[Set the attribute on a submitted file]' \ + '-n[Set name of attribute]:attribute: ' \ + '-v[Set value of attribute]:value: ' \ + "*::file:_perforce_files$limit" +} + + (( $+functions[_perforce_cmd_branch] )) || _perforce_cmd_branch() { _arguments -s : \ @@ -1620,6 +1649,12 @@ _perforce_cmd_flush() { (( $+functions[_perforce_cmd_fstat] )) || _perforce_cmd_fstat() { + local Oattr Aattr + if [[ ${_perforce_cmd_list[(r)attribute:*]} != '' ]]; then + # Unsupported feature, try not to show if not present + Oattr=' a\:show\ attributes d\:attributes\ digest e\:attributes\ in\ hex' + Aattr='-A[Restrict attributes by pattern]:attribute pattern: ' + fi _arguments -s : \ '-c+[affected since change]:change:_perforce_changes -ts' \ '-e+[affected by change]:change:_perforce_changes -ts' \ @@ -1627,10 +1662,11 @@ _perforce_cmd_fstat() { '-H[select synced files (-Rh)]' \ '-W[select opened files (-Ro)]' \ '-l[include fileSize, possibly slow (-Ol)]' \ - '-O-[select output type]:output type:((f\:all\ revisions l\:fileSize p\:client\ path\ format r\:pending\ integrations s\:exclude\ local\ path))' \ + "-O-[select output type]:output type:((f\:all\ revisions l\:fileSize p\:client\ path\ format r\:pending\ integrations s\:exclude\ local\ path$Oattr))" \ '-P[output clientFile in full Perforce syntax (-Op)]' \ '-R-[restrict selected files]:restriction:((c\:mapped\ in\ client h\:synced\ to\ client n\:not\ synced\ to\ head o\:opened r\:resolved u\:unresolved))' \ '-s[shorten, no client-related data (-Os)]' \ + $Aattr \ '*::file:_perforce_files' } |