From: Junio C Hamano <gitster@pobox.com>
To: Johannes Sixt <j6t@kdbg.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 7/7] push: document --lockref
Date: Sat, 13 Jul 2013 13:08:09 -0700 [thread overview]
Message-ID: <7vr4f2gr4m.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <7vwqougwec.fsf@alter.siamese.dyndns.org> (Junio C. Hamano's message of "Sat, 13 Jul 2013 11:14:19 -0700")
Junio C Hamano <gitster@pobox.com> writes:
> If "--lockref" automatically implies "--allow-no-ff" (the design in
> the reposted patch), you cannot express that combination. But once
> you use "--lockref" in such a situation , for the push to succeed,
> you know that the push replaces not just _any_ ancestor of what you
> are pushing, but replaces the exact current value. So I do not think
> your implicit introduction of --allow-no-ff via redefining the
> semantics of the plus prefix is not adding much value (if any),
> while making the common case less easy to use.
>
>> No; --lockref only adds the check that the destination is at the
>> expected revision, but does *NOT* override the no-ff check.
>
> You _could_ do it in that way, but that is less useful.
Another issue I have with the proposal is that we close the door to
"force only this one" convenience we have with "+ref" vs "--force
ref". Assuming that it is useful to require lockref while still
making sure that the usual "must fast-forward" rule is followed (if
that is not the case, I do not see a reason why your proposal is any
useful---am I missing something?), I would prefer to allow users a
way to decorate this basic syntax to say:
git push --lockref master jch pu
things like
(1) pu may not fast-forward and please override that "must
fast-forward" check from it, while still keeping the lockref
safety (e.g. "+pu" that does not --force, which is your
proposal);
(2) any of them may not fast-forward and please override that "must
fast-forward" check from it, while still keeping the lockref
safety (without adding "--allow-no-ff", I do not see how it is
possible with your proposal, short of forcing user to add "+"
everywhere);
(3) I know jch does not fast-forward so please override the "must
fast-forward", but still apply the lockref safety, pu may not
even satisfy lockref safety so please force it (as the "only
force this one" semantics is removed from "+", I do not see how
it is possible with your proposal).
So I would understand if your proposal _were_ to
* add "--allow-no-ff" option;
* change the meaning of "+ref" to "--allow-no-ff for only this
ref"; and
* add a new "*ref" (or whatever new syntax) to still allow people
to say "--force only this ref".
but we still need to assume that it makes sense to ask lockref but
still want to ensure the update fast-forwards. I personally do not
think it does [*1*].
The semantics the posted patch (rerolled to allow "--force" push
anything) implements lets "--lockref" to imply "--allow-no-ff" and
that makes it much simpler; we do not have to deal with any of the
above complexity.
[Footnote]
*1* The assurance --lockref gives is a lot stronger than "must
fast-forward". You may have fetched the topic whose tip was at
commit X, and rebased it on top of X~4 to create a new history
leading to Y.
o----o----Y
/
o---o----o----o----o----X
X~4
When you "git push --lockref=topic:X Y:X", you are requiring
their tip to be still at X. Other people's change cannot be to
add something on top of X (which will be lost if we replace the
tip of the topic with Y).
If your change were not a rebase but to build one of you own:
o---o----o----o----o----X---Y
your "git push --lockref=topic:X Y:X" still requires the tip is
at X. If somebody rewound the tip to X~2 in the meantime
(because they decided the tip 2 commits were not good), your
"git push Y:X" without the "--lockref" will lose their rewind,
because Y will still be a fast-forward update of X~2.
"--lockref=topic:X" will protect you in this case as well.
So I think "--lockref" that automatically disables "must
fast-forward" check is the right thing to do, as we are
replacing the weaker "must fast-forward" with something
stronger. I do not think we are getting anything from forcing
the user to say "--allow-no-ff" with "+ref" syntax when the
user says "--lockref". It is not making it safer, and it is
making it less convenient.
next prev parent reply other threads:[~2013-07-13 20:08 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-02 20:57 [RFD] Making "git push [--force/--delete]" safer? Junio C Hamano
2013-07-02 22:55 ` Johan Herland
2013-07-03 6:34 ` Johan Herland
2013-07-03 8:49 ` Junio C Hamano
2013-07-03 10:00 ` Johan Herland
2013-07-03 10:06 ` Jonathan del Strother
2013-07-03 10:11 ` Johan Herland
2013-07-03 10:50 ` Michael Haggerty
2013-07-03 12:06 ` Johannes Sixt
2013-07-03 19:53 ` Junio C Hamano
2013-07-04 5:37 ` Johannes Sixt
2013-07-04 5:46 ` Junio C Hamano
2013-07-03 19:50 ` Junio C Hamano
2013-07-03 20:18 ` Junio C Hamano
2013-07-03 19:48 ` Junio C Hamano
2013-07-09 19:53 ` [PATCH 0/7] safer "push --force" with compare-and-swap Junio C Hamano
2013-07-09 19:53 ` [PATCH 1/7] cache.h: move remote/connect API out of it Junio C Hamano
2013-07-09 19:53 ` [PATCH 2/7] builtin/push.c: use OPT_BOOL, not OPT_BOOLEAN Junio C Hamano
2013-07-09 19:53 ` [PATCH 3/7] push: beginning of compare-and-swap "force/delete safety" Junio C Hamano
2013-07-09 19:53 ` [PATCH 4/7] remote.c: add command line option parser for --lockref Junio C Hamano
2013-07-16 22:13 ` John Keeping
2013-07-17 17:06 ` Junio C Hamano
2013-07-17 17:09 ` Junio C Hamano
2013-07-09 19:53 ` [PATCH 5/7] push --lockref: implement logic to populate old_sha1_expect[] Junio C Hamano
2013-07-09 19:53 ` [PATCH 6/7] t5533: test "push --lockref" Junio C Hamano
2013-07-09 19:53 ` [PATCH 7/7] push: document --lockref Junio C Hamano
2013-07-09 20:17 ` Aaron Schrab
2013-07-09 20:39 ` Junio C Hamano
2013-07-09 20:24 ` Johannes Sixt
2013-07-09 20:37 ` Junio C Hamano
2013-07-09 20:55 ` Johannes Sixt
2013-07-09 22:09 ` Junio C Hamano
2013-07-09 23:08 ` Junio C Hamano
2013-07-11 21:10 ` Johannes Sixt
2013-07-11 21:57 ` Junio C Hamano
2013-07-11 22:14 ` Junio C Hamano
2013-07-12 17:21 ` Johannes Sixt
2013-07-12 17:40 ` Junio C Hamano
2013-07-12 20:00 ` Johannes Sixt
2013-07-12 21:19 ` Junio C Hamano
2013-07-13 6:52 ` Johannes Sixt
2013-07-13 18:14 ` Junio C Hamano
2013-07-13 20:08 ` Junio C Hamano [this message]
2013-07-13 21:11 ` Johannes Sixt
2013-07-14 14:28 ` John Keeping
2013-07-13 20:17 ` Johannes Sixt
2013-07-14 19:17 ` Junio C Hamano
2013-07-14 20:21 ` Johannes Sixt
2013-07-14 20:34 ` Jonathan Nieder
2013-07-14 20:49 ` Jonathan Nieder
2013-07-14 20:59 ` Johannes Sixt
2013-07-14 21:28 ` Jonathan Nieder
2013-07-15 4:10 ` Junio C Hamano
2013-07-15 4:44 ` Jonathan Nieder
2013-07-15 15:37 ` Junio C Hamano
2013-07-15 20:30 ` Johannes Sixt
2013-07-15 3:50 ` Junio C Hamano
2013-07-15 15:47 ` Default expectation of --lockref Junio C Hamano
2013-07-15 20:27 ` [PATCH 7/7] push: document --lockref Johannes Sixt
2013-07-09 21:37 ` Marc Branchaud
2013-07-09 20:27 ` Michael Haggerty
2013-07-09 20:42 ` 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=7vr4f2gr4m.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
/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.