X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=git-rebase--interactive.sh;fp=git-rebase--interactive.sh;h=3b105138069ce34ca5c970a390becf912bfd3b2d;hb=2d6ca6ef55226185b6a093f7fac27f5fecd51fe6;hp=6c8ff0c46a6bd26f1dcdbac56bbdfa79bb104531;hpb=2caf20c52b7f646d0a7481c25415c48d687773b2;p=git.git diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 6c8ff0c46..3b1051380 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -619,25 +619,30 @@ do_rest () { # skip picking commits whose parents are unchanged skip_unnecessary_picks () { fd=3 - while read -r line + while read -r command rest do - command=$(echo "$line" | sed 's/ */ /' | cut -d ' ' -f 1) - sha1=$(echo "$line" | sed 's/ */ /' | cut -d ' ' -f 2) - rest=$(echo "$line" | sed 's/ */ /' | cut -d ' ' -f 3-) # fd=3 means we skip the command - case "$fd,$command,$(git rev-parse --verify --quiet "$sha1"^)" in - 3,pick,"$ONTO"*|3,p,"$ONTO"*) + case "$fd,$command" in + 3,pick|3,p) # pick a commit whose parent is current $ONTO -> skip - ONTO=$sha1 + sha1=$(echo "$rest" | cut -d ' ' -f 1) + case "$(git rev-parse --verify --quiet "$sha1"^)" in + "$ONTO"*) + ONTO=$sha1 + ;; + *) + fd=1 + ;; + esac ;; - 3,#*|3,,*) + 3,#*|3,) # copy comments ;; *) fd=1 ;; esac - echo "$line" >&$fd + echo "$command${rest:+ }$rest" >&$fd done <"$TODO" >"$TODO.new" 3>>"$DONE" && mv -f "$TODO".new "$TODO" && case "$(peek_next_command)" in