Skip to content

Commit

Permalink
git submodule summary: add --files option
Browse files Browse the repository at this point in the history
git submodule summary is providing similar functionality for submodules as
git diff-index does for a git project (including the meaning of --cached).
But the analogon to git diff-files is missing, so add a --files option to
summarize the differences between the index of the super project and the
last commit checked out in the working tree of the submodule.

Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jens Lehmann authored and Junio C Hamano committed Aug 15, 2009
1 parent 6ffd781 commit 1c244f6
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 5 deletions.
13 changes: 11 additions & 2 deletions Documentation/git-submodule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ SYNOPSIS
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] update [--init] [-N|--no-fetch] [--rebase]
[--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] sync [--] [<path>...]

Expand Down Expand Up @@ -127,7 +127,11 @@ summary::
Show commit summary between the given commit (defaults to HEAD) and
working tree/index. For a submodule in question, a series of commits
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 super project the and the working tree of the submodule
(this option doesn't allow to use the --cached option or to provide an
explicit commit).

foreach::
Evaluates an arbitrary shell command in each checked out submodule.
Expand Down Expand Up @@ -169,6 +173,11 @@ OPTIONS
commands typically use the commit found in the submodule HEAD, but
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::
--summary-limit::
This option is only valid for the summary command.
Expand Down
19 changes: 16 additions & 3 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#
# 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>]] \
[--] [<path>...]|[foreach <command>]|[sync [--] [<path>...]]"
OPTIONS_SPEC=
Expand All @@ -16,6 +16,7 @@ command=
branch=
reference=
cached=
files=
nofetch=
update=

Expand Down Expand Up @@ -460,6 +461,7 @@ set_name_rev () {
cmd_summary() {
summary_limit=-1
for_status=
diff_cmd=diff-index

# parse $args after "submodule ... summary".
while test $# -ne 0
Expand All @@ -468,6 +470,9 @@ cmd_summary() {
--cached)
cached="$1"
;;
--files)
files="$1"
;;
--for-status)
for_status="$1"
;;
Expand Down Expand Up @@ -504,9 +509,17 @@ cmd_summary() {
head=HEAD
fi

if [ -n "$files" ]
then
test -n "$cached" &&
die "--cached cannot be used with --files"
diff_cmd=diff-files
head=
fi

cd_to_toplevel
# Get modified modules cared by user
modules=$(git diff-index $cached --raw $head -- "$@" |
modules=$(git $diff_cmd $cached --raw $head -- "$@" |
egrep '^:([0-7]* )?160000' |
while read mod_src mod_dst sha1_src sha1_dst status name
do
Expand All @@ -520,7 +533,7 @@ cmd_summary() {

test -z "$modules" && return

git diff-index $cached --raw $head -- $modules |
git $diff_cmd $cached --raw $head -- $modules |
egrep '^:([0-7]* )?160000' |
cut -c2- |
while read mod_src mod_dst sha1_src sha1_dst status name
Expand Down
22 changes: 22 additions & 0 deletions t/t7401-submodule-summary.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,15 @@ test_expect_success 'modified submodule(forward)' "
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 &&
cd sm1 &&
git reset --hard HEAD~2 >/dev/null &&
Expand Down Expand Up @@ -114,6 +123,15 @@ test_expect_success 'typechanged submodule(submodule->blob), --cached' "
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 &&
git checkout-index sm1
test_expect_success 'typechanged submodule(submodule->blob)' "
Expand Down Expand Up @@ -205,4 +223,8 @@ test_expect_success '--for-status' "
EOF
"

test_expect_success 'fail when using --files together with --cached' "
test_must_fail git submodule summary --files --cached
"

test_done

0 comments on commit 1c244f6

Please sign in to comment.