diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-09-11 15:02:29 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-09-11 15:02:29 -0700 |
commit | 135be1ee2b6cc5b006974e38111990f0e22accd5 (patch) | |
tree | 9cc41fea9f2b1d56c78916a23ceca4ddcf393e4b /git-rebase--interactive.sh | |
parent | 8c731e9c8f92b138c31a0897321a2578ba9221e5 (diff) | |
parent | 75c69766554c4b34ede65502d481dd7beb7f3388 (diff) | |
download | git-135be1ee2b6cc5b006974e38111990f0e22accd5.tar.gz git-135be1ee2b6cc5b006974e38111990f0e22accd5.tar.xz |
Merge branch 'es/rebase-i-no-abbrev'
The commit object names in the insn sheet that was prepared at the
beginning of "rebase -i" session can become ambiguous as the
rebasing progresses and the repository gains more commits. Make
sure the internal record is kept with full 40-hex object names.
* es/rebase-i-no-abbrev:
rebase -i: fix short SHA-1 collision
t3404: rebase -i: demonstrate short SHA-1 collision
t3404: make tests more self-contained
Diffstat (limited to 'git-rebase--interactive.sh')
-rw-r--r-- | git-rebase--interactive.sh | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index b8245cd3f..10bf318d0 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -690,6 +690,32 @@ skip_unnecessary_picks () { die "Could not skip unnecessary pick commands" } +transform_todo_ids () { + while read -r command rest + do + case "$command" in + "$comment_char"* | exec) + # Be careful for oddball commands like 'exec' + # that do not have a SHA-1 at the beginning of $rest. + ;; + *) + sha1=$(git rev-parse --verify --quiet "$@" ${rest%% *}) && + rest="$sha1 ${rest#* }" + ;; + esac + printf '%s\n' "$command${rest:+ }$rest" + done <"$todo" >"$todo.new" && + mv -f "$todo.new" "$todo" +} + +expand_todo_ids() { + transform_todo_ids +} + +collapse_todo_ids() { + transform_todo_ids --short=7 +} + # Rearrange the todo list that has both "pick sha1 msg" and # "pick sha1 fixup!/squash! msg" appears in it so that the latter # comes immediately after the former, and change "pick" to @@ -842,6 +868,7 @@ skip) edit-todo) git stripspace --strip-comments <"$todo" >"$todo".new mv -f "$todo".new "$todo" + collapse_todo_ids append_todo_help git stripspace --comment-lines >>"$todo" <<\EOF @@ -853,6 +880,7 @@ EOF git_sequence_editor "$todo" || die "Could not execute editor" + expand_todo_ids exit ;; @@ -1009,6 +1037,8 @@ git_sequence_editor "$todo" || has_action "$todo" || die_abort "Nothing to do" +expand_todo_ids + test -d "$rewritten" || test -n "$force_rebase" || skip_unnecessary_picks GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" |