git-rebase: Add --stat and --no-stat for producing diffstat on rebase

The behavior of --verbose is unchanged, but uses a different state
variable internally, so that the meaning of verbose output may be
expanded without affecting the diffstat. This is also reflected in
the documentation.

The configuration option rebase.stat works the same was as merg.stat,
but the default is currently false.

Signed-off-by: Tor Arne Vestbø <torarnv@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Tor Arne Vestbø 2009-03-01 23:11:38 +01:00 committed by Junio C Hamano
parent f474c52661
commit a9c3821ca2
4 changed files with 60 additions and 9 deletions

View File

@ -1160,6 +1160,10 @@ pull.octopus::
pull.twohead:: pull.twohead::
The default merge strategy to use when pulling a single branch. The default merge strategy to use when pulling a single branch.
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.
receive.fsckObjects:: receive.fsckObjects::
If it is set to true, git-receive-pack will check all received If it is set to true, git-receive-pack will check all received
objects. It will abort in the case of a malformed object or a objects. It will abort in the case of a malformed object or a

View File

@ -192,6 +192,13 @@ Alternatively, you can undo the 'git-rebase' with
git rebase --abort git rebase --abort
CONFIGURATION
-------------
rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.
OPTIONS OPTIONS
------- -------
<newbase>:: <newbase>::
@ -232,7 +239,15 @@ OPTIONS
-v:: -v::
--verbose:: --verbose::
Display a diffstat of what changed upstream since the last rebase. Be verbose. Implies --stat.
--stat::
Show a diffstat of what changed upstream since the last rebase. The
diffstat is also controlled by the configuration option rebase.stat.
-n::
--no-stat::
Do not show a diffstat as part of the rebase process.
--no-verify:: --no-verify::
This option bypasses the pre-rebase hook. See also linkgit:githooks[5]. This option bypasses the pre-rebase hook. See also linkgit:githooks[5].

View File

@ -46,6 +46,7 @@ do_merge=
dotest="$GIT_DIR"/rebase-merge dotest="$GIT_DIR"/rebase-merge
prec=4 prec=4
verbose= verbose=
diffstat=$(git config --bool rebase.stat)
git_am_opt= git_am_opt=
rebase_root= rebase_root=
@ -289,8 +290,15 @@ do
esac esac
do_merge=t do_merge=t
;; ;;
-n|--no-stat)
diffstat=
;;
--stat)
diffstat=t
;;
-v|--verbose) -v|--verbose)
verbose=t verbose=t
diffstat=t
;; ;;
--whitespace=*) --whitespace=*)
git_am_opt="$git_am_opt $1" git_am_opt="$git_am_opt $1"
@ -426,18 +434,21 @@ then
exit 0 exit 0
fi fi
if test -n "$verbose"
then
echo "Changes from $mb to $onto:"
# We want color (if set), but no pager
GIT_PAGER='' git diff --stat --summary "$mb" "$onto"
fi
# Detach HEAD and reset the tree # Detach HEAD and reset the tree
echo "First, rewinding head to replay your work on top of it..." echo "First, rewinding head to replay your work on top of it..."
git checkout -q "$onto^0" || die "could not detach HEAD" git checkout -q "$onto^0" || die "could not detach HEAD"
git update-ref ORIG_HEAD $branch git update-ref ORIG_HEAD $branch
if test -n "$diffstat"
then
if test -n "$verbose"
then
echo "Changes from $mb to $onto:"
fi
# We want color (if set), but no pager
GIT_PAGER='' git diff --stat --summary "$mb" "$onto"
fi
# If the $onto is a proper descendant of the tip of the branch, then # If the $onto is a proper descendant of the tip of the branch, then
# we just fast forwarded. # we just fast forwarded.
if test "$mb" = "$branch" if test "$mb" = "$branch"

View File

@ -22,7 +22,8 @@ test_expect_success setup '
git checkout topic && git checkout topic &&
quick_one A && quick_one A &&
quick_one B && quick_one B &&
quick_one Z quick_one Z &&
git tag start
' '
@ -41,4 +42,24 @@ test_expect_success 'rebase -m' '
' '
test_expect_success 'rebase --stat' '
git reset --hard start
git rebase --stat master >diffstat.txt &&
grep "^ fileX | *1 +$" diffstat.txt
'
test_expect_success 'rebase w/config rebase.stat' '
git reset --hard start
git config rebase.stat true &&
git rebase master >diffstat.txt &&
grep "^ fileX | *1 +$" diffstat.txt
'
test_expect_success 'rebase -n overrides config rebase.stat config' '
git reset --hard start
git config rebase.stat true &&
git rebase -n master >diffstat.txt &&
! grep "^ fileX | *1 +$" diffstat.txt
'
test_done test_done