Subject: bug#9236: Fwd: Join

From: Jim Meyering <[email-masked]>
Date: Sat, 06 Aug 2011 22:42:37 +0200

Jim Meyering wrote:

> Jim Meyering wrote:
> ...
>> I started looking at this, and among other things saw
>> a diagnostic that mentioned "file 1", which would do
>> much better to mention the actual file name, so embarked.
>> Here's a preliminary patch (not even a decent ChangeLog entry
>> and the join test still needs to be updated):
>>
>>     $ printf '%s\n' b a c > in
>>     $ ./join --check-order in in
>>     ./join: in:2: is not sorted: a
>>     [Exit 1]
>>
>> Subject: [PATCH] join: FIXME: check: print both file name and line number
>>
>> ---
>>  src/join.c |   29 +++++++++++++++++++----------
>>  1 files changed, 19 insertions(+), 10 deletions(-)
>
> Here's a much better patch.
>
>>>From 2e4ca5100dcc3229e9937c48aed3dc475bb507ea Mon Sep 17 00:00:00 2001
> From: Jim Meyering <[email-masked]>
> Date: Thu, 4 Aug 2011 19:31:50 +0200
> Subject: [PATCH] join: with --check-order print offending file name, line
>  number and data
>
> * src/join (g_names): New global (was main's "names").
> (main): Update all uses of "names".
> (line_no[2]): New globals.
> (get_line): Increment after reading each line.
> (check_order): Print the standard "file name:line_no: " prefix
> as well as the offending line when reporting disorder.
> Here is a sample old/new comparison:
>   -join: file 1 is not in sorted order
>   +join: in:4: is not sorted: contents-of-line-4
> * tests/misc/join: Change the two affected tests to expect
> the new diagnostic.
> Add new tests for more coverage: mismatch in file 2,
> two diagnostics, zero-length out-of-order line.
> * NEWS (Improvements): Mention it.

Nearly forgot.
While coding, I considered the case of an
offending line with no trailing newline,
but hadn't tested it.  Just folded this in:

diff --git a/tests/misc/join b/tests/misc/join
index d6528da..a892a10 100755
--- a/tests/misc/join
+++ b/tests/misc/join
@@ -214,6 +214,12 @@ my @tv = (
  "$prog: chkodr-5d.1:3: is not sorted: \n" .
  "$prog: chkodr-5d.2:3: is not sorted: \n"],

+# Similar, but make it so each offending line has no newline.
+['chkodr-5e', '',
+ ["a\nx\no", "b\ny\np"], "", 1,
+ "$prog: chkodr-5e.1:3: is not sorted: o\n" .
+ "$prog: chkodr-5e.2:3: is not sorted: p\n"],
+
 # Without order check, both inputs out of order and some lines
 # unpairable.  This is NOT supported by the GNU extension.  All that
 # we really care about for this test is that the return status is