On Fri, Jan 11, 2013 at 12:48 PM, Manlio Perillo <manlio.perillo@xxxxxxxxx> wrote: > The git-completion.bash script did not implemented full, git aware, > support to complete paths, for git commands that operate on files within > the current working directory or the index. > +__git_index_file_list_filter_compat () > +{ > + local path > + > + while read -r path; do > + case "$path" in > + ?*/*) echo "${path%%/*}/" ;; > + *) echo "$path" ;; > + esac > + done > +} > + > +__git_index_file_list_filter_bash () > +{ > + local path > + > + while read -r path; do > + case "$path" in > + ?*/*) > + # XXX if we append a slash to directory names when using > + # `compopt -o filenames`, Bash will append another slash. > + # This is pretty stupid, and this the reason why we have to > + # define a compatible version for this function. > + echo "${path%%/*}" ;; Which version of bash is that? It works perfectly fine here with or without the /. > +# __git_index_files accepts 1 or 2 arguments: > +# 1: Options to pass to ls-files (required). > +# Supported options are --cached, --modified, --deleted, --others, > +# and --directory. > +# 2: A directory path (optional). > +# If provided, only files within the specified directory are listed. > +# Sub directories are never recursed. Path must have a trailing > +# slash. > +__git_index_files () > +{ > + local dir="$(__gitdir)" root="${2-.}" > + > + if [ -d "$dir" ]; then > + __git_ls_files_helper "$root" "$1" | __git_index_file_list_filter | > + sort | uniq > + fi > +} > + > +# __git_diff_index_files accepts 1 or 2 arguments: > +# 1) The id of a tree object. > +# 2) A directory path (optional). > +# If provided, only files within the specified directory are listed. > +# Sub directories are never recursed. Path must have a trailing > +# slash. > +__git_diff_index_files () > +{ > + local dir="$(__gitdir)" root="${2-.}" > + > + if [ -d "$dir" ]; then > + __git_diff_index_helper "$root" "$1" | __git_index_file_list_filter | > + sort | uniq > + fi > +} These two are exactly the same, except one calls __git_ls_files_helper, and the other one __git_diff_index_helper, can't we make another argument that is and select one or the other based on that? > __git_heads () > { > local dir="$(__gitdir)" > @@ -430,6 +543,46 @@ __git_complete_revlist_file () > } > > > +# __git_complete_index_file requires 1 argument: the options to pass to > +# ls-file > +__git_complete_index_file () > +{ > + local pfx cur_="$cur" > + > + case "$cur_" in > + ?*/*) > + pfx="${cur_%/*}" > + cur_="${cur_##*/}" > + pfx="${pfx}/" > + > + __gitcomp_file "$(__git_index_files "$1" "$pfx")" "$pfx" "$cur_" > + ;; > + *) > + __gitcomp_file "$(__git_index_files "$1")" "" "$cur_" > + ;; > + esac > +} > + > +# __git_complete_diff_index_file requires 1 argument: the id of a tree > +# object > +__git_complete_diff_index_file () > +{ > + local pfx cur_="$cur" > + > + case "$cur_" in > + ?*/*) > + pfx="${cur_%/*}" > + cur_="${cur_##*/}" > + pfx="${pfx}/" > + > + __gitcomp_file "$(__git_diff_index_files "$1" "$pfx")" "$pfx" "$cur_" > + ;; > + *) > + __gitcomp_file "$(__git_diff_index_files "$1")" "" "$cur_" > + ;; > + esac > +} These are also exactly the same, we could pass the argument to the function above. -- Felipe Contreras -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html