From: Phil Hord <hordp@cisco.com>
To: Michael Haggerty <mhagger@alum.mit.edu>,
Fabian Ruch <bafain@gmail.com>,
git@vger.kernel.org, phil.hord@gmail.com
Subject: Re: [RFC 2/3] rebase -i: Reschedule tasks that failed before the index was touched
Date: Tue, 27 May 2014 14:26:34 -0400 [thread overview]
Message-ID: <5384D8DA.40005@cisco.com> (raw)
In-Reply-To: <53847D7D.5050000@alum.mit.edu>
Hi Fabian,
Thanks for looking into this.
On 05/27/2014 07:56 AM, Michael Haggerty wrote:
>> +reschedule_last_action () {
>> + tail -n 1 "$done" | cat - "$todo" >"$todo".new
>> + sed -e \$d <"$done" >"$done".new
>> + mv -f "$todo".new "$todo"
>> + mv -f "$done".new "$done"
>> +}
>> +
>> append_todo_help () {
>> git stripspace --comment-lines >>"$todo" <<\EOF
>>
>> @@ -470,11 +480,15 @@ do_pick () {
>> --no-post-rewrite -n -q -C $1 &&
>> pick_one -n $1 &&
>> git commit --allow-empty --allow-empty-message \
>> - --amend --no-post-rewrite -n -q -C $1 ||
>> - die_with_patch $1 "Could not apply $1... $2"
>> + --amend --no-post-rewrite -n -q -C $1
> "git cherry-pick" indicates its error status specifically as 1 or some
> other value. But here it could be that pick_one succeeds but "git
> commit" fails; in that case ret is set to the return code of "git
> commit". So, if "git commit" fails with a retcode different than 1,
> then reschedule_last_action will be called a few lines later. This
> seems incorrect to me.
I agree. I was thinking that pick_one should get this new behavior
instead of do_pick, but some callers may not appreciate the new behavior
(i.e. squash/fixup), though I expect those callers have similar problems
as this commit is trying to fix.
I think adding a pick_one_with_reschedule function (to be called in both
places from do_pick) could solve the issue Michael mentioned without
breaking other pick_one callers.
I have not tested doing so, but I think it would look like this:
===================
diff --git i/git-rebase--interactive.sh w/git-rebase--interactive.sh
index fe813ba..ae5603a 100644
--- i/git-rebase--interactive.sh
+++ w/git-rebase--interactive.sh
@@ -235,6 +235,17 @@ git_sequence_editor () {
eval "$GIT_SEQUENCE_EDITOR" '"$@"'
}
+pick_one_with_reschedule () {
+ pick_one $1
+ ret=$?
+ case "$ret" in
+ 0) ;;
+ 1) ;;
+ *) reschedule_last_action ;;
+ esac
+ return $ret
+}
+
pick_one () {
ff=--ff
@@ -474,13 +485,13 @@ do_pick () {
# rebase --continue.
git commit --allow-empty --allow-empty-message --amend \
--no-post-rewrite -n -q -C $1 &&
- pick_one -n $1 &&
+ pick_one_with_reschedule -n $1 &&
git commit --allow-empty --allow-empty-message \
--amend --no-post-rewrite -n -q -C $1 \
${gpg_sign_opt:+"$gpg_sign_opt"} ||
die_with_patch $1 "Could not apply $1... $2"
else
- pick_one $1 ||
+ pick_one_with_reschedule $1 ||
die_with_patch $1 "Could not apply $1... $2"
fi
}
===================
I don't much like the name 'pick_one_with_reschedule', but I didn't like
my other choices, either.
I'll try to look at this and your patches more closely when I have a bit
more time.
Phil
next prev parent reply other threads:[~2014-05-27 18:36 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-02 22:37 git-rebase-todo gets popped prematurely Phil Hord
2014-05-26 22:19 ` [RFC 1/3] sequencer: Signal failed ff as an aborted, not a conflicted merge Fabian Ruch
2014-05-27 18:42 ` Junio C Hamano
2014-06-09 15:04 ` Fabian Ruch
2014-06-10 17:56 ` Junio C Hamano
2014-06-10 18:51 ` Phil Hord
2014-06-10 19:17 ` Junio C Hamano
2014-05-26 22:19 ` [RFC 2/3] rebase -i: Reschedule tasks that failed before the index was touched Fabian Ruch
2014-05-27 11:56 ` Michael Haggerty
2014-05-27 18:26 ` Phil Hord [this message]
2014-05-26 22:19 ` [RFC 3/3] tests: Add 'rebase -i commits that overwrite untracked files' Fabian Ruch
2014-05-27 13:15 ` Michael Haggerty
2014-05-27 18:47 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5384D8DA.40005@cisco.com \
--to=hordp@cisco.com \
--cc=bafain@gmail.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=phil.hord@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).