提交 edb72d55 编写于 作者: K Kirill A. Shutemov 提交者: Junio C Hamano

rebase -i: use full object name internally throughout the script

In earlier days, the abbreviated commit object name shown to the end
users were generated with hardcoded --abbrev=7; 56895038 (rebase
-i: respect core.abbrev, 2013-09-28) tried to make it honor the user
specified core.abbrev, but it missed the very initial invocation of
the editor.

These days, we try to use the full 40-hex object names internally to
avoid ambiguity that can arise after rebase starts running.  Newly
created objects during the rebase may share the same prefix with
existing commits listed in the insn sheet.  These object names are
shortened just before invoking the sequence editor to present the
insn sheet to the end user, and then expanded back to full object
names when the editor returns.

But the code still used the shortened names when preparing the insn
sheet for the very first time, resulting "7 hexdigits or more"
output to the user.  Change the code to use full 40-hex commit
object names from the very beginning to make things more uniform.
Signed-off-by: NKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 3c84ac86
......@@ -961,14 +961,13 @@ else
revisions=$onto...$orig_head
shortrevisions=$shorthead
fi
git rev-list $merges_option --pretty=oneline --abbrev-commit \
--abbrev=7 --reverse --left-right --topo-order \
git rev-list $merges_option --pretty=oneline --reverse --left-right --topo-order \
$revisions ${restrict_revision+^$restrict_revision} | \
sed -n "s/^>//p" |
while read -r shortsha1 rest
while read -r sha1 rest
do
if test -z "$keep_empty" && is_empty_commit $shortsha1 && ! is_merge_commit $shortsha1
if test -z "$keep_empty" && is_empty_commit $sha1 && ! is_merge_commit $sha1
then
comment_out="$comment_char "
else
......@@ -977,9 +976,8 @@ do
if test t != "$preserve_merges"
then
printf '%s\n' "${comment_out}pick $shortsha1 $rest" >>"$todo"
printf '%s\n' "${comment_out}pick $sha1 $rest" >>"$todo"
else
sha1=$(git rev-parse $shortsha1)
if test -z "$rebase_root"
then
preserve=t
......@@ -996,7 +994,7 @@ do
if test f = "$preserve"
then
touch "$rewritten"/$sha1
printf '%s\n' "${comment_out}pick $shortsha1 $rest" >>"$todo"
printf '%s\n' "${comment_out}pick $sha1 $rest" >>"$todo"
fi
fi
done
......@@ -1020,8 +1018,8 @@ then
# just the history of its first-parent for others that will
# be rebasing on top of it
git rev-list --parents -1 $rev | cut -d' ' -s -f2 > "$dropped"/$rev
short=$(git rev-list -1 --abbrev-commit --abbrev=7 $rev)
sane_grep -v "^[a-z][a-z]* $short" <"$todo" > "${todo}2" ; mv "${todo}2" "$todo"
sha1=$(git rev-list -1 $rev)
sane_grep -v "^[a-z][a-z]* $sha1" <"$todo" > "${todo}2" ; mv "${todo}2" "$todo"
rm "$rewritten"/$rev
fi
done
......@@ -1052,6 +1050,7 @@ has_action "$todo" ||
return 2
cp "$todo" "$todo".backup
collapse_todo_ids
git_sequence_editor "$todo" ||
die_abort "Could not execute editor"
......
......@@ -1039,4 +1039,11 @@ test_expect_success 'short SHA-1 collide' '
)
'
test_expect_success 'respect core.abbrev' '
git config core.abbrev 12 &&
set_cat_todo_editor &&
test_must_fail git rebase -i HEAD~4 >todo-list &&
test 4 = $(grep -c "pick [0-9a-f]\{12,\}" todo-list)
'
test_done
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册