From: Junio C Hamano <gitster@pobox.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org, Jens Lehmann <Jens.Lehmann@web.de>,
Heiko Voigt <hvoigt@hvoigt.net>
Subject: Re: [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules
Date: Thu, 13 Nov 2014 23:49:16 -0800 [thread overview]
Message-ID: <xmqq1tp643yb.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <xmqqzjbuzu6t.fsf@gitster.dls.corp.google.com> (Junio C. Hamano's message of "Thu, 13 Nov 2014 13:06:50 -0800")
Junio C Hamano <gitster@pobox.com> writes:
>> I agree that a new value "mergeInstead" or something should be
>> invented when/if different workflows want a looser semantics.
>> People would rely not only on "being able to push when clean" but
>> also on "being safely prevented from pushing when not" (and that is
>> where my earlier comment to test both sides comes from). Loosening
>> the check to an existing "updateInstead" would break users who have
>> been using updateInstead.
>
> And thinking about the names again, I have a feeling that
> updateInstead and mergeInstead are both probably misnomer.
Let me take this part back. After all, I do not think I would
design the mechanism to implement an alternative logic that decides
when it is safe to allow the update of the ref and to reflect the
changes to the working tree, and that actually does the checkout to
the working tree by using a new value like mergeInstead. So we
would only need a single name, and updateInstead is not too bad.
The word "update" is so heavily loaded in the context of accepting a
push (i.e. it is unclear what update we are talking about---updating
the ref that we normally refuse to update? updating the index?
updating the working tree? Some combination of them?), so as a
single word, "checkoutInstead" may probably be a better one, though.
Upon hearing "checkout", by definition anybody would know that we
are involving the working tree.
The mechanism I would employ when doing an alternative logic,
possibly looser one but does not necessarily so, would be to have a
hook script "push-to-checkout". When denyCurrentBranch is set to
updateInstead, if there is no such hook, the "working tree has to be
absolutely clean and we would do a 'read-tree -m -u $old $new'
(which is the same as 'reset --hard $new' under the precondition)"
you implemented will be used as the "logic that decides when it is
safe, and that does the checkout to the working tree". When the
"push-to-checkout" hook exists, however, we just invoke that hook
with $new as argument, and it can decide when it is safe in whatever
way it chooses to, and it can checkout the $new to the working tree
in whatever way it wants. The users of "mergeInstead" (now a dead
and unnecessary name) mode would just have a single-liner
#!/bin/sh
git reset --keep "$1" --
in there, as this single command would both decide when it is safe
and does the safe (according to its own definition) updating of the
working tree.
In your other example (not the "deploy to live website" one) of
unidirectional SSH connection, you would be able to connect from
machine A to machine B but not the other way, so while sitting on
machine A you would typically have one SSH session to have an
interactive shell session running on machine B. You may have local
modification on machine B but your changes to history on machine A
cannot be pulled, so you would emulate it by pushing from A into B.
In such a case, unlike the "live website" example, it would be
useful to loosen the condition even more than "reset --keep" (which
is an equivalent of "checkout -B $current_branch $new_commit").
In such a case, what you want to do is to simulate "git pull" that
could conflict and give you a chance to resolve with a push in the
reverse direction. You want to run an equivalent of the same
"checkout -B" command but with the "-m" option when accepting such a
push.
There are other definitions of what is safe and how update should
happen depending on the user, and such a logic can be placed in the
push-to-checkout hook without harming other users.
next prev parent reply other threads:[~2014-11-14 7:49 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-07 13:58 [PATCH 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-07 13:58 ` [PATCH 1/2] Add a few more values for receive.denyCurrentBranch Johannes Schindelin
2014-11-07 18:49 ` Junio C Hamano
2014-11-07 18:58 ` Johannes Schindelin
2014-11-10 12:54 ` Johannes Schindelin
2014-11-10 16:00 ` Junio C Hamano
2014-11-12 11:13 ` Johannes Schindelin
2014-11-12 18:00 ` Junio C Hamano
2014-11-08 11:18 ` Jeff King
2014-11-08 18:48 ` brian m. carlson
2014-11-10 13:03 ` Johannes Schindelin
2014-11-07 13:58 ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Johannes Schindelin
2014-11-07 19:20 ` Junio C Hamano
2014-11-09 16:42 ` Jens Lehmann
2014-11-10 13:04 ` Johannes Schindelin
2014-11-10 13:01 ` Johannes Schindelin
2014-11-10 15:42 ` Junio C Hamano
2014-11-10 19:32 ` Junio C Hamano
2014-11-12 11:09 ` Johannes Schindelin
2014-11-12 17:59 ` Junio C Hamano
2014-11-13 10:29 ` Johannes Schindelin
2014-11-13 10:38 ` Johannes Schindelin
2014-11-13 17:41 ` Junio C Hamano
2014-11-13 18:55 ` Johannes Schindelin
2014-11-13 19:48 ` Junio C Hamano
2014-11-13 21:06 ` Junio C Hamano
2014-11-14 7:49 ` Junio C Hamano [this message]
2014-12-02 3:24 ` Junio C Hamano
2014-12-02 3:25 ` [PATCH 2/2] receive-pack: support push-to-checkout hook Junio C Hamano
2014-12-02 8:47 ` Johannes Schindelin
2014-12-02 13:03 ` Michael J Gruber
2014-12-02 13:25 ` Johannes Schindelin
2014-12-02 16:39 ` Junio C Hamano
2014-12-02 16:45 ` Johannes Schindelin
2014-12-02 17:00 ` Junio C Hamano
2014-12-02 17:12 ` Johannes Schindelin
2014-12-02 17:19 ` Junio C Hamano
2014-11-13 17:41 ` [PATCH 2/2] Let deny.currentBranch=updateInstead ignore submodules Junio C Hamano
2014-11-12 11:06 ` Johannes Schindelin
2014-11-10 14:38 ` [PATCH v2 0/2] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-13 11:03 ` [PATCH v3 0/1] " Johannes Schindelin
2014-11-13 11:03 ` [PATCH v3 1/1] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-13 17:51 ` Junio C Hamano
2014-11-13 19:21 ` Johannes Schindelin
2014-11-13 17:47 ` [PATCH v3 0/1] Support updating working trees when pushing into non-bare repos Junio C Hamano
2014-11-13 19:11 ` Junio C Hamano
2014-11-13 19:18 ` Johannes Schindelin
2014-11-26 20:21 ` [PATCH v4] " Johannes Schindelin
2014-11-26 20:21 ` [PATCH v4] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-11-26 21:02 ` Junio C Hamano
2014-11-26 22:44 ` [PATCH v5] Support updating working trees when pushing into non-bare repos Johannes Schindelin
2014-11-26 22:44 ` [PATCH v5] Add another option for receive.denyCurrentBranch Johannes Schindelin
2014-12-01 3:18 ` Junio C Hamano
2014-12-01 7:44 ` Johannes Schindelin
2014-12-01 23:49 ` Junio C Hamano
2014-12-02 0:51 ` Junio C Hamano
2014-12-02 8:21 ` Johannes Schindelin
2014-12-02 16:20 ` Junio C Hamano
2014-12-02 16:51 ` Johannes Schindelin
2014-12-02 17:23 ` Junio C Hamano
[not found] ` <cover.1415630072.git.johannes.schindelin@gmx.de>
2014-11-10 14:38 ` [PATCH v2 1/2] Clean stale environment pointer in finish_command() Johannes Schindelin
2014-11-10 14:41 ` Johannes Schindelin
2014-11-11 3:16 ` Jeff King
2014-11-11 15:55 ` Junio C Hamano
2014-11-12 10:45 ` Johannes Schindelin
2014-11-12 10:52 ` Jeff King
2014-11-12 10:59 ` Jeff King
2014-11-12 16:17 ` Junio C Hamano
2014-11-10 21:44 ` Junio C Hamano
2014-11-11 3:11 ` Jeff King
2014-11-10 14:38 ` [PATCH v2 2/2] Add a few more options for receive.denyCurrentBranch Johannes Schindelin
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=xmqq1tp643yb.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=hvoigt@hvoigt.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.