Browse Source

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>
maint
Tor Arne Vestbø 16 years ago committed by Junio C Hamano
parent
commit
a9c3821ca2
  1. 4
      Documentation/config.txt
  2. 17
      Documentation/git-rebase.txt
  3. 25
      git-rebase.sh
  4. 23
      t/t3406-rebase-message.sh

4
Documentation/config.txt

@ -1160,6 +1160,10 @@ pull.octopus:: @@ -1160,6 +1160,10 @@ pull.octopus::
pull.twohead::
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::
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

17
Documentation/git-rebase.txt

@ -192,6 +192,13 @@ Alternatively, you can undo the 'git-rebase' with @@ -192,6 +192,13 @@ Alternatively, you can undo the 'git-rebase' with

git rebase --abort

CONFIGURATION
-------------

rebase.stat::
Whether to show a diffstat of what changed upstream since the last
rebase. False by default.

OPTIONS
-------
<newbase>::
@ -232,7 +239,15 @@ OPTIONS @@ -232,7 +239,15 @@ OPTIONS

-v::
--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::
This option bypasses the pre-rebase hook. See also linkgit:githooks[5].

25
git-rebase.sh

@ -46,6 +46,7 @@ do_merge= @@ -46,6 +46,7 @@ do_merge=
dotest="$GIT_DIR"/rebase-merge
prec=4
verbose=
diffstat=$(git config --bool rebase.stat)
git_am_opt=
rebase_root=

@ -289,8 +290,15 @@ do @@ -289,8 +290,15 @@ do
esac
do_merge=t
;;
-n|--no-stat)
diffstat=
;;
--stat)
diffstat=t
;;
-v|--verbose)
verbose=t
diffstat=t
;;
--whitespace=*)
git_am_opt="$git_am_opt $1"
@ -426,18 +434,21 @@ then @@ -426,18 +434,21 @@ then
exit 0
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
echo "First, rewinding head to replay your work on top of it..."
git checkout -q "$onto^0" || die "could not detach HEAD"
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
# we just fast forwarded.
if test "$mb" = "$branch"

23
t/t3406-rebase-message.sh

@ -22,7 +22,8 @@ test_expect_success setup ' @@ -22,7 +22,8 @@ test_expect_success setup '
git checkout topic &&
quick_one A &&
quick_one B &&
quick_one Z
quick_one Z &&
git tag start

'

@ -41,4 +42,24 @@ test_expect_success 'rebase -m' ' @@ -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

Loading…
Cancel
Save