From: Bagas Sanjaya <bagasdotme@gmail.com>
To: Junio C Hamano <gitster@pobox.com>,
Viaceslavus via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Viaceslavus <vaceslavkozin619@gmail.com>
Subject: Re: [PATCH v2] hard reset safe mode
Date: Mon, 14 Feb 2022 10:14:29 +0700 [thread overview]
Message-ID: <c81e1226-2184-0f16-b81d-c11d894b4654@gmail.com> (raw)
In-Reply-To: <xmqqee4980qz.fsf@gitster.g>
On 12/02/22 06.03, Junio C Hamano wrote:
> "Viaceslavus via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> From: Viacelaus <vaceslavkozin619@gmail.com>
>>
>> The power of hard reset may frequently be inconvinient for a common user. So
>> this is an implementation of safe mode for hard reset. It can be switched on
>> by setting 'reset.safe' config variable to true. When running 'reset --hard'
>> with 'reset.safe' enabled git will check if there are any staged changes
>> that may be discarded by this reset. If there is a chance of deleting the
>> changes, git will ask the user for a confirmation with Yes/No choice.
>
> There needs an explanation on how this avoids breaking scripts that
> trust that "git reset --hard HEAD" reliably matches the index and
> the working tree files to what is recorded in HEAD without getting
> stuck waiting for any user input. "They can turn off reset.safe" is
> not an acceptable answer.
>
>> +static int check_commit_exists(const char *refname, const struct object_id *oid, int f, void *d)
>> +{
>> + return is_branch(refname);
>> +}
>
> The returned value from a for_each_ref() callback is used to tell
> the caller "stop here, no need to further iterate and call me with
> other refs". I think this wants to say "if I ever get called even
> once, tell the caller to stop, so that it can tell its caller that
> it was stopped".
>
>> +static void accept_discarding_changes(void) {
>> + int answer = getc(stdin);
>> + printf(_("Some staged changes may be discarded by this reset. Continue? [Y/n]"));
>> +
>> + if (answer != 'y' && answer != 'Y') {
>> + printf(_("aborted\n"));
>> + exit(1);
>> + }
>> +}
>
> I'd think at least we should use git_prompt(), instead of
> hand-rolled prompt routine like this one that assumes that an
> end-user is sitting in front of the terminal waiting to be prompted.
>
> If updating "git reset" like this patch does were a good idea to
> begin with, that is.
>
I think it's better just to error out when there are staged changes.
The message will be something like:
"error: there are staged changes that will be hard-reset. Please
commit or stash them before resetting. If you want to remove all
changes from index, you can do so by running 'git reset'."
--
An old man doll... just what I always wanted! - Clara
next prev parent reply other threads:[~2022-02-14 3:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-02 11:52 [PATCH] forbid a hard reset before the initial commit Viaceslavus via GitGitGadget
2022-02-02 21:05 ` Junio C Hamano
2022-02-11 22:26 ` [PATCH v2] hard reset safe mode Viaceslavus via GitGitGadget
2022-02-11 23:03 ` Junio C Hamano
2022-02-14 3:14 ` Bagas Sanjaya [this message]
2022-02-14 11:44 ` 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=c81e1226-2184-0f16-b81d-c11d894b4654@gmail.com \
--to=bagasdotme@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=vaceslavkozin619@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).