git-rebase: Add --stat and --no-stat for producing diffstat on rebase
authorTor Arne Vestbø <torarnv@gmail.com>
Sun, 1 Mar 2009 22:11:38 +0000 (23:11 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 3 Mar 2009 07:22:32 +0000 (23:22 -0800)
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>
Documentation/config.txt
Documentation/git-rebase.txt
git-rebase.sh
t/t3406-rebase-message.sh

index f5152c5038b49ab5ebe3804e8e9b314d4a752690..6be2e9935b7cb9a885caebdb22f051d912715769 100644 (file)
@@ -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
index da3c38cd60dc0d143fe91417b742335cfff27809..57bd333f0b3660b12382365ee2b6d8e6c2418f02 100644 (file)
@@ -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
 
 -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].
index 368c0ef4342df990a5617fd6fbe2cd973b1b208b..26d75662f915661dd2f87477fca1c00443d6aa2f 100755 (executable)
@@ -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
                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
        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"
index 539108094345e3e0ba4cf03fc20a5ca6486fa230..85fc7c4af8cebdb50a7fa294b274bb2e7988997b 100755 (executable)
@@ -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' '
 
 '
 
+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