Commit Graph

844 Commits

Author SHA1 Message Date
Benjamin Sago
ed59428cbc Replace Misfire with a testable OptionsResult
This was meant to be a small change, but it spiralled into a big one.

The original intention was to separate OptionsResult and OptionsError. With these types separated, the Help and Version variants can only be returned from the Options::parse function, and the later option-parsing functions can only return success or errors.

Also, Misfire was a silly name.

As a side-effect of Options::parse returning OptionsResult instead of Result<Options, Misfire>, we could no longer use unwrap() or unwrap_err() to get the contents out. This commit makes OptionsResult into a value type, and Options::parse a pure function. It feels like it should be one, having its return value entirely dependent on its arguments, but it also loaded locales and time zones. These parts have been moved into lazy_static references, and the code still passes tests without much change.

OptionsResult isn't PartialEq yet, because the file colouring uses a Box internally.
2020-10-12 23:47:36 +01:00
Benjamin Sago
f8df02dae7 Batch source formatting
I read through every file and applied a couple of rustfmt suggestions. The brace placement and alignment of items on similar lines has been made consistent, even if neither are rustfmt's default style (a file has been put in place to enforce this). Other changes are:

• Alphabetical imports and modules
• Comma placement at the end of match blocks
• Use newlines and indentation judiciously
• Spaces around associated types
• Spaces after negations (it makes it more clear imho)
• Comment formatting
• Use early-returns and Optional `?` where appropriate
2020-10-10 20:02:55 +01:00
Benjamin Sago
c3c39fee0a Various misc clippy fixes 2020-10-10 15:57:40 +01:00
Benjamin Sago
a25cfe765d Remove some enum glob imports
These are holdovers from how I used to write Rust ("back in the day" of 2014). There are still some places in the code where I think it's worth glob-importing enums, but not these places.
2020-10-10 15:46:39 +01:00
Benjamin Sago
f0c139ca68 Better referencing
This commit makes changes to the way variables are referenced:

• Make types Copy when possible
• Make methods take `self` instead of `&self` where possible (trivially_copy_pass_by_ref)
• Remove unnecessary borrowing (needless_ref)
• Remove unnecessary cloning (clone_on_copy)
• Remove `ref` from match arms where possible (new Rust match ergonomics)
2020-10-10 15:30:19 +01:00
Benjamin Sago
70a30ed683 The Selfening
This commit uses Clippy to fix all the 'use_self' warnings. Using Self instead of the type name has been good Rust style for a while now, and it's become the style I'm used to seeing.
2020-10-10 13:55:26 +01:00
Benjamin Sago
74d9f1402b Some Clippy fixes 2020-10-10 13:33:50 +01:00
Benjamin Sago
39c3f15602 Simplify type signatures in main module
Exa::from_args used to be in the library, called by the binary, but now the binary is gone, it no longer needs to be as abstract. Instead of accepting a reference to a Write value, it takes a Stdout directly, which it owns itself, simplifying the type signature drastically.
2020-10-10 02:35:23 +01:00
Benjamin Sago
8046980806 Mass version upgrade
This upgrades the versions of everything, including upgrading almost all outdated dependencies.

• number_prefix had some backwards-incompatible changes. It now feels more Rustful, and spells "Mebi" correctly.
• term_grid stopped working when I upgraded it, worryingly, so I reverted it back.
2020-10-10 02:14:35 +01:00
Benjamin Sago
04e2d4c692 Just straight-up roll our own logger
This commit removes the env_logger dependency, replacing it with a simple implementation. Doing so removes like ten other transitive dependencies that no longer need to be included in the build.

It also gains the ability to enable trace-level logging. The users crate, which contains such logging statements as of the version I published a few days ago, has been upgraded to celebrate.

Also, change the log imports to globs. I'm only interested that a file doing logging, not what level it's logging at.
2020-10-10 02:01:12 +01:00
Benjamin Sago
5ca3548bb1 Inline the library into the binary
This commit removes the library portion of exa. Cargo now only builds a binary.

The original intent was for exa to have its own internal library, and have the binary just call the library. This is usually done for code cleanliness reasons: it separates the code that implements the purpose of the program (the "plumbing") from the code that the user interacts with (the "porcelain"), ensuring a well-defined interface between the two.

