All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: Christian Couder <christian.couder@gmail.com>,
	Charles Rudolph <charles.w.rudolph@gmail.com>,
	git <git@vger.kernel.org>
Subject: Re: Additional plumbing commands
Date: Wed, 07 Jan 2015 08:31:04 -0800	[thread overview]
Message-ID: <xmqqa91ulfhz.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20150107080408.GA1301@peff.net> (Jeff King's message of "Wed, 7 Jan 2015 03:04:09 -0500")

Jeff King <peff@peff.net> writes:

> ... Knowing what each state _means_
> and what operations are meaningful to perform is much trickier (e.g., if
> we are in a rebase, you probably do not want to start a new rebase. But
> is it wrong to cherry-pick?).
>
> It would be nice if we could find a way to generalize in-progress
> operations and what they mean for starting new operations, but that is
> a much harder problem (if it is even possible at all).

Very good points. Thinking aloud, to see if we can start from a few
rules of thumb.

You can be "in the middle" for two largely different reasons.

One is that the command inherently wants to give control back to
you.  Think of a case where you said "exec false" in the "rebase -i"
insn sheet, or "bisect" checked out a version for you to try.

The other is that the command wanted to continue in the ideal world,
but couldn't and stopped asking for your help.  Think of a case
where "am" stopped due to corrupt patch, "cherry-pick A..B" or
"revert" stopped due to conflicts.

In the former case, depending on the nature of the command, what are
sensible things you can do are very different (during "bisect" you
would typically not want to do anything that causes a commit
created.  During "rebase -i" you may want to run any command that
creates a commit, to insert a new one into the series).  But a good
rule of thumb would be "If I should be able to edit the working tree
file, I should also be able to do "cherry-pick --no-commit", "merge
--no-commit", "apply", etc." "If I should be able to manually
commit, I should also be able to "cherry-pick", "merge", etc.

In the latter, the _only_ reason you are given control back is to
help the interrupted operation.  So "cherry-pick --no-commit" or
"apply" in lieu of editing files manually in order to fix conflicts
should be allowed, but a random "git merge" (without --no-commit)
would not be.

So after thinking aloud for a while, I very much agree with you that
you cannot say "X is allowed but not Y" in many situations.

One thing we can say for sure is that in a middle of a multi-step
operation (e.g. rebase, range pick) is stopped for either one of the
two reasons, you cannot do another multi-step operation.  This is
not fundamental but a consequence of how the sequencing machinery is
implemented.  But other than that, it really is case-by-case and not
even command-by-command.

      reply	other threads:[~2015-01-07 16:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-06 16:05 Additional plumbing commands Charles Rudolph
2015-01-06 17:37 ` Christian Couder
2015-01-07  8:04   ` Jeff King
2015-01-07 16:31     ` Junio C Hamano [this message]

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=xmqqa91ulfhz.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=charles.w.rudolph@gmail.com \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.