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: Pádraig Brady <P <at> draigBrady.com>
Cc: tracker <at> debbugs.gnu.org
Subject: bug#71803: closed (ls --time=mtime is sorting by name instead of
 mtime)
Date: Thu, 27 Jun 2024 17:53:01 +0000
[Message part 1 (text/plain, inline)]
Your message dated Thu, 27 Jun 2024 18:51:13 +0100
with message-id <98ba27e7-863f-4f65-96b4-7a2cf6e825dc <at> draigBrady.com>
and subject line Re: bug#71803: ls --time=mtime is sorting by name instead of mtime
has caused the debbugs.gnu.org bug report #71803,
regarding ls --time=mtime is sorting by name instead of mtime
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs <at> 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: 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


[Message part 3 (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 4 (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)]

This bug report was last modified 324 days ago.

Previous Next


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