mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
Merge branch 'js/rebase-stat-unrelated-fix'
"git rebase --stat" to transplant a piece of history onto a totally unrelated history were not working before and silently showed wrong result. With the recent reimplementation in C, it started to instead die with an error message, as the original logic was not prepared to cope with this case. This has now been fixed. * js/rebase-stat-unrelated-fix: rebase --stat: fix when rebasing to an unrelated history
This commit is contained in:
commit
881d72eff8
@ -1503,10 +1503,15 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
if (options.flags & REBASE_DIFFSTAT) {
|
||||
struct diff_options opts;
|
||||
|
||||
if (options.flags & REBASE_VERBOSE)
|
||||
printf(_("Changes from %s to %s:\n"),
|
||||
oid_to_hex(&merge_base),
|
||||
oid_to_hex(&options.onto->object.oid));
|
||||
if (options.flags & REBASE_VERBOSE) {
|
||||
if (is_null_oid(&merge_base))
|
||||
printf(_("Changes to %s:\n"),
|
||||
oid_to_hex(&options.onto->object.oid));
|
||||
else
|
||||
printf(_("Changes from %s to %s:\n"),
|
||||
oid_to_hex(&merge_base),
|
||||
oid_to_hex(&options.onto->object.oid));
|
||||
}
|
||||
|
||||
/* We want color (if set), but no pager */
|
||||
diff_setup(&opts);
|
||||
@ -1516,8 +1521,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
|
||||
opts.detect_rename = DIFF_DETECT_RENAME;
|
||||
diff_setup_done(&opts);
|
||||
diff_tree_oid(&merge_base, &options.onto->object.oid,
|
||||
"", &opts);
|
||||
diff_tree_oid(is_null_oid(&merge_base) ?
|
||||
the_hash_algo->empty_tree : &merge_base,
|
||||
&options.onto->object.oid, "", &opts);
|
||||
diffcore_std(&opts);
|
||||
diff_flush(&opts);
|
||||
}
|
||||
|
@ -718,10 +718,16 @@ if test -n "$diffstat"
|
||||
then
|
||||
if test -n "$verbose"
|
||||
then
|
||||
echo "$(eval_gettext "Changes from \$mb to \$onto:")"
|
||||
if test -z "$mb"
|
||||
then
|
||||
echo "$(eval_gettext "Changes to \$onto:")"
|
||||
else
|
||||
echo "$(eval_gettext "Changes from \$mb to \$onto:")"
|
||||
fi
|
||||
fi
|
||||
mb_tree="${mb:-$(git hash-object -t tree /dev/null)}"
|
||||
# We want color (if set), but no pager
|
||||
GIT_PAGER='' git diff --stat --summary "$mb" "$onto"
|
||||
GIT_PAGER='' git diff --stat --summary "$mb_tree" "$onto"
|
||||
fi
|
||||
|
||||
test -n "$interactive_rebase" && run_specific_rebase
|
||||
|
@ -117,4 +117,14 @@ test_expect_success 'GIT_REFLOG_ACTION' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'rebase -i onto unrelated history' '
|
||||
git init unrelated &&
|
||||
test_commit -C unrelated 1 &&
|
||||
git -C unrelated remote add -f origin "$PWD" &&
|
||||
git -C unrelated branch --set-upstream-to=origin/master &&
|
||||
git -C unrelated -c core.editor=true rebase -i -v --stat >actual &&
|
||||
test_i18ngrep "Changes to " actual &&
|
||||
test_i18ngrep "5 files changed" actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user