However, in exa, this split was in completely the wrong place. Logging was handled in the binary, but option parsing was handled in the library. The library could theoretically print to any Writer ("for testing", it said), but it's far easier to run integration tests by executing the binary than to change the code to handle unit tests, so this abstraction isn't gaining us anything.

I've also had several people ask me if exa should be packaged for Linux distributions as a library, or just a binary. Clearly, this is confusing!

In several of my other Rust projects, I've done this better, with the command-line option parsing and log printing done on the binary side. It also turns out that you don't need to have a [lib] section in the Cargo.toml, so that's gone too.
2020-10-10 01:43:42 +01:00
Benjamin Sago
df81a24dae Use 0 and 1 rather than EXIT_SUCCESS/FAILURE
It doesn't seem right to use the EXIT_SUCCESS constant in one place, and a hard-coded 2 in another. What if they overlap?

Changing the success value to 0 should be OK, though, because the standard defines 0 as success, regardless of whether EXIT_SUCCESS is 0 or not.

Also, the values have become i32s. The Rust function std::process::exit takes an i32, so there's not much point using anything else.
2020-10-10 01:11:22 +01:00
Benjamin Sago
e44858eb41 Fix bug where files were Git-ignored too often
This was an unintended consequence of #653. The Files iterator stopped using IgnoreCache and started using GitCache, which would always populated when the `--git` option was passed, without checking whether files were meant to be ignored. This meant that passing `--git` started ignoring files even without `--git-ignore`.

