From: Michael Haggerty <mhagger@alum.mit.edu>
To: Fabian Ruch <bafain@gmail.com>, git@vger.kernel.org
Cc: Phil Hord <hordp@cisco.com>
Subject: Re: [RFC 3/3] tests: Add 'rebase -i commits that overwrite untracked files'
Date: Tue, 27 May 2014 15:15:46 +0200 [thread overview]
Message-ID: <53849002.7060502@alum.mit.edu> (raw)
In-Reply-To: <5383BDF0.2040904@gmail.com>
On 05/27/2014 12:19 AM, Fabian Ruch wrote:
> If a todo list will cherry-pick a commit that adds some file and the
> working tree already contains a file with the same name, the rebase
> sequence for that todo list will be interrupted and the cherry-picked
> commit will be lost after the rebasing process is resumed.
>
> This is fixed.
>
> Add as a test case for regression testing to the "rebase-interactive"
> test suite.
The tests look fine. (I assume you tested the tests against the
pre-fixed version of the software to make sure that they caught the
problem that you fixed.)
As I mentioned in patch 2/3, I think it would be better to add the tests
in the same commit where you fix the problem.
The commit message is, I think, confusing because the first paragraph is
in future tense even though it is describing a problem that was just
fixed. It will probably change completely when you squash this with the
previous commit, but for future reference, I would have suggested
something more like
t3404: "rebase -i" retries pick when blocked by untracked file
If a commit that is being "pick"ed adds a file that already exists
as an untracked file in the working tree, cherry-pick fails before
even trying to apply the change. "rebase --interactive" didn't
distinguish this error from a conflict, and when "rebase --continue"
was run it thought that the user had just resolved and committed
the conflict. The result was that the commit was omitted entirely
from the rebased series.
This problem was fixed in the previous commit. Add tests.
> Reported-by: Phil Hord <hordp@cisco.com>
> Signed-off-by: Fabian Ruch <bafain@gmail.com>
> ---
> t/t3404-rebase-interactive.sh | 44 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index 50e22b1..7f5ac18 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -1074,4 +1074,48 @@ test_expect_success 'short SHA-1 collide' '
> )
> '
>
> +test_expect_success 'rebase -i commits that overwrite untracked files (pick)' '
> + git checkout branch2 &&
> + set_fake_editor &&
> + FAKE_LINES="edit 1 2" git rebase -i A &&
> + test_cmp_rev HEAD F &&
> + test_path_is_missing file6 &&
> + touch file6 &&
> + test_must_fail git rebase --continue &&
> + test_cmp_rev HEAD F &&
> + rm file6 &&
> + git rebase --continue &&
> + test_cmp_rev HEAD I
> +'
> +
> +test_expect_success 'rebase -i commits that overwrite untracked files (squash)' '
> + git checkout branch2 &&
> + git tag original-branch2 &&
It might be easier (and better decoupled from other tests) to
git checkout -b squash-overwrite branch2 &&
rather than moving branch2 then resetting it. That way you can also
leave the branch in the repo when you are done rather than having to
clean it up.
> + set_fake_editor &&
> + FAKE_LINES="edit 1 squash 2" git rebase -i A &&
> + test_cmp_rev HEAD F &&
> + test_path_is_missing file6 &&
> + touch file6 &&
> + test_must_fail git rebase --continue &&
> + test_cmp_rev HEAD F &&
> + rm file6 &&
> + git rebase --continue &&
> + test $(git cat-file commit HEAD | sed -ne \$p) = I &&
> + git reset --hard original-branch2
> +'
> +
> +test_expect_success 'rebase -i commits that overwrite untracked files (no ff)' '
> + git checkout branch2 &&
> + set_fake_editor &&
> + FAKE_LINES="edit 1 2" git rebase -i --no-ff A &&
> + test $(git cat-file commit HEAD | sed -ne \$p) = F &&
> + test_path_is_missing file6 &&
> + touch file6 &&
> + test_must_fail git rebase --continue &&
> + test $(git cat-file commit HEAD | sed -ne \$p) = F &&
> + rm file6 &&
> + git rebase --continue &&
> + test $(git cat-file commit HEAD | sed -ne \$p) = I
> +'
> +
> test_done
>
Thanks!
Michael
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
next prev parent reply other threads:[~2014-05-27 13:15 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
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 [this message]
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=53849002.7060502@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=bafain@gmail.com \
--cc=git@vger.kernel.org \
--cc=hordp@cisco.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).