Skip to content

Commit

Permalink
git-rebase: Add --stat and --no-stat for producing diffstat on rebase
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tor Arne Vestbø authored and Junio C Hamano committed Mar 3, 2009
1 parent f474c52 commit a9c3821
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 9 deletions.
4 changes: 4 additions & 0 deletions Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 16 additions & 1 deletion Documentation/git-rebase.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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>::
Expand Down Expand Up @@ -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].
Expand Down
25 changes: 18 additions & 7 deletions git-rebase.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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=

Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down
23 changes: 22 additions & 1 deletion t/t3406-rebase-message.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
'

Expand All @@ -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

0 comments on commit a9c3821

Please sign in to comment.