Merge branch 'maint'

* maint:
  fix memory leak in parse_object when check_sha1_signature fails
  name-rev: tolerate clock skew in committer dates
  Update bash completion for git-config options
  Teach bash completion about recent log long options
  Teach bash completion about 'git remote update'
  Update bash completion header documentation
  Remove a duplicate --not option in bash completion
  Teach bash completion about git-shortlog
  Hide the plumbing diff-{files,index,tree} from bash completion
  Update bash completion to ignore some more plumbing commands
This commit is contained in:
Junio C Hamano 2007-05-24 21:35:29 -07:00
commit 18bece4367
3 changed files with 76 additions and 10 deletions

View File

@ -4,6 +4,8 @@
#include "tag.h" #include "tag.h"
#include "refs.h" #include "refs.h"
#define CUTOFF_DATE_SLOP 86400 /* one day */
static const char name_rev_usage[] = static const char name_rev_usage[] =
"git-name-rev [--tags | --refs=<pattern>] ( --all | --stdin | committish [committish...] )\n"; "git-name-rev [--tags | --refs=<pattern>] ( --all | --stdin | committish [committish...] )\n";
@ -216,6 +218,8 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix)
add_object_array((struct object *)commit, *argv, &revs); add_object_array((struct object *)commit, *argv, &revs);
} }
if (cutoff)
cutoff = cutoff - CUTOFF_DATE_SLOP;
for_each_ref(name_ref, &data); for_each_ref(name_ref, &data);
if (transform_stdin) { if (transform_stdin) {

View File

@ -1,8 +1,9 @@
# #
# bash completion support for core Git. # bash completion support for core Git.
# #
# Copyright (C) 2006,2007 Shawn Pearce # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/). # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.
# #
# The contained completion routines provide support for completing: # The contained completion routines provide support for completing:
# #
@ -11,6 +12,7 @@
# *) .git/remotes file names # *) .git/remotes file names
# *) git 'subcommands' # *) git 'subcommands'
# *) tree paths within 'ref:path/to/file' expressions # *) tree paths within 'ref:path/to/file' expressions
# *) common --long-options
# #
# To use these routines: # To use these routines:
# #
@ -31,6 +33,17 @@
# are currently in a git repository. The %s token will be # are currently in a git repository. The %s token will be
# the name of the current branch. # the name of the current branch.
# #
# To submit patches:
#
# *) Read Documentation/SubmittingPatches
# *) Send all patches to the current maintainer:
#
# "Shawn O. Pearce" <spearce@spearce.org>
#
# *) Always CC the Git mailing list:
#
# git@vger.kernel.org
#
__gitdir () __gitdir ()
{ {
@ -262,6 +275,7 @@ __git_commands ()
applypatch) : ask gittus;; applypatch) : ask gittus;;
archimport) : import;; archimport) : import;;
cat-file) : plumbing;; cat-file) : plumbing;;
check-attr) : plumbing;;
check-ref-format) : plumbing;; check-ref-format) : plumbing;;
commit-tree) : plumbing;; commit-tree) : plumbing;;
convert-objects) : plumbing;; convert-objects) : plumbing;;
@ -269,10 +283,15 @@ __git_commands ()
cvsimport) : import;; cvsimport) : import;;
cvsserver) : daemon;; cvsserver) : daemon;;
daemon) : daemon;; daemon) : daemon;;
diff-files) : plumbing;;
diff-index) : plumbing;;
diff-tree) : plumbing;;
fast-import) : import;; fast-import) : import;;
fsck-objects) : plumbing;; fsck-objects) : plumbing;;
fetch--tool) : plumbing;;
fetch-pack) : plumbing;; fetch-pack) : plumbing;;
fmt-merge-msg) : plumbing;; fmt-merge-msg) : plumbing;;
for-each-ref) : plumbing;;
hash-object) : plumbing;; hash-object) : plumbing;;
http-*) : transport;; http-*) : transport;;
index-pack) : plumbing;; index-pack) : plumbing;;
@ -573,13 +592,13 @@ _git_log ()
__gitcomp " __gitcomp "
--max-count= --max-age= --since= --after= --max-count= --max-age= --since= --after=
--min-age= --before= --until= --min-age= --before= --until=
--root --not --topo-order --date-order --root --topo-order --date-order --reverse
--no-merges --no-merges
--abbrev-commit --abbrev= --abbrev-commit --abbrev=
--relative-date --relative-date
--author= --committer= --grep= --author= --committer= --grep=
--all-match --all-match
--pretty= --name-status --name-only --pretty= --name-status --name-only --raw
--not --all --not --all
" "
return return
@ -745,9 +764,11 @@ _git_config ()
case "$cur" in case "$cur" in
--*) --*)
__gitcomp " __gitcomp "
--global --list --replace-all --global --system
--list --replace-all
--get --get-all --get-regexp --get --get-all --get-regexp
--add --unset --unset-all --add --unset --unset-all
--remove-section --rename-section
" "
return return
;; ;;
@ -766,7 +787,10 @@ _git_config ()
remote.*.*) remote.*.*)
local pfx="${cur%.*}." local pfx="${cur%.*}."
cur="${cur##*.}" cur="${cur##*.}"
__gitcomp "url fetch push" "$pfx" "$cur" __gitcomp "
url fetch push skipDefaultUpdate
receivepack uploadpack tagopt
" "$pfx" "$cur"
return return
;; ;;
remote.*) remote.*)
@ -816,6 +840,9 @@ _git_config ()
format.headers format.headers
gitcvs.enabled gitcvs.enabled
gitcvs.logfile gitcvs.logfile
gitcvs.allbinary
gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
gc.packrefs
gc.reflogexpire gc.reflogexpire
gc.reflogexpireunreachable gc.reflogexpireunreachable
gc.rerereresolved gc.rerereresolved
@ -832,9 +859,11 @@ _git_config ()
i18n.commitEncoding i18n.commitEncoding
i18n.logOutputEncoding i18n.logOutputEncoding
log.showroot log.showroot
merge.tool
merge.summary merge.summary
merge.verbosity merge.verbosity
pack.window pack.window
pack.depth
pull.octopus pull.octopus
pull.twohead pull.twohead
repack.useDeltaBaseOffset repack.useDeltaBaseOffset
@ -858,13 +887,13 @@ _git_remote ()
while [ $c -lt $COMP_CWORD ]; do while [ $c -lt $COMP_CWORD ]; do
i="${COMP_WORDS[c]}" i="${COMP_WORDS[c]}"
case "$i" in case "$i" in
add|show|prune) command="$i"; break ;; add|show|prune|update) command="$i"; break ;;
esac esac
c=$((++c)) c=$((++c))
done done
if [ $c -eq $COMP_CWORD -a -z "$command" ]; then if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
__gitcomp "add show prune" __gitcomp "add show prune update"
return return
fi fi
@ -872,6 +901,18 @@ _git_remote ()
show|prune) show|prune)
__gitcomp "$(__git_remotes)" __gitcomp "$(__git_remotes)"
;; ;;
update)
local i c='' IFS=$'\n'
for i in $(git --git-dir="$(__gitdir)" config --list); do
case "$i" in
remotes.*)
i="${i#remotes.}"
c="$c ${i/=*/}"
;;
esac
done
__gitcomp "$c"
;;
*) *)
COMPREPLY=() COMPREPLY=()
;; ;;
@ -890,6 +931,26 @@ _git_reset ()
__gitcomp "$(__git_refs)" __gitcomp "$(__git_refs)"
} }
_git_shortlog ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
--*)
__gitcomp "
--max-count= --max-age= --since= --after=
--min-age= --before= --until=
--no-merges
--author= --committer= --grep=
--all-match
--not --all
--numbered --summary
"
return
;;
esac
__git_complete_revlist
}
_git_show () _git_show ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
@ -947,7 +1008,6 @@ _git ()
commit) _git_commit ;; commit) _git_commit ;;
config) _git_config ;; config) _git_config ;;
diff) _git_diff ;; diff) _git_diff ;;
diff-tree) _git_diff_tree ;;
fetch) _git_fetch ;; fetch) _git_fetch ;;
format-patch) _git_format_patch ;; format-patch) _git_format_patch ;;
gc) _git_gc ;; gc) _git_gc ;;
@ -962,6 +1022,7 @@ _git ()
rebase) _git_rebase ;; rebase) _git_rebase ;;
remote) _git_remote ;; remote) _git_remote ;;
reset) _git_reset ;; reset) _git_reset ;;
shortlog) _git_shortlog ;;
show) _git_show ;; show) _git_show ;;
show-branch) _git_log ;; show-branch) _git_log ;;
whatchanged) _git_log ;; whatchanged) _git_log ;;
@ -992,7 +1053,6 @@ complete -o default -o nospace -F _git_cherry git-cherry
complete -o default -o nospace -F _git_cherry_pick git-cherry-pick complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
complete -o default -o nospace -F _git_commit git-commit complete -o default -o nospace -F _git_commit git-commit
complete -o default -o nospace -F _git_diff git-diff complete -o default -o nospace -F _git_diff git-diff
complete -o default -o nospace -F _git_diff_tree git-diff-tree
complete -o default -o nospace -F _git_fetch git-fetch complete -o default -o nospace -F _git_fetch git-fetch
complete -o default -o nospace -F _git_format_patch git-format-patch complete -o default -o nospace -F _git_format_patch git-format-patch
complete -o default -o nospace -F _git_gc git-gc complete -o default -o nospace -F _git_gc git-gc
@ -1008,6 +1068,7 @@ complete -o default -o nospace -F _git_rebase git-rebase
complete -o default -o nospace -F _git_config git-config complete -o default -o nospace -F _git_config git-config
complete -o default -o nospace -F _git_remote git-remote complete -o default -o nospace -F _git_remote git-remote
complete -o default -o nospace -F _git_reset git-reset complete -o default -o nospace -F _git_reset git-reset
complete -o default -o nospace -F _git_shortlog git-shortlog
complete -o default -o nospace -F _git_show git-show complete -o default -o nospace -F _git_show git-show
complete -o default -o nospace -F _git_log git-show-branch complete -o default -o nospace -F _git_log git-show-branch
complete -o default -o nospace -F _git_log git-whatchanged complete -o default -o nospace -F _git_log git-whatchanged
@ -1023,7 +1084,6 @@ complete -o default -o nospace -F _git git.exe
complete -o default -o nospace -F _git_branch git-branch.exe complete -o default -o nospace -F _git_branch git-branch.exe
complete -o default -o nospace -F _git_cherry git-cherry.exe complete -o default -o nospace -F _git_cherry git-cherry.exe
complete -o default -o nospace -F _git_diff git-diff.exe complete -o default -o nospace -F _git_diff git-diff.exe
complete -o default -o nospace -F _git_diff_tree git-diff-tree.exe
complete -o default -o nospace -F _git_format_patch git-format-patch.exe complete -o default -o nospace -F _git_format_patch git-format-patch.exe
complete -o default -o nospace -F _git_log git-log.exe complete -o default -o nospace -F _git_log git-log.exe
complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
@ -1031,6 +1091,7 @@ complete -o default -o nospace -F _git_merge_base git-merge-base.exe
complete -o default -o nospace -F _git_name_rev git-name-rev.exe complete -o default -o nospace -F _git_name_rev git-name-rev.exe
complete -o default -o nospace -F _git_push git-push.exe complete -o default -o nospace -F _git_push git-push.exe
complete -o default -o nospace -F _git_config git-config complete -o default -o nospace -F _git_config git-config
complete -o default -o nospace -F _git_shortlog git-shortlog.exe
complete -o default -o nospace -F _git_show git-show.exe complete -o default -o nospace -F _git_show git-show.exe
complete -o default -o nospace -F _git_log git-show-branch.exe complete -o default -o nospace -F _git_log git-show-branch.exe
complete -o default -o nospace -F _git_log git-whatchanged.exe complete -o default -o nospace -F _git_log git-whatchanged.exe

View File

@ -176,6 +176,7 @@ struct object *parse_object(const unsigned char *sha1)
if (buffer) { if (buffer) {
struct object *obj; struct object *obj;
if (check_sha1_signature(sha1, buffer, size, typename(type)) < 0) { if (check_sha1_signature(sha1, buffer, size, typename(type)) < 0) {
free(buffer);
error("sha1 mismatch %s\n", sha1_to_hex(sha1)); error("sha1 mismatch %s\n", sha1_to_hex(sha1));
return NULL; return NULL;
} }