Merge branch 'jl/submodule-summary-diff-files'

* jl/submodule-summary-diff-files:
  Documentaqtion/git-submodule.txt: Typofix
  git submodule summary: add --files option
This commit is contained in:
Junio C Hamano
2009-08-25 14:46:43 -07:00
3 changed files with 49 additions and 5 deletions

View File

@ -15,7 +15,7 @@ SYNOPSIS
'git submodule' [--quiet] init [--] [<path>...] 'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase] 'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase]
[--reference <repository>] [--merge] [--] [<path>...] [--reference <repository>] [--merge] [--] [<path>...]
'git submodule' [--quiet] summary [--cached] [--summary-limit <n>] [commit] [--] [<path>...] 'git submodule' [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
'git submodule' [--quiet] foreach <command> 'git submodule' [--quiet] foreach <command>
'git submodule' [--quiet] sync [--] [<path>...] 'git submodule' [--quiet] sync [--] [<path>...]
@ -127,7 +127,11 @@ summary::
Show commit summary between the given commit (defaults to HEAD) and Show commit summary between the given commit (defaults to HEAD) and
working tree/index. For a submodule in question, a series of commits working tree/index. For a submodule in question, a series of commits
in the submodule between the given super project commit and the in the submodule between the given super project commit and the
index or working tree (switched by --cached) are shown. index or working tree (switched by --cached) are shown. If the option
--files is given, show the series of commits in the submodule between
the index of the super project and the working tree of the submodule
(this option doesn't allow to use the --cached option or to provide an
explicit commit).
foreach:: foreach::
Evaluates an arbitrary shell command in each checked out submodule. Evaluates an arbitrary shell command in each checked out submodule.
@ -169,6 +173,11 @@ OPTIONS
commands typically use the commit found in the submodule HEAD, but commands typically use the commit found in the submodule HEAD, but
with this option, the commit stored in the index is used instead. with this option, the commit stored in the index is used instead.
--files::
This option is only valid for the summary command. This command
compares the commit in the index with that in the submodule HEAD
when this option is used.
-n:: -n::
--summary-limit:: --summary-limit::
This option is only valid for the summary command. This option is only valid for the summary command.

View File

@ -4,7 +4,7 @@
# #
# Copyright (c) 2007 Lars Hjemli # Copyright (c) 2007 Lars Hjemli
USAGE="[--quiet] [--cached] \ USAGE="[--quiet] [--cached|--files] \
[add [-b branch] <repo> <path>]|[status|init|update [-i|--init] [-N|--no-fetch] [--rebase|--merge]|summary [-n|--summary-limit <n>] [<commit>]] \ [add [-b branch] <repo> <path>]|[status|init|update [-i|--init] [-N|--no-fetch] [--rebase|--merge]|summary [-n|--summary-limit <n>] [<commit>]] \
[--] [<path>...]|[foreach <command>]|[sync [--] [<path>...]]" [--] [<path>...]|[foreach <command>]|[sync [--] [<path>...]]"
OPTIONS_SPEC= OPTIONS_SPEC=
@ -16,6 +16,7 @@ command=
branch= branch=
reference= reference=
cached= cached=
files=
nofetch= nofetch=
update= update=
@ -460,6 +461,7 @@ set_name_rev () {
cmd_summary() { cmd_summary() {
summary_limit=-1 summary_limit=-1
for_status= for_status=
diff_cmd=diff-index
# parse $args after "submodule ... summary". # parse $args after "submodule ... summary".
while test $# -ne 0 while test $# -ne 0
@ -468,6 +470,9 @@ cmd_summary() {
--cached) --cached)
cached="$1" cached="$1"
;; ;;
--files)
files="$1"
;;
--for-status) --for-status)
for_status="$1" for_status="$1"
;; ;;
@ -504,9 +509,17 @@ cmd_summary() {
head=HEAD head=HEAD
fi fi
if [ -n "$files" ]
then
test -n "$cached" &&
die "--cached cannot be used with --files"
diff_cmd=diff-files
head=
fi
cd_to_toplevel cd_to_toplevel
# Get modified modules cared by user # Get modified modules cared by user
modules=$(git diff-index $cached --raw $head -- "$@" | modules=$(git $diff_cmd $cached --raw $head -- "$@" |
egrep '^:([0-7]* )?160000' | egrep '^:([0-7]* )?160000' |
while read mod_src mod_dst sha1_src sha1_dst status name while read mod_src mod_dst sha1_src sha1_dst status name
do do
@ -520,7 +533,7 @@ cmd_summary() {
test -z "$modules" && return test -z "$modules" && return
git diff-index $cached --raw $head -- $modules | git $diff_cmd $cached --raw $head -- $modules |
egrep '^:([0-7]* )?160000' | egrep '^:([0-7]* )?160000' |
cut -c2- | cut -c2- |
while read mod_src mod_dst sha1_src sha1_dst status name while read mod_src mod_dst sha1_src sha1_dst status name

View File

@ -56,6 +56,15 @@ test_expect_success 'modified submodule(forward)' "
EOF EOF
" "
test_expect_success 'modified submodule(forward), --files' "
git submodule summary --files >actual &&
diff actual - <<-EOF
* sm1 $head1...$head2 (1):
> Add foo3
EOF
"
commit_file sm1 && commit_file sm1 &&
cd sm1 && cd sm1 &&
git reset --hard HEAD~2 >/dev/null && git reset --hard HEAD~2 >/dev/null &&
@ -114,6 +123,15 @@ test_expect_success 'typechanged submodule(submodule->blob), --cached' "
EOF EOF
" "
test_expect_success 'typechanged submodule(submodule->blob), --files' "
git submodule summary --files >actual &&
diff actual - <<-EOF
* sm1 $head5(blob)->$head4(submodule) (3):
> Add foo5
EOF
"
rm -rf sm1 && rm -rf sm1 &&
git checkout-index sm1 git checkout-index sm1
test_expect_success 'typechanged submodule(submodule->blob)' " test_expect_success 'typechanged submodule(submodule->blob)' "
@ -205,4 +223,8 @@ test_expect_success '--for-status' "
EOF EOF
" "
test_expect_success 'fail when using --files together with --cached' "
test_must_fail git submodule summary --files --cached
"
test_done test_done