GNU bug report logs - #71803
ls --time=mtime is sorting by name instead of mtime

Previous Next

Package: coreutils;

Reported by: Dave <dmisc2 <at> gmail.com>

Date: Thu, 27 Jun 2024 15:21:02 UTC

Severity: normal

Done: Pádraig Brady <P <at> draigBrady.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: help-debbugs <at> gnu.org (GNU bug Tracking System)
To: Dave <dmisc2 <at> gmail.com>
Subject: bug#71803: closed (Re: bug#71803: ls --time=mtime is sorting by
 name instead of mtime)
Date: Thu, 27 Jun 2024 17:53:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report

#71803: ls --time=mtime is sorting by name instead of mtime

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 71803 <at> debbugs.gnu.org.

-- 
71803: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=71803
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Pádraig Brady <P <at> draigBrady.com>
To: Dave <dmisc2 <at> gmail.com>, 71803-done <at> debbugs.gnu.org
Subject: Re: bug#71803: ls --time=mtime is sorting by name instead of mtime
Date: Thu, 27 Jun 2024 18:51:13 +0100
[Message part 3 (text/plain, inline)]
On 27/06/2024 16:05, Dave wrote:
> The ls command without the -l option and with the --time=mtime option,
> is incorrectly sorting by the name rather than by the modification
> time.
> 
> ls               # sorts by name (ok)
> ls --time=mtime  # sorts by name (should sort by mtime)

> // The current statement in ls.c (lines 2383-2387)
>    sort_type = (0 <= sort_opt ? sort_opt
>                 : (format != long_format
>                    && (time_type == time_ctime || time_type == time_atime
>                        || time_type == time_btime))
>                 ? sort_time : sort_name);
> 
> // Proposed correction (untested)
>    sort_type = (0 <= sort_opt ? sort_opt
>                 : (format != long_format
>                    && (time_type == time_ctime || time_type == time_atime
>                        || time_type == time_btime || time_type == time_mtime))
>                 ? sort_time : sort_name);

Right, we should be applying this GNU extension to --time=mtime also.
I.e. sorting when not displaying time (-l not specified),
and no other sorting specific option is used.

The proposed fix wouldn't work as time_mtime is the default,
so we'd be sorting by mtime rather than name by default.

I'll apply the attached later to address this.

Marking this as done.

thanks,
Pádraig
[ls--time=mtime-sort.diff (text/x-patch, attachment)]
[Message part 5 (message/rfc822, inline)]
From: Dave <dmisc2 <at> gmail.com>
To: bug-coreutils <at> gnu.org
Subject: ls --time=mtime is sorting by name instead of mtime
Date: Thu, 27 Jun 2024 11:05:51 -0400
The ls command without the -l option and with the --time=mtime option,
is incorrectly sorting by the name rather than by the modification
time.

ls               # sorts by name (ok)
ls --time=mtime  # sorts by name (should sort by mtime)
ls --time=ctime  # sorts by ctime (ok)
ls --time=atime  # sorts by atime (ok)
ls --time=birth  # sorts by birth (ok)

ls -c               # sorts by ctime (ok)
ls -c --time=mtime  # sorts by name (should sort by mtime)
ls -c --time=ctime  # sorts by ctime (ok)
ls -c --time=atime  # sorts by atime (ok)
ls -c --time=birth  # sorts by birth (ok)

ls -u               # sorts by atime (ok)
ls -u --time=mtime  # sorts by name (should sort by mtime)
ls -u --time=ctime  # sorts by ctime (ok)
ls -u --time=atime  # sorts by atime (ok)
ls -u --time=birth  # sorts by birth (ok)

// The current statement in ls.c (lines 2383-2387)
  sort_type = (0 <= sort_opt ? sort_opt
               : (format != long_format
                  && (time_type == time_ctime || time_type == time_atime
                      || time_type == time_btime))
               ? sort_time : sort_name);

// Proposed correction (untested)
  sort_type = (0 <= sort_opt ? sort_opt
               : (format != long_format
                  && (time_type == time_ctime || time_type == time_atime
                      || time_type == time_btime || time_type == time_mtime))
               ? sort_time : sort_name);

ls (GNU coreutils) 9.4

Linux 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20
00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux



This bug report was last modified 325 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.