Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply sort order to files in line and grid outputs #756

Merged
merged 3 commits into from
Mar 29, 2021

Conversation

whonore
Copy link
Contributor

@whonore whonore commented Oct 23, 2020

Fixes #404

@ariasuni
Copy link
Collaborator

Hi, do you think you can fix the merge conflicts so that I can merge your PR?

@whonore whonore force-pushed the fix-sort-arguments branch from 577986f to c8ed693 Compare January 14, 2021 15:04
@whonore
Copy link
Contributor Author

whonore commented Jan 14, 2021

Done. Does it look ok now?

@ariasuni
Copy link
Collaborator

Your changes makes some existing extended tests fail, and the ones you added don’t work either on my computer.

Also you mistyped /testcases/file-names-exts/ as /testcases/file-name-exts/ in one of the tests you added.

failing tests
✘ ‘COLUMNS=100 exa’ with file arguments produces a grid of 3 columns, with full paths
   ✔ command was executed
   ✔ status code matches
   ✘ stdout did not match the file
     Difference between expected and got:
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m10_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m11_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m11_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m11_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m12_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m13_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m1_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m1_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m12_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m12_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m12_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m13_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m13_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m13_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m1_bytes   \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB
     
   ✔ stderr is empty
 ✘ ‘COLUMNS=150 exa’ with file arguments produces a grid of 5 columns, with full paths
   ✔ command was executed
   ✔ status code matches
   ✘ stdout did not match the file
     Difference between expected and got:
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes   \u{1b}[36m/testcases/files/\u{1b}[0m11_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB     \u{1b}[36m/testcases/files/\u{1b}[0m12_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB     \u{1b}[36m/testcases/files/\u{1b}[0m12_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m12_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_bytes
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m10_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_KiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m11_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m13_MiB
    +\u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m11_KiB    
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m12_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m13_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m1_bytes   \u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m1_KiB     \u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m12_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m1_MiB     \u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB
    -\u{1b}[36m/testcases/files/\u{1b}[0m12_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_bytes   \u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB    
     
   ✔ stderr is empty
 ✘ ‘COLUMNS=200 exa’ with file arguments produces a grid of 7 columns, with full paths
   ✔ command was executed
   ✔ status code matches
   ✘ stdout did not match the file
     Difference between expected and got:
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes   \u{1b}[36m/testcases/files/\u{1b}[0m11_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m13_bytes                                                                                                                                           
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB     \u{1b}[36m/testcases/files/\u{1b}[0m11_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_KiB                                                                                                                                             
    +\u{1b}[36m/testcases/files/\u{1b}[0m1_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB     \u{1b}[36m/testcases/files/\u{1b}[0m11_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_MiB                                                                                                                                             
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m10_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m12_bytes                                                                                                                                                                                         
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_KiB                                                                                                                                                                                           
    +\u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m10_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_MiB                                                                                                                                                                                           
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m12_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m1_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m3_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m5_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m7_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m9_bytes                                                                                                                                            
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m1_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_KiB                                                                                                                                              
    -\u{1b}[36m/testcases/files/\u{1b}[0m10_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m12_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m1_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m3_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m5_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m7_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m9_MiB                                                                                                                                              
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m13_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m2_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m4_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m6_bytes  \u{1b}[36m/testcases/files/\u{1b}[0m8_bytes                                                                                                                                                                                         
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_KiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_KiB                                                                                                                                                                                           
    -\u{1b}[36m/testcases/files/\u{1b}[0m11_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m13_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m2_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m4_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m6_MiB    \u{1b}[36m/testcases/files/\u{1b}[0m8_MiB

 ✘ ‘exa -Gr --sort=name *’ sorts by file name in reverse order
   ✔ command was executed
   ✔ status code matches
   ✘ stdout did not match the file
     Difference between expected and got:
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;135mvideo.wmv\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;135mVIDEO.AVI\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;92mMUSIC.OGG\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;92mmusic.mp3\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[1;4;33mMakefile\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;93mlossless.wav\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;93mlossless.flac\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;133mimage.svg\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;133mIMAGE.PNG\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244mfile.tmp\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;105mDOCUMENT.XLSX\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;105mdocument.pdf\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;109mcrypto.signature\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;109mcrypto.asc\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mCOMPRESSED.ZIP\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.txz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tgz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tar.xz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tar.gz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.deb\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;137mcompiled.o\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[0mcompiled.js
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[0mcompiled.coffee
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;137mcompiled.class\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244mbackup~\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244m#SAVEFILE#\u{1b}[0m
    -\u{1b}[38;5;135mvideo.wmv\u{1b}[0m     \u{1b}[38;5;93mlossless.flac\u{1b}[0m  \u{1b}[38;5;109mcrypto.signature\u{1b}[0m   \u{1b}[31mcompressed.tar.gz\u{1b}[0m  \u{1b}[38;5;244mbackup~\u{1b}[0m
    -\u{1b}[38;5;135mVIDEO.AVI\u{1b}[0m     \u{1b}[38;5;133mimage.svg\u{1b}[0m      \u{1b}[38;5;109mcrypto.asc\u{1b}[0m         \u{1b}[31mcompressed.deb\u{1b}[0m     \u{1b}[38;5;244m#SAVEFILE#\u{1b}[0m
    -\u{1b}[38;5;92mMUSIC.OGG\u{1b}[0m     \u{1b}[38;5;133mIMAGE.PNG\u{1b}[0m      \u{1b}[31mCOMPRESSED.ZIP\u{1b}[0m     \u{1b}[38;5;137mcompiled.o\u{1b}[0m         
    -\u{1b}[38;5;92mmusic.mp3\u{1b}[0m     \u{1b}[38;5;244mfile.tmp\u{1b}[0m       \u{1b}[31mcompressed.txz\u{1b}[0m     \u{1b}[38;5;137mcompiled.js\u{1b}[0m        
    -\u{1b}[1;4;33mMakefile\u{1b}[0m      \u{1b}[38;5;105mDOCUMENT.XLSX\u{1b}[0m  \u{1b}[31mcompressed.tgz\u{1b}[0m     compiled.coffee    
    -\u{1b}[38;5;93mlossless.wav\u{1b}[0m  \u{1b}[38;5;105mdocument.pdf\u{1b}[0m   \u{1b}[31mcompressed.tar.xz\u{1b}[0m  \u{1b}[38;5;137mcompiled.class\u{1b}[0m     
     
   ✔ stderr is empty
 ✘ ‘exa -1r --sort=name *’ sorts by file name in reverse order
   ✔ command was executed
   ✔ status code matches
   ✘ stdout did not match the file
     Difference between expected and got:
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;135mvideo.wmv\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;135mVIDEO.AVI\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;92mMUSIC.OGG\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;92mmusic.mp3\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[1;4;33mMakefile\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;93mlossless.wav\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;93mlossless.flac\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;133mimage.svg\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;133mIMAGE.PNG\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244mfile.tmp\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;105mDOCUMENT.XLSX\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;105mdocument.pdf\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;109mcrypto.signature\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;109mcrypto.asc\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mCOMPRESSED.ZIP\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.txz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tgz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tar.xz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.tar.gz\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[31mcompressed.deb\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;137mcompiled.o\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[0mcompiled.js
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[0mcompiled.coffee
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;137mcompiled.class\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244mbackup~\u{1b}[0m
    +\u{1b}[36m/testcases/file-names-exts/\u{1b}[38;5;244m#SAVEFILE#\u{1b}[0m
    -\u{1b}[38;5;135mvideo.wmv\u{1b}[0m
    -\u{1b}[38;5;135mVIDEO.AVI\u{1b}[0m
    -\u{1b}[38;5;92mMUSIC.OGG\u{1b}[0m
    -\u{1b}[38;5;92mmusic.mp3\u{1b}[0m
    -\u{1b}[1;4;33mMakefile\u{1b}[0m
    -\u{1b}[38;5;93mlossless.wav\u{1b}[0m
    -\u{1b}[38;5;93mlossless.flac\u{1b}[0m
    -\u{1b}[38;5;133mimage.svg\u{1b}[0m
    -\u{1b}[38;5;133mIMAGE.PNG\u{1b}[0m
    -\u{1b}[38;5;244mfile.tmp\u{1b}[0m
    -\u{1b}[38;5;105mDOCUMENT.XLSX\u{1b}[0m
    -\u{1b}[38;5;105mdocument.pdf\u{1b}[0m
    -\u{1b}[38;5;109mcrypto.signature\u{1b}[0m
    -\u{1b}[38;5;109mcrypto.asc\u{1b}[0m
    -\u{1b}[31mCOMPRESSED.ZIP\u{1b}[0m
    -\u{1b}[31mcompressed.txz\u{1b}[0m
    -\u{1b}[31mcompressed.tgz\u{1b}[0m
    -\u{1b}[31mcompressed.tar.xz\u{1b}[0m
    -\u{1b}[31mcompressed.tar.gz\u{1b}[0m
    -\u{1b}[31mcompressed.deb\u{1b}[0m
    -\u{1b}[38;5;137mcompiled.o\u{1b}[0m
    -\u{1b}[38;5;137mcompiled.js\u{1b}[0m
    -compiled.coffee
    -\u{1b}[38;5;137mcompiled.class\u{1b}[0m
    -\u{1b}[38;5;244mbackup~\u{1b}[0m
    -\u{1b}[38;5;244m#SAVEFILE#\u{1b}[0m

I don’t know why some tests started failing, but I believe the one you introduced are failing because the output you got was from executing exa in a different directory or with an alias.

@whonore
Copy link
Contributor Author

whonore commented Jan 14, 2021

Sorry about that, I remember I was having some trouble running the extended tests locally so I was hoping the CI could do it for me. I'll try to fix them soon.

@whonore
Copy link
Contributor Author

whonore commented Jan 15, 2021

Ok, I believe I fixed the new tests I added. The problem was exa dir doesn't print dir/ before every file name, but exa dir/* does, so I just had the tests cd into the directory first. The other issue is there seems to be an unrelated bug where if there's a dir/a.js and dir/a.coffee, a.js is colored as a compiled file with plain exa dir, but not with exa dir/* (see #792).

As for the other tests that I didn't write, the problem is they're relying on bash's glob sort order, but my change runs everything through filter.sort_files and since the default sort order is Name(AaBbCc) they get reordered. Two fixes I can think of are:

  1. Preserve the current behavior by somehow detecting that no sort order was actually specified, so we shouldn't run sort_files. This requires changing things so we can distinguish between a default value of Name(AaBbCc) and an explicit --sort=name.
  2. Say that this is in fact the expected behavior and fix the failing tests to match it. This somewhat breaks backwards compatability, but makes more sense in my opinion, since the default sort order is Name not Unsorted.

@ogham
Copy link
Owner

ogham commented Mar 29, 2021

Hi,

The reason you discovered that the extended tests are failing is correct — those tests require a large list of files with directories, and while the purpose of those tests isn't to test the arguments' sort order, it inadvertently tested it anyway. (At least it was commented.) I'm actually surprised that there was no existing text that explicitly tests this behaviour. Maybe the failing tests were the tests, and their purpose got lost to time.

Anyway, I'm going to merge this PR and go with option (2), changing the behaviour, then fix the tests to support the new defined behaviour. I thought about it for a little while and realised that no matter which behaviour we pick (whether to sort or to not sort), exa might do something unexpected:

  1. If the free command-line arguments are not sorted (the current behaviour), then exa --sort=something dir/* won't actually sort the files.
  2. If they are sorted (your new behaviour), then exa --sort=something dir1 dir2 may display the listing of dir2 first, and dir1 second. You might be telling exa to "display this and then that", and then it displays "that and then this".

We could try to be smart and apply some heuristic, but I think that introduces more problems than it solves. Plus, I checked the GNU and BSD ls implementations, and they also sort their free arguments, even though I swear I looked once years ago and at least one of them didn't, so if exa has to pick between two unexpected behaviours, it may as well pick the one people expect to be unexpected.

Thanks!

@ogham ogham merged commit cf5070a into ogham:master Mar 29, 2021
ogham added a commit that referenced this pull request Mar 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

--sort and --reverse doesn't seem to do anything if files are given as argument explicitely
3 participants