From: Martin von Zweigbergk <martinvonz@gmail.com>
To: Jeff King <peff@peff.net>
Cc: Junio C Hamano <gitster@pobox.com>,
Maarten de Vries <maarten@de-vri.es>,
git mailing list <git@vger.kernel.org>
Subject: Re: Re* Bug report: reset -p HEAD
Date: Thu, 24 Oct 2013 22:42:52 -0700 [thread overview]
Message-ID: <CANiSa6iYLp-iNdcv_qbFTitrfFxaDBVUy9YyUAF4QKM+-35P4A@mail.gmail.com> (raw)
In-Reply-To: <20131025042421.GB11810@sigill.intra.peff.net>
Sorry about the regression and thanks for report and fixes.
On Thu, Oct 24, 2013 at 9:24 PM, Jeff King <peff@peff.net> wrote:
> On Thu, Oct 24, 2013 at 08:40:13PM -0700, Junio C Hamano wrote:
>
>> Maarten de Vries <maarten@de-vri.es> writes:
>>
>> > Some more info: It used to work as intended. Using a bisect shows it
>> > has been broken by commit 166ec2e9.
>>
>> Thanks.
>>
>> A knee-jerk change without thinking what side-effect it has for you
>> to try out.
>>
>> builtin/reset.c | 5 ++++-
>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/builtin/reset.c b/builtin/reset.c
>> index f2f9d55..a3088d9 100644
>> --- a/builtin/reset.c
>> +++ b/builtin/reset.c
>> @@ -304,7 +304,10 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
>> if (patch_mode) {
>> if (reset_type != NONE)
>> die(_("--patch is incompatible with --{hard,mixed,soft}"));
>> - return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", &pathspec);
>> + return run_add_interactive(
>> + (unborn || strcmp(rev, "HEAD"))
>> + ? sha1_to_hex(sha1)
>> + : "HEAD", "--patch=reset", &pathspec);
>> }
>
> I think that's the correct fix for the regression. You are restoring
> the original, pre-166ec2e9 behavior for just the HEAD case. I do not
> think add--interactive does any other magic between a symbolic rev and
> its sha1, except for recognizing HEAD specially. However, if you wanted
> to minimize the potential impact of 166ec2e9, you could pass the sha1
> _only_ in the unborn case, like this:
Plus, the end result is more readable, IMHO.
> diff --git a/builtin/reset.c b/builtin/reset.c
> index f2f9d55..bfdd8d3 100644
> --- a/builtin/reset.c
> +++ b/builtin/reset.c
> @@ -283,6 +283,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
> if (unborn) {
> /* reset on unborn branch: treat as reset to empty tree */
> hashcpy(sha1, EMPTY_TREE_SHA1_BIN);
> + rev = EMPTY_TREE_SHA1_HEX;
> } else if (!pathspec.nr) {
> struct commit *commit;
> if (get_sha1_committish(rev, sha1))
> @@ -304,7 +305,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
> if (patch_mode) {
> if (reset_type != NONE)
> die(_("--patch is incompatible with --{hard,mixed,soft}"));
> - return run_add_interactive(sha1_to_hex(sha1), "--patch=reset", &pathspec);
> + return run_add_interactive(rev, "--patch=reset", &pathspec);
> }
>
> /* git reset tree [--] paths... can be used to
>
> That fixes any possible regression from add--interactive treating the
> two cases differently. On an unborn branch, we will still say "apply
> this hunk" rather than "unstage this hunk". That's not a regression,
> because it simply didn't work before, but it's not ideal. To fix that,
> we need to somehow tell add--interactive "this is HEAD, but use the
> empty tree because it's unborn". I can think of a few simple-ish ways:
>
> 1. Pass the head/not-head flag as a separate option.
>
> 2. Pass HEAD even in the unborn case; teach add--interactive to
> convert an unborn HEAD to the empty tree.
>
> 3. Teach add--interactive to recognize the empty tree sha1 as an
> "unstage" path.
>
> I kind of like (3). At first glance, it is wrong; we will also treat
> "git reset -p $(git hash-object -t tree /dev/null)" as if "HEAD" had
> been passed. But if you are explicitly passing the empty tree like that,
> I think saying "unstage" makes a lot of sense.
Makes sense to me. I'm sure others can implement that much faster than
I can, but I feel a little guilty, so I'm happy to do it if no one
else wants to, as long as we agree this is the way we want to go.
next prev parent reply other threads:[~2013-10-25 5:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAPWpf+wi0zH2sOnuqiZuKkf+kC0RMug_ASb-J-TGGLd2RFT1wg@mail.gmail.com>
[not found] ` <CAPWpf+xqutvhq1jyVkxr6LyKsANTCS6M=vj5XY=EgUfiS3Z8xg@mail.gmail.com>
2013-10-24 23:05 ` Fwd: Bug report: reset -p HEAD Maarten de Vries
2013-10-24 23:16 ` Maarten de Vries
2013-10-25 3:40 ` Re* " Junio C Hamano
2013-10-25 4:24 ` Jeff King
2013-10-25 5:42 ` Martin von Zweigbergk [this message]
2013-10-25 6:51 ` [PATCH 0/2] reset -p and unborn branches Jeff King
2013-10-25 6:52 ` [PATCH 1/2] add-interactive: handle unborn branch in patch mode Jeff King
2013-10-25 6:54 ` [PATCH 2/2] reset: pass real rev name to add--interactive Jeff King
2013-10-25 16:54 ` Re* Bug report: reset -p HEAD 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=CANiSa6iYLp-iNdcv_qbFTitrfFxaDBVUy9YyUAF4QKM+-35P4A@mail.gmail.com \
--to=martinvonz@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=maarten@de-vri.es \
--cc=peff@peff.net \
/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).