All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jonathan Nieder <jrnieder@gmail.com>
Cc: "SZEDER Gábor" <szeder@ira.uka.de>,
	"Felipe Contreras" <felipe.contreras@gmail.com>,
	"Jeff King" <peff@peff.net>,
	git@vger.kernel.org
Subject: Re: [PATCH 0/4] Re: [PATCH 3/4] t: rev-parse-parents: avoid yoda conditions
Date: Wed, 04 Sep 2013 09:47:12 -0700	[thread overview]
Message-ID: <xmqqli3co7ov.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <20130903170419.GA29921@google.com> (Jonathan Nieder's message of "Tue, 3 Sep 2013 10:04:19 -0700")

Jonathan Nieder <jrnieder@gmail.com> writes:

> test_cmp_rev follows the same order of arguments a "diff -u" and
> produces the same output as plain "git diff".  It's perfectly readable
> and normal.

This is way off tangent, but I am somewhat sympathetic to Felipe's
"compare actual with expect", with reservations.

If one ignores all other constraints and focuses solely on the order
of argument test_cmp takes, one would realize that it is backwards.
A(ny) sanely defined "compare A with B" function should yield the
result of subtracting B from A, i.e. cmp(A,B) should be like (A-B).
That is what you feed qsort() and bsearch() (it is not limited to C;
you see the same in "sort { $a <=> $b }").  The definition naturally
makes "cmp(A,B) < 0" like "A < B" and "cmp(A,B) > 0" like "A > B".

But unfortunately, test_cmp is defined in terms of "diff -u" by
feeding its parameters in the same order as given.  "test_cmp A B"
just turns into "diff -u A B".

Now, we _do_ want to see "diff -u expect actual", so that in the
output, what is _missing_ in the actual output compared to the
expected output is marked with "-", and what is _excess_ is marked
with "+".  If you think about it, this output from "diff -u expect
actual" is giving us the result of subtracting expect from actual.

If we want to express it in terms of "cmp", we should be writing
"cmp(actual,expect)", not "cmp(expect,actual)".  The latter is to
subtract actual from expect, which is backwards.

It would have been better if a wrapper around "diff" to give us a
higher level "comparison" semantics, test_cmp, had been written in
such a way that hid this backward behaviour of "diff", when it was
introduced to replace hardcoded "diff -u".

I'd actually be ecstatic if one morning when I get up, I find that
test_cmp implementation were replaced with (the moral equivalent of)

	test_cmp () {
		diff -u "$2" "$1"
	}

and all the callsites of test_cmp in the test scripts in all the
topic branches in flight were also swapped to "test_cmp actual
expect" without anybody having to worry about mismerges, merge
conflicts and confusing people who are used to the current order for
the past 5 years.

But I do not think that is going to happen without a careful
planning.  We may be able to manage the code somehow (we can drop
all the topics in flight immediately after a release, apply the
"swap the order" big patch, and rebase all the topics on top), but
retraining people would not be instantaneous "flag day" event, and
we will see mistakes for a few months after doing so.

Oh, well.

  parent reply	other threads:[~2013-09-04 16:47 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-02  6:30 [PATCH 0/4] t: rev-parse-parents: cleanups Felipe Contreras
2013-09-02  6:30 ` [PATCH 1/4] t: rev-parse-parents: fix style Felipe Contreras
2013-09-02  6:30 ` [PATCH 2/4] t: rev-parse-parents: fix weird ! notation Felipe Contreras
2013-09-02  6:30 ` [PATCH 3/4] t: rev-parse-parents: avoid yoda conditions Felipe Contreras
2013-09-03  7:12   ` Jeff King
2013-09-03  7:51     ` SZEDER Gábor
2013-09-03  8:03       ` Jeff King
2013-09-03 10:45         ` Felipe Contreras
2013-09-03 11:10           ` SZEDER Gábor
2013-09-03 13:39             ` Felipe Contreras
2013-09-03 15:08               ` SZEDER Gábor
2013-09-03 17:04                 ` [PATCH 0/4] " Jonathan Nieder
2013-09-03 17:05                   ` [PATCH 1/4] rev-parse test: modernize quoting and whitespace Jonathan Nieder
2013-09-03 17:06                   ` [PATCH 2/4] rev-parse test: use test_must_fail, not "if <command>; then false; fi" Jonathan Nieder
2013-09-03 21:56                     ` Felipe Contreras
2013-09-03 17:07                   ` [PATCH 3/4] rev-parse test: use test_cmp instead of "test" builtin Jonathan Nieder
2013-09-03 20:01                     ` Junio C Hamano
2013-09-04  4:28                       ` Jonathan Nieder
2013-09-03 22:01                     ` Felipe Contreras
2013-09-03 17:11                   ` [PATCH 4/4] rev-parse test: use standard test functions for setup Jonathan Nieder
2013-09-03 17:15                     ` [PATCH v2 " Jonathan Nieder
2013-09-03 17:20                   ` [PATCH 0/4] Re: [PATCH 3/4] t: rev-parse-parents: avoid yoda conditions Jeff King
2013-09-03 21:53                   ` Felipe Contreras
2013-09-04 16:47                   ` Junio C Hamano [this message]
2013-09-04 17:13                     ` John Keeping
2013-09-04 17:38                       ` Junio C Hamano
2013-09-04 18:36                         ` Jeff King
2013-09-04 19:14                           ` Junio C Hamano
2013-09-08  3:11                           ` Felipe Contreras
2013-09-08  4:06                             ` Jeff King
2013-09-08  4:13                               ` Felipe Contreras
2013-09-08  4:14                                 ` Felipe Contreras
2013-09-08  4:26                                 ` Jeff King
2013-09-08  4:52                                   ` Felipe Contreras
2013-09-08  5:02                                     ` Jeff King
2013-09-08 23:25                                       ` Felipe Contreras
2013-09-08 23:45                                         ` Jeff King
2013-09-09  0:45                                           ` Felipe Contreras
2013-09-08 18:33                                   ` Junio C Hamano
2013-09-08 23:18                                     ` Felipe Contreras
2013-09-08  8:11                               ` Philip Oakley
2013-09-03 17:31               ` Junio C Hamano
2013-09-03 17:33                 ` Junio C Hamano
2013-09-03 21:52                 ` Felipe Contreras
2013-09-02  6:30 ` [PATCH 4/4] t: rev-parse-parents: simplify setup Felipe Contreras

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=xmqqli3co7ov.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=felipe.contreras@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=jrnieder@gmail.com \
    --cc=peff@peff.net \
    --cc=szeder@ira.uka.de \
    /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.