summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_perforce
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_perforce')
-rw-r--r--Completion/Unix/Command/_perforce8
1 files changed, 7 insertions, 1 deletions
diff --git a/Completion/Unix/Command/_perforce b/Completion/Unix/Command/_perforce
index 13c247183..4fdd4bacf 100644
--- a/Completion/Unix/Command/_perforce
+++ b/Completion/Unix/Command/_perforce
@@ -378,7 +378,9 @@ _perforce() {
#
# Front end to _call_program to add in the global arguments
-# passed to p4.
+# passed to p4. The first argument is the tag, the remaining
+# arguments are passed to p4. Typically the tag is the same
+# as the first p4 argument.
(( $+functions[_perforce_call_p4] )) ||
_perforce_call_p4() {
local cp_tag=$1
@@ -987,8 +989,12 @@ _perforce_files() {
: ${PREFIX:#(#b)(*/)(*)}
pfx="$match[1]"
pfx=${(e)~pfx}
+ # Exclude both files already known to perforce, plus
+ # those opened. There will be some overlap but we need
+ # to exclude files that are already opened for add.
omitpats=(
${${${${(f)"$(_perforce_call_p4 files files \"\$pfx\*\$\{\(Q\)SUFFIX\}\" 2>/dev/null)"}%\#*}##*/}//(#m)[][*?()<|^~#\\]/\\$MATCH}
+ ${${${${(f)"$(_perforce_call_p4 opened opened \"\$pfx\*\$\{\(Q\)SUFFIX\}\" 2>/dev/null)"}%\#*}##*/}//(#m)[][*?()<|^~#\\]/\\$MATCH}
)
[[ $#omitpats -eq 1 && $omitpats[1] = '' ]] && omitpats=()