bash completion: also complete on tags
authorGuido Günther <agx@sigxcpu.org>
Mon, 3 Jan 2011 21:47:30 +0000 (22:47 +0100)
committerGuido Günther <agx@sigxcpu.org>
Mon, 3 Jan 2011 21:48:20 +0000 (22:48 +0100)
debian/git-buildpackage.bash-completion

index ff71753..653c412 100644 (file)
@@ -14,6 +14,13 @@ _gbp_branches ()
 }
 
 
+_gbp_tags ()
+{
+     [ -d .git ] || return 0
+     git  for-each-ref --format="%(refname:short)" refs/tags
+}
+
+
 _gbp_options ()
 {
     $1 --help | sed -ne  's/^ \+\(\(\-[a-z]\), \)\?\(\-\-[a-z\-]\+\=\?\).*/\2 \3/p'
@@ -26,6 +33,7 @@ _gbp_comp ()
     local prev="${COMP_WORDS[COMP_CWORD - 1]}"
     local options=$1
     local branch_opts=$2
+    local tag_opts=$3
 
 # COMPREPLY considers '=' as a word. For $prev we prefer the word before the actual "="
     if [[ "$prev" == "=" ]]
@@ -42,6 +50,12 @@ _gbp_comp ()
         return 0
     fi
 
+    if [[ "${tag_opts}" == *$prev* ]]; then
+       local refs=$(_gbp_tags)
+        COMPREPLY=( $(compgen -W "$refs" -- $cur ) )
+        return 0
+    fi
+
     COMPREPLY=($(compgen -W "$options" -- $cur))
 }
 
@@ -51,8 +65,9 @@ _git_buildpackage()
 {
     local options=$(_gbp_options git-buildpackage)
     local branch_opts="--git-debian-branch\= --git-upstream-branch\="
+    local tag_opts="--git-debian-tag\= --git-upstream-tag\="
 
-    _gbp_comp "$options" "$branch_opts"
+    _gbp_comp "$options" "$branch_opts" "$tag_opts"
 }
 [ "${have:-}" ] && complete -F _git_buildpackage -o default git-buildpackage
 
@@ -62,8 +77,9 @@ _git_dch ()
 {
     local options=$(_gbp_options git-dch)
     local branch_opts="--debian-branch\="
+    local tag_opts="--debian-tag\= --upstream-tag\="
 
-    _gbp_comp "$options" "$branch_opts"
+    _gbp_comp "$options" "$branch_opts" "$tag_opts"
 }
 [ "${have:-}" ] && complete -F _git_dch -o default git-dch
 
@@ -73,8 +89,9 @@ _git_import_orig ()
 {
     local options=$(_gbp_options git-import-orig)
     local branch_opts="--debian-branch\= --upstream-branch\="
+    local tag_opts="--debian-tag\= --upstream-tag\="
 
-    _gbp_comp "$options" "$branch_opts"
+    _gbp_comp "$options" "$branch_opts" "$tag_opts"
 }
 [ "${have:-}" ] && complete -F _git_import_orig -o default git-import-orig
 
@@ -84,8 +101,9 @@ _git_import_dsc ()
 {
     local options=$(_gbp_options git-import-dsc)
     local branch_opts="--debian-branch\= --upstream-branch\="
+    local tag_opts="--debian-tag\= --upstream-tag\="
 
-    _gbp_comp "$options" "$branch_opts"
+    _gbp_comp "$options" "$branch_opts" "$tag_opts"
 }
 [ "${have:-}" ] && complete -F _git_import_dsc -o default git-import-dsc