The solution for now is to explicitly pass the flag around, which probably should be a better type than bool but isn't. This makes the git-ignoring-related extended tests pass.
2020-10-10 00:09:44 +01:00
Benjamin Sago
7f9773b68e Merge branch 'zachcoyle-add-nix-icon' 2020-10-08 22:56:24 +01:00
Benjamin Sago
fd3a3d13b7 Merge branch 'add-nix-icon' of https://github.com/zachcoyle/exa into zachcoyle-add-nix-icon
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:56:16 +01:00
Benjamin Sago
dee447213c
Merge pull request #743 from jonhoo/patch-1
Add additional TeX compiled files
2020-10-08 22:43:24 +01:00
Benjamin Sago
c167046c34
Merge pull request #735 from Finermeerkat137/pull_req
add ko to compiled objects
2020-10-08 22:42:30 +01:00
Benjamin Sago
9240dbdef3
Merge pull request #734 from imsofi/master
Fix icons for symlinked directories
2020-10-08 22:41:59 +01:00
Benjamin Sago
6f20f195a7
Merge pull request #726 from 0x3333/master
Fixes #719. Change August to Aug.
2020-10-08 22:38:25 +01:00
Benjamin Sago
8b852cb201
Merge pull request #725 from kbravh/tz-variable-patch
Update determine_time_zone function to check TZ
2020-10-08 22:37:00 +01:00
Benjamin Sago
d03e39c367 Merge branch 'master' of https://github.com/JavaCafe01/exa into JavaCafe01-master
Change a bunch of the existing shell-related icons to the new Unicode escape.
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:30:20 +01:00
Benjamin Sago
8c3748ca35 Merge branch 'DiegoMagdaleno-master' 2020-10-08 22:24:06 +01:00
Benjamin Sago
1ee8fab7de Merge branch 'master' of https://github.com/DiegoMagdaleno/exa into DiegoMagdaleno-master
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:23:18 +01:00
Benjamin Sago
083cf147be
Merge pull request #709 from poliorcetics/add-apple-filetypes
Add the documents extension for Apple file formats
2020-10-08 22:17:45 +01:00
Benjamin Sago
dbbc4e465b
Merge pull request #704 from LarsHaalck/master
Add --octal-permissions argument
2020-10-08 22:14:38 +01:00
Benjamin Sago
ea62aab37e
Merge pull request #690 from schlessera/add/php-immediate-files
Add immediate file types for PHP ecosystem
2020-10-08 22:11:01 +01:00
Benjamin Sago
cba2070924
Merge pull request #678 from olshevskiy87/display_git_status_conflicted
git-feature: display if a file is updated but unmerged (conflicted)
2020-10-08 22:10:33 +01:00
Benjamin Sago
12e45ac41c Merge branch 'master' of https://github.com/danielbayley/exa into danielbayley-master
# Conflicts:
#	src/output/icons.rs
2020-10-08 22:00:36 +01:00
Benjamin Sago
d901bb289c
Merge pull request #654 from ariasuni/cleaning
Clean code a bit and fix typos in code documentation
2020-10-08 21:49:20 +01:00
Benjamin Sago
1fe06a7682
Merge pull request #653 from ariasuni/fix-gitignore-option
Use git2 instead of parsing .gitignore for --git-ignore
2020-10-08 21:46:10 +01:00
Jon Gjengset
c0f01310c4
Add bcf biblatex control file 2020-10-03 20:25:24 -04:00
Jon Gjengset
f37aeebef0
Add additional TeX compiled files
Specifically .fls and .fdb_latexmk, which the popular `latexmk` tool produces.
2020-10-03 19:46:06 -04:00
Zach Coyle
3b1d770f8a
Add Nix Icon 2020-09-26 23:36:24 -04:00
Sudhip Nashi
c17cf95f4c add ko to compiled objects 2020-09-12 21:15:57 -05:00
imsofi
0a7ffcd042
Fix icons for symlinked directories 2020-09-08 22:27:39 +02:00
Karey Higuera
5be0286749 deconstruct the TZ environment variable instead of unwrapping 2020-09-03 08:49:51 -04:00
Tercio Gaudencio Filho
3fe35b571f
Change August to Aug. Fix issue #719. 2020-08-28 15:05:57 -03:00
Karey Higuera
e8d69fc5e8 Update determine_time_zone function to check TZ
Instead of defaulting immediately to /etc/filename for the timezone, we can first check whether the TZ environment variable is set. If so, we can pull the corresponding timezone file from /usr/share/zoneinfo. Closes #453.
2020-08-26 19:31:48 -04:00
Gokul Swaminathan
43a4fcb27a Updated filetype icons
Added icon for filetype `.sh`
2020-08-14 01:11:44 -07:00
Diego Magdaleno
4085010b36
Add Swift Programming Language icon 2020-08-08 10:12:07 -05:00
Alexis Bourget
f872027cfe Add the documents extension for Apple file formats 2020-08-02 18:50:32 +02:00
Lars Haalck
16046d57de
Add --octal-permissions argument
Using --octal_permissions will insert another column before the existing
permissions where permissions are encoded using octal values as
requested in #316
2020-07-24 13:47:34 +02:00
Alain Schlesser
2ccc8fa093
Add immediate file types for PHP ecosystem
Added the following imemdiate file types for PHP:
- `composer.json` for [Composer](https://getcomposer.org/), the defactor standard package manager for PHP;
- `RoboFile.php`, for [Robo](https://robo.li/), the PHP task runner.

Note: [Phing]() uses `build.xml`, which was already included in the list.
2020-06-21 11:52:33 +02:00
Dmitriy Olshevskiy
45eade9a59 git-feature: display if a file is updated but unmerged (conflicted) 2020-05-29 17:23:22 +03:00
ariasuni
dba3f37b0a Fix Clippy lints 2020-05-24 21:43:55 +02:00
Thomas Hurst
acb7c49abf Improve handling of unavailable timestamps.
Previously if a timestamp was unavailable, it defaulted to the epoch.
Prior to this it defaulted to a zero duration.

Switch to an Option<SystemTime> and move the handling of unavailable
timestamps to rendering.
2020-05-19 02:31:15 +00:00
Thomas Hurst
e54e1f53c8 Make logic a little clearer 2020-05-18 23:23:30 +00:00
Thomas Hurst
86163ab298 Restore ctime handling with correct pre-epoch behaviour 2020-05-18 23:21:56 +00:00
Thomas Hurst
d2d2e7325f Correct handling of pre-epoch timestamps
Fix an off-by-one on the seconds when subseconds are present, and
correct display of nenoseconds, which are of course inverted due to the
internal value being negative.
2020-05-18 21:25:07 +00:00
Thomas Hurst
bc830b9158 Handle timestamps before UNIX_EPOCH (#658)
Instead of returning a Duration since the epoch from file metadata,
which cannot represent times before it, return the SystemTime directly.

Move conversion closer to where it's needed, and perform it infallibly.
2020-05-18 21:03:44 +00:00