On 3 July 2013 11:00, Johan Herland <johan@xxxxxxxxxxx> wrote: > On Wed, Jul 3, 2013 at 10:49 AM, Junio C Hamano <gitster@xxxxxxxxx> wrote: >> Johan Herland <johan@xxxxxxxxxxx> writes: >>> Overnight, it occured to me that --force-if-expected could be >>> simplified by leveraging the existing --force option; for the above >>> two examples, respectively: >>> >>> $ git push --force --expect >>> # validate foo @ origin == @{upstream} before pushing >>> >>> and >>> >>> $ git push --force --expect=refs/original/foo my_remote HEAD:foo >>> # validate foo @ my_remote == refs/original/foo before pushing >> >> First, on the name. >> >> I do not think either "--validate" or "--expect" is particularly a >> good one. The former lets this feature squat on a good name that >> covers a much broader spectrum, forbidding people from adding other >> kinds of validation later. "--expect" is slightly less bad in that >> sense; saying "we expect this" does imply "otherwise it is an >> unexpected situation and we would fail", but the name still does not >> feel ideal. >> >> What is the essense of compare-and-swap? Perhaps we can find a good >> word by thinking that question through. >> >> To me, it is a way to implement a "lock" on the remote ref without >> actually taking a lock (which would leave us open for a stale lock), >> and this "lock"-ness is what we want in order to guarantee safety. >> >> So we could perhaps call it "--lockref"? >> >> I'll leave the name open but tentatively use this name in the >> following, primarily to see how well it sits on the command line >> examples. > > I agree that neither --expect nor --validate are very good. I also > don't like --lockref, mostly because there is no locking involved, and > I think most users will jump to an incorrect conclusion about what > this option does, unless they read the documentation. > > Some other suggestions: > > a) --update-if. I think this reads quite nicely in the fully specified > variant: --update-if=theirRefName:expectedValue, but it becomes more > cryptic when defaults are assumed (i.e. --update-if without any > arguments). > > b) --precond. This makes it clear that we're specifying a precondition > on the push. Again, I think the fully specified version reads nicely, > but it might seem a little cryptic when no arguments are given. > > c) --pre-verify, --pre-check are merely variations on (b), other > variations include --pre-verify-ref or --pre-check-ref, making things > more explicit at the cost of option name length. I'm struggling to think of instances where I wouldn't want this CAS-like behaviour. Wouldn't it be better to make it the default when pushing, and allowing the current behaviour with "git push --blind-force" or something? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html