Subject: bug#12019: closed (Re: bug#12019: join command - wrong column moved to start of line with)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 23 Jul 2012 09:08:03 +0000

Your bug report

#12019: join command - wrong column moved to start of line with the -v2 option

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
12019: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12019
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#12019: join command - wrong column moved to start of line with
From: Pádraig Brady <[email-masked]>
To: Alan Curry <[email-masked]>
Cc: Jean-Pierre Tosoni <[email-masked]>, Eric Blake <[email-masked]>, [email-masked]
Date: Mon, 23 Jul 2012 10:01:05 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

On 07/22/2012 12:22 AM, Alan Curry wrote:
> Eric Blake writes:
>>
>> On 07/21/2012 12:20 PM, Jean-Pierre Tosoni wrote:
>>> Hello Maintainer,
>>> =20
>>> I am using join v8.5 from debian squeeze.
>>> =20
>>
>>> now, the command:
>>>    join   -v 2   -1 2   -2 3   a   b
>>> produces
>>> =3D=3D=3D=3D wrong output =3D=3D=3D=3D
>>> zzz222 zzz111 keyZ zzz333
>>
>> I tried reproducing this with coreutils 8.17:
>>
>> $ cat a b
>> axx111 keyX axx222
>> ayy111 keyY ayy222
>> xxx111 xxx222 keyX xxx333
>> zzz111 zzz222 keyZ zzz333
>> $ join -v2 -1 2 -2 3 a b
>> keyZ zzz111 zzz222 zzz333
>>
>> but I get the expected order.  I don't see a specific mention of a fix
>> for this in NEWS, so I have to wonder if this might be a bug in a
>> debian-specific patch.  Can you do some more investigating, such as
>> compiling upstream coreutils to see if the problem still persists for you=
>> ?
> 
> It's not a Debian-specific problem. I can reproduce the bug with unaltered
> coreutils 8.9. It was apparently fixed by accident as a side effect of some
> other work on the join program.
> 
> commit d4db0cb1827730ed5536c12c0ebd024283b3a4db
> Author: PÃ¡draig Brady <[email-masked]>
> Date:   Wed Jan 5 11:52:54 2011 +0000
> 
>     join: add -o 'auto' to output a constant number of fields per line
> 
> d4db0cb1827730ed5536c12c0ebd024283b3a4db can be cherry-picked and applied to
> older coreutils to fix the bug. I tested this with upstream 8.9 and Debian's
> 8.5, both applied with fuzz but worked correctly.
> 

Thanks for looking into that Alan, and thanks for reporting this Jean-Pierre.
I've installed the attached to document the fix and add a test.

cheers,
Pádraig.

>From d75e93cb76c504e766e317ea0891285e4510ae67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email-masked]>
Date: Mon, 23 Jul 2012 09:29:57 +0100
Subject: [PATCH] tests: add a test for a previously fixed output format bug
 in join

Add a test and NEWS entry for a bug inadvertently fixed in
a refactoring in commit v8.9-32-gd4db0cb

* tests/misc/join (v2-format): Add a new test.
* THANKS.in: Add the reporter.
* NEWS: Mention the old bug.
* cfg.mk (old_NEWS_hash): Update.

Reported-by: Jean-Pierre Tosoni
---
 NEWS            |    4 ++++
 THANKS.in       |    1 +
 cfg.mk          |    2 +-
 tests/misc/join |    4 ++++
 4 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/NEWS b/NEWS
index 113b30a..f1255ea 100644
--- a/NEWS
+++ b/NEWS
@@ -477,6 +477,10 @@ GNU coreutils NEWS                                    -*- outline -*-
   join --header now skips the ordering check for the first line
   even if the other file is empty.  [bug introduced in coreutils-8.5]
 
+  join -v2 now ensures the default output format prints the match field
+  at the start of the line when it is different to the match field for
+  the first file. [bug present in "the beginning".]
+
   rm -f no longer fails for EINVAL or EILSEQ on file systems that
   reject file names invalid for that file system.
 
diff --git a/THANKS.in b/THANKS.in
index dc0b9dd..5db443b 100644
--- a/THANKS.in
+++ b/THANKS.in
@@ -275,6 +275,7 @@ Jari Aalto                          [email-masked]
 Jarkko Hietaniemi                   [email-masked]
 Jarod Wilson                        [email-masked]
 Jean Charles Delepine               [email-masked]
+Jean-Pierre Tosoni                  [email-masked]
 Jeff Moore                          [email-masked]
 Jeff Sheinberg                      [email-masked]
 Jens Elkner                         [email-masked]
diff --git a/cfg.mk b/cfg.mk
index f780511..261efa5 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -45,7 +45,7 @@ export VERBOSE = yes
 # 4914152 9e
 export XZ_OPT = -8e
 
-old_NEWS_hash = 4f70c9ef883feff18d9d5f66a941f3a8
+old_NEWS_hash = 38cad4d11c6ce866fc52213e3a4dc437
 
 # Add an exemption for sc_makefile_at_at_check.
 _makefile_at_at_check_exceptions = ' && !/^cu_install_program =/'
diff --git a/tests/misc/join b/tests/misc/join
index a3fd1a8..62074b7 100755
--- a/tests/misc/join
+++ b/tests/misc/join
@@ -147,6 +147,10 @@ my @tv = (
  ["a,1,,2\nb,1,2\n", "a,3,4\nb,3,4\n"],
  "a,1,,2,3,4\nb,1,2,,3,4\n"],
 
+# For -v2, print the match field correctly with the default output format,
+# when that match field is different between file 1 and file 2.  Fixed in 8.10
+['v2-order', '-v2 -2 2', ["", "2 1\n"], "1 2\n", 0],
+
 # From Tim Smithers: fixed in 1.22l
 ['trailing-sp', '-t: -1 1 -2 1', ["a:x \n", "a:y \n"], "a:x :y \n", 0],
 
-- 
1.7.6.4

Subject: join command - wrong column moved to start of line with the -v2 option
From: Jean-Pierre Tosoni <[email-masked]>
To: [email-masked]
Date: Sat, 21 Jul 2012 20:20:38 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello Maintainer,

I am using join v8.5 from debian squeeze.

When using the -v2 option with different join fields in files 1 and 2, the
join field which gets moved to the beginning of the result lines is the one
identified by the -1 option, not the one identified by the -2 option.

Here are my test files:
==== file a ====
axx111  keyX    axx222
ayy111  keyY    ayy222

==== file b ====
xxx111  xxx222  keyX    xxx333
zzz111  zzz222  keyZ    zzz333

now, the command:
   join   -v 2   -1 2   -2 3   a   b
produces
==== wrong output ====
zzz222 zzz111 keyZ zzz333

instead of
==== expected output ====
keyZ zzz111 zzz222 zzz333

The two following other commands work as expected:
   join    -v 1    -1 2    -2 3    a b
   join    -1 2    -2 3    a b

I did not find this problem in your database - or am I mistaken ?
Best regards,

-- 
Jean-Pierre Tosoni