1. 06 7月, 2017 9 次提交
    • B
      Add iso time style · 3251378e
      Benjamin Sago 提交于
      3251378e
    • B
      Add full-iso time style · f0eed9fd
      Benjamin Sago 提交于
      f0eed9fd
    • B
      Add long-iso style and --time-style option · 786e8f4d
      Benjamin Sago 提交于
      This has to do its own number formatting because *somebody* didn’t add “print the current month number” functionality to rust-datetime!
      786e8f4d
    • B
      Expect different time formats · 98b63705
      Benjamin Sago 提交于
      98b63705
    • B
      Make nanoseconds available to times · aa5b1867
      Benjamin Sago 提交于
      The information was always in the Metadata struct; exa just never used it.
      aa5b1867
    • B
      Fix bug where accessed times were wrong! · 5bdf6304
      Benjamin Sago 提交于
      It used the mtime, rather than the atime. Copy and paste error. Whoops!
      5bdf6304
    • B
      Separate TimeFormat from the Environment · ba335bb6
      Benjamin Sago 提交于
      By moving it outside of the Environment::load_all() constructor, it can be set to different values.
      ba335bb6
    • B
      Move Environment to a table’s Options · d93e168b
      Benjamin Sago 提交于
      This commit moves the Environment field from the Table to its Options, and properly gets rid of the name ‘columns’ from the last commit.
      
      Having it in the Options is important, because it means it can be generated from some command-line options. Also, it reduces the number of arguments that need to be passed to Table::new; there would have been 4 with the inclusion of the Environment, but by moving some of the code into the function, we can avoid this (and any further arguments).
      d93e168b
    • B
      Rename Columns to table::Options · 268b7d52
      Benjamin Sago 提交于
      The views have been renamed to be the Optionses of their module; now the options for the Table — Columns — has followed suit.
      
      This works out, because the table module depended on everything in the columns module. It opens the door for other only-table-specific things to be included.
      
      The casualty was that by making it non-Clone and non-PartialEq, a bunch of other #[derive]-d types had to have their derivions removed too.
      268b7d52
  2. 05 7月, 2017 4 次提交
    • B
      Environment Default trait · d27812f8
      Benjamin Sago 提交于
      The Environment struct only used the Default trait so it could have the same call for both Environment<UsersCache> and Environment<MockUsers>. There’s no reason to keep it around anymore.
      d27812f8
    • B
      Merge branch 'more-misc-refactorings' · 651d23fe
      Benjamin Sago 提交于
      This commit merges in a *lot* of refactoring work done to the tree, details, and grid-details views.
      
      The main one is that the concept of a “table” has been completely separated from the details view. Previously, if you wanted to use the long view without drawing the table (such as with --tree), exa used a “table” with 0 columns in it behind the scenes. This is now reversed: the table is now the optional component in the details view, and a tree-only view is just a details view without a table!
      
      Doing this has paved the way for all sorts of code cleanups: now, we only calculate values needed for the table if one’s going to be displayed. Some of these were rather expensive to compute (such as the user’s time zone, or locale)
      
      This refactoring is not fully complete; there are still several things that can be done, including having the errors and xattrs in the tree view use the same TreeParams constructor as the others, and separating the column widths from the table so fewer mutable values need to be passed around.
      
      Finally, this also merges in a lot of debuffering. There were at least two places in the code where values were collected into a vector before immediately being iterated over, instead of just using those values as they were generated! For example, when displaying the table, each row was rendered into a set of cells for displaying: but then it all went into a vector, and was only displayed at the very end, because that was what I needed for the grid-details view. Now, exa is smart enough to not do that.
      
      Basically, even if exa doesn’t actually *get* that much faster, it should at least display its first line of output quicker.
      
      Fixes #90, but also see #82.
      651d23fe
    • B
      Fix tree permissions bug · f4ddbf38
      Benjamin Sago 提交于
      There was a bug where if you tried to recurse into a directory you didn’t have permission to read the contents of, the error would be ignored.
      
      It now displays the errors.
      f4ddbf38
    • B
      Much more thorough xattr testing · 882ac489
      Benjamin Sago 提交于
      It now tests a lot more combinations of xattrs on files, as well as xattrs and files and errors as the children of directories.
      
      The recent code changes have touched the part where directories’ xattrs and children are displayed at the same tree level, and there weren’t enough tests for this.
      882ac489
  3. 04 7月, 2017 10 次提交
    • B
      Give Tree its own iterator · 4c41141c
      Benjamin Sago 提交于
      The goal of this part of the refactoring, if you wondered, is to make it so only the tree module is aware that it needs ‘depth’ and ‘last’ values to draw the tree.
      
      As far as the details module is concerned, it should just be doing something to produce TreeParams values which it later consumes; that’s it.
      
      This change should make it easier to have tables that may or may not have a tree in them.
      4c41141c
    • B
      Move this up · a32b0dfb
      Benjamin Sago 提交于
      a32b0dfb
    • B
      Rename some stuff · 80d5c2ad
      Benjamin Sago 提交于
      80d5c2ad
    • B
      Encapsulate tree depth · c0a2cf50
      Benjamin Sago 提交于
      It only really gets used for zeroes and having one added to it.
      c0a2cf50
    • B
      Make struct for all tree parameters · 8453f45f
      Benjamin Sago 提交于
      The fields for ‘depth’ and ‘last’ were being passed around separately, but were always used together.
      8453f45f
    • B
      I give up · 09b6ee70
      Benjamin Sago 提交于
      09b6ee70
    • B
      Extract method for table widths total · fec4c453
      Benjamin Sago 提交于
      fec4c453
    • B
      Split the details iterator in two · 1b58f012
      Benjamin Sago 提交于
      Instead of having one iterator that might or might not contain a table, have two, one per case.
      1b58f012
    • B
      Encapsulate table widths · 7b641769
      Benjamin Sago 提交于
      Adding a header row automatically added the widths to the table and returned the row, but adding a file’s row didn’t add the widths. Now they’re consistent.
      
      By having the widths be in a separate type, we can separate the two out later, rather than having one refer to the other.
      7b641769
    • B
      Only get an Env if one’s being used, also mutexes · 97236128
      Benjamin Sago 提交于
      This commit ties a table’s Environment to the fact that it contains columns.
      
      Previously, the Details view would get its Environment, and then use those fields to actually display the details in the table: except for the case where we’re only displaying a tree, when it would just be ignored, instead.
      
      This was caused by the “no columns” case using a Vec of no Columns behind the scenes, rather than disabling the table entirely; much like how a tap isn’t a zero-length swipe, the code should have been updated to reflect this. Now, the Environment is only created if it’s going to be used.
      
      Also, fix a double-mutex-lock: the mutable Table had to be accessed under a lock, but the table contained a UsersCache, which *also* had to be accessed under a lock. This was changed so that the table is only updated *after* the threads have all been joined, so there’s no need for any lock at all. May fix #141, but not sure.
      97236128
  4. 03 7月, 2017 2 次提交
    • B
      Generate files with certain timestamps · 5a2ffd3f
      Benjamin Sago 提交于
      This is going to be used to test time formatting.
      
      Casualty here is that the “have you not ran the provisioning script in a year?” checker complained about there being files more than a year old, so that now has to ignore the times directory.
      5a2ffd3f
    • B
      Extract time formatter · 652e27e6
      Benjamin Sago 提交于
      This commit collects all the time-related fields from the Environment and bundles them all together in their own encapsulated struct.
      652e27e6
  5. 02 7月, 2017 1 次提交
    • B
      Extract table from details and grid_details · fc60838f
      Benjamin Sago 提交于
      This commit extracts the common table element from the details and grid_details modules, and makes it its own reusable thing.
      
      - A Table no longer holds the values it’s rendering; it just holds a continually-updated version of the maximum widths for each column. This means that all of the resulting values that turn into Rows — which here are either files, or file eggs — need to be stored *somewhere*, and that somewhere is a secondary vector that gets passed around and modified alongside the Table.
      - Likewise, all the mutable methods that were on Table that added a Row now *return* the row that would have been added, hoping that the row does get stored somewhere. (It does, don’t worry.)
      - Because rendering with mock users is tested in the user-field-rendering module, we don’t need to bother threading different types of U through the Environment, so now it’s just been specialised to UsersCache.
      - Accidentally speed up printing a table by not buffering its entire output first when not necessary.
      fc60838f
  6. 29 6月, 2017 13 次提交
    • B
      Merge branch 'sort-tests' · 22c6fb04
      Benjamin Sago 提交于
      Adds some tests for sorting, and also adds --sort=type functionality.
      
      Fixes #113.
      22c6fb04
    • B
      Document sorting by type · f61e3853
      Benjamin Sago 提交于
      f61e3853
    • B
      Add sorting by type · f7505364
      Benjamin Sago 提交于
      This isn’t perfect, as a file’s type isn’t cached, so it gets recomputed for every comparison in the sort! We can’t go off the file’s `st_mode` flag because it’s not guaranteed to be in any order between systems.
      f7505364
    • B
      Add a test for inode sorting · 7d1448da
      Benjamin Sago 提交于
      7d1448da
    • B
      Add sort tests for name and ext and lowercase · 098788c9
      Benjamin Sago 提交于
      098788c9
    • B
      Upcase some of the extension testcases · 9d740911
      Benjamin Sago 提交于
      These are going to be used for sort testing. Unfortunately, three existing tests that were using the lowercase versions had to be changed.
      9d740911
    • B
      Merge branch 'almost-all' · 5cd76090
      Benjamin Sago 提交于
      This merge adds support for `--all --all`, which displays the `.` and `..` directories like how ls does it.
      
      Doing this was harder than it seemed — exa wasn’t filtering these directories out already, they just weren’t being included! So instead of just including them again, there had to be quite a lot of internal restructuring (yes, again) in order for there to be Files like `..` that don’t have the same name in the list as they do on the filesystem.
      
      Fixes #155.
      5cd76090
    • B
      Update the docs where it counts · 7e302718
      Benjamin Sago 提交于
      7e302718
    • B
      Use the optional argument trick · 0aa33595
      Benjamin Sago 提交于
      0aa33595
    • B
      Match up fields with parameter names · 31148eda
      Benjamin Sago 提交于
      The arguments passed to File’s constructor were different from the field names used — these might as well both be the same.
      
      Also, move ext and filename to be File methods to save an import, and add tests.
      
      Also also, by passing a PathBuf in to the constructor directly, we can save one (possibly two) instance/s where we pass in a reference to something we were going to lose ownership of anyway, only to have it basically cloned.
      31148eda
    • B
      Always look up metadata · 30f74b08
      Benjamin Sago 提交于
      We can do this because the only File::new invocation that already has metadata is already in the file module, so it doesn’t need its own constructor.
      30f74b08
    • B
      Forbid --tree --all --all · 340bccbc
      Benjamin Sago 提交于
      There’s a problem with the tree view where it’ll still recurse through `.` and `..`. But if you were using tree view, would you even need to see them? They’d be in the tree already!
      340bccbc
    • B
      Override the names of . and .. · dd8bff08
      Benjamin Sago 提交于
      There was a problem when displaying . and .. in directory listings: their names would normalise to actual names! So instead of literally seeing `.`, you’d see the current directory’s name, inserted in sort order into the list of results. Obviously this is not what we want.
      
      In unrelated news, putting `.` and `..` into the list of paths read from a directory just takes up more heap space for something that’s basically constant.
      
      We can solve both these problems at once by moving the DotFilter to the files iterator in Dir, rather than at the Dir’s creation. Having the iterator know whether it should display `.` and `..` means it can emit those files first, and because it knows what those files really represent, it can override their file names to actually be those sequences of dots.
      
      This is not a perfect solution: the main casualty is that a File can now be constructed with a name, some metadata, both, or neither. This is currently handled with a bunch of Options, and returns IOResult even without doing any IO operations.
      
      But at least all the tests pass!
      dd8bff08
  7. 28 6月, 2017 1 次提交