From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Marc Branchaud <marcnarc@xiplink.com>
Cc: Stephan Beyer <s-beyer@gmx.net>, git <git@vger.kernel.org>
Subject: Re: [RFC] stash --continue
Date: Thu, 19 Jan 2017 22:30:44 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.20.1701192220320.3469@virtualbox> (raw)
In-Reply-To: <aa8104ad-45f4-7bef-f199-6e6021cf0c06@xiplink.com>
Hi Marc,
On Thu, 19 Jan 2017, Marc Branchaud wrote:
> On 2017-01-19 10:49 AM, Johannes Schindelin wrote:
> >
> > On Wed, 18 Jan 2017, Marc Branchaud wrote:
> >
> > > On 2017-01-18 11:34 AM, Johannes Schindelin wrote:
> > > >
> > > > On Wed, 18 Jan 2017, Marc Branchaud wrote:
> > > >
> > > > > On 2017-01-16 05:54 AM, Johannes Schindelin wrote:
> > > > >
> > > > > > On Mon, 16 Jan 2017, Stephan Beyer wrote:
> > > > > >
> > > > > > > a git-newbie-ish co-worker uses git-stash sometimes. Last
> > > > > > > time he used "git stash pop", he got into a merge conflict.
> > > > > > > After he resolved the conflict, he did not know what to do
> > > > > > > to get the repository into the wanted state. In his case, it
> > > > > > > was only "git add <resolved files>" followed by a "git
> > > > > > > reset" and a "git stash drop", but there may be more
> > > > > > > involved cases when your index is not clean before "git
> > > > > > > stash pop" and you want to have your index as before.
> > > > > > >
> > > > > > > This led to the idea to have something like "git stash
> > > > > > > --continue"[1]
> > > > > >
> > > > > > More like "git stash pop --continue". Without the "pop"
> > > > > > command, it does not make too much sense.
> > > > >
> > > > > Why not? git should be able to remember what stash command
> > > > > created the conflict. Why should I have to? Maybe the fire
> > > > > alarm goes off right when I run the stash command, and by the
> > > > > time I get back to it I can't remember which operation I did.
> > > > > It would be nice to be able to tell git to "just finish off (or
> > > > > abort) the stash operation, whatever it was".
> > > >
> > > > That reeks of a big potential for confusion.
> > > >
> > > > Imagine for example a total Git noob who calls `git stash list`,
> > > > scrolls two pages down, then hits `q` by mistake. How would you
> > > > explain to that user that `git stash --continue` does not continue
> > > > showing the list at the third page?
> > >
> > > Sorry, but I have trouble taking that example seriously. It assumes
> > > such a level of "noobness" that the user doesn't even understand how
> > > standard command output paging works, not just with git but with any
> > > shell command.
> >
> > Yeah, well, I thought you understood what I meant.
> >
> > The example was the best I could come up with quickly, and it only
> > tried to show that there are *other* stash operations that one might
> > perceive to happen at the same time as the "pop" operation, so your
> > flimsical comment "why not continue the latest operation" may very
> > well be ambiguous.
> >
> > And if it is not ambiguous in "stash", it certainly will be in other
> > Git operations. And therefore, having a DWIM in "stash" to allow
> > "--continue" without any specific subcommand, but not having it in
> > other Git commands, is just a very poor user interface design. It is
> > prone to confuse users, which is always a hallmark of a bad user
> > interface.
>
> Please don't underestimate the power of syntactic consistency in helping
> users achieve their goals. Having some commands use "git foo
> --continue" while others use "git foo bar --continue" *will* confuse
> people, regardless of how logical the reasons for those differences.
But that ship has already sailed!
By your reasoning, it was a mistake to introduce subcommands such as `git
stash pop` in the first place.
> But in the case of stash, I still don't see the utility in having
> operation-specific continuation.
Stephan already gave one good example where you want it: if `git stash
pop` fails, you may want to continue by *not* dropping the stash via `git
stash apply --continue`.
> Consider the following sequence (as you say, this doesn't work yet, but
> making it work seems reasonable):
>
> git stash pop # creates some conflicts
> git stash apply stash@{4} # creates some other conflicts
> # (User resolves the conflicts created by the pop.)
> git stash pop --continue
Yes, that would make sense: the `pop` would actually drop the stash entry.
> Given the description of the original proposal (do "git reset; git stash
> drop"), what's the state of the index and the working tree?
>
> In particular, what has the user gained by continuing just that pop?
That it was completed.
> Another thing to ask is, how common is such a scenario likely to be?
We have millions of users. Even a 0.001% chance of anything happening will
bite users, who will then come back to bite us.
Let's just not go into the "how likely is this" game.
> I suggest that it will be far more common for users to resolve all the
> conflicts and then want to continue all their interrupted stash
> operations. If so, fussily forcing them to explicitly continue the pop
> and the apply is just a waste.
No, it is not a waste, as we require the user nothing else than to be
precise. Do you want to continue the "stash pop"? Okay, then, call "git
stash pop --continue".
> [... a lot of stuff skipped, as it is basically ignoring my point...]
>
> > But foo *is the operation*! By that reasoning, you should agree that
> > "git stash --continue" is *wrong*!
>
> No, in the user's mind *stash* is the operation!
How can that be true? In the user's mind, the *stash* operation is
equivalent to the *stash save* operation! Because that is what happens
when you call "git stash" without any further command-line parameters.
At this point I will stop commenting on this issue, as I have said all
that I wanted to say about it, at least once. If I failed to get my points
across so far, I simply won't be understood.
Ciao,
Johannes
next prev parent reply other threads:[~2017-01-19 21:31 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-15 23:56 [RFC] stash --continue Stephan Beyer
2017-01-16 3:59 ` Jacob Keller
2017-01-16 10:54 ` Johannes Schindelin
2017-01-18 15:41 ` Marc Branchaud
2017-01-18 16:34 ` Johannes Schindelin
2017-01-18 18:44 ` Marc Branchaud
2017-01-18 19:35 ` Samuel Lijin
2017-01-19 15:49 ` Johannes Schindelin
2017-01-19 18:38 ` Marc Branchaud
2017-01-19 21:30 ` Johannes Schindelin [this message]
2017-01-20 15:19 ` Marc Branchaud
2017-01-20 15:27 ` Johannes Schindelin
2017-01-18 19:10 ` Junio C Hamano
2017-01-18 19:20 ` Stephan Beyer
2017-01-19 15:54 ` Johannes Schindelin
2017-01-17 20:21 ` 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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.20.1701192220320.3469@virtualbox \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=marcnarc@xiplink.com \
--cc=s-beyer@gmx.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).