hi,

i've always been annoyed by having to type — or copy & paste — paths when i 
wanted to simply add some files to the index.  i know about the `add -i` 
interface, and that improves things a little, but having bash completion for so 
many other things it still seemed to much hassle.

so here's a patch adding bash completion on `git add` for modified, updated and 
untracked files.  i've also set up a pull request — before i found 
`Documentation/SubmittingPatches`.  fwiw, it's at 
https://github.com/git/git/pull/29

best regards,


andi


>From cbac6caee7e788569562cb7138eb698cc46a1b8f Mon Sep 17 00:00:00 2001
From: Andreas Zeidler <a...@zitc.de>
Date: Fri, 9 Nov 2012 13:05:43 +0100
Subject: [PATCH] add bash completion for "addable" files

this adds support for completing only modified, updated and untracked
files on `git add`, since almost always these are what you want to add
to the index.

the list of possible completions is determined using `git status` and
filtered using `egrep` and `sed`.

Signed-off-by: Andreas Zeidler <a...@zitc.de>
---
 contrib/completion/git-completion.bash | 15 +++++++++++++++
 t/t9902-completion.sh                  | 11 +++++++++++
 2 files changed, 26 insertions(+)

diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index be800e0..4aa0981 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -799,6 +799,16 @@ _git_apply ()
        COMPREPLY=()
 }
 
+__git_addable ()
+{
+       local dir="$(__gitdir)"
+       if [ -d "$dir" ]; then
+               git --git-dir="$dir" status --short --untracked=all |\
+                       egrep '^.[UM?] ' | sed 's/^.. //'
+               return
+       fi
+}
+
 _git_add ()
 {
        __git_has_doubledash && return
@@ -810,6 +820,11 @@ _git_add ()
                        --ignore-errors --intent-to-add
                        "
                return
+               ;;
+       *)
+               __gitcomp "$(__git_addable)"
+               return
+               ;;
        esac
        COMPREPLY=()
 }
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index cbd0fb6..a7c81d3 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -288,4 +288,15 @@ test_expect_failure 'complete tree filename with 
metacharacters' '
        EOF
 '
 
+test_expect_success 'add completes untracked and modified names' '
+       echo other content >file1 &&
+       echo content >file2 &&
+       echo more >file3 &&
+       git add file1 &&
+       test_completion_long "git add f" <<-\EOF
+       file2_
+       file3_
+       EOF
+'
+
 test_done
-- 
1.8.0.1.g43af610


-- 
pgp key at http://zitc.de/pgp - http://wwwkeys.de.pgp.net/
upgrade to plone 4! -- http://plone.org/4

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to