exa

exa v0.1.0

Additions? Changes? Fixes?

exa 0.1 didn’t have any additions or changes because it was the first version. And it didn’t have any fixes because it was perfect!

Alright, it wasn’t perfect. But it’s interesting to look back on early versions of software, to see how bare-bones and featureless they all start out.

Proto-exa

exa’s first commit happened on the 3rd of May, 2014. It did not have many features. The code was written for pre-alpha Rust, and no longer compiles, but here’s an artist’s impression:

exa
.rw-rw-rw- colours.rs
.rw-rw-rw- colours.rs~
.rwxr-xr-x exa
.rw-rw-rw- exa.rs
.rw-rw-rw- exa.rs~

That’s right: there was no grid, the only column was the permissions column, and you got that column whether you liked it or not!

Other milestones

688e41e: Add file size column (3rd March, 2014)

The file size column landed a few commits later. It actually had support for binary prefixes, but there was no option to switch it on.

e0fc84e: Add --all command-line option (4th March)

The first option came the day after.

87f0bde: Print numeric UIDs and GIDs if they don't map to anything (22nd March)

exa’s first bug! It used to assume that a file’s user or group would always map to an actual user on the system.

a8465fe: Move to Cargo (28th June)

Cargo has been a fantastic build system and exa has stuck with it ever since.

728f9f1: Add grid view by default (6th July)

This finally landed. You know you’re writing quality software when the commit message mentions two bugs it’s just introduced.

2784bae: Switch to Crates dependencies format (12th January, 2015)

Crates.io became the crate host two months earlier.

90d4684: Preliminary Git support! (27th January)

Using crates.io made it a lot easier to include third-party dependencies like libgit2.

5099b3f: Initial tree implementation (3rd February)

exa was pretty strict back then, and you had to use --recurse --tree to get it to work.

363d52d: Code cleanups in filetype detection (21st February)

This relatively mundane commit is the commit tagged as the v0.1.0 release, because it happened to be the last commit before I put it on /r/rust.