Browse Source

Merge branch 'main' into p-git_repos

Preston Thorpe 2 years ago
parent
commit
113fa9bbb3
40 changed files with 471 additions and 241 deletions
  1. 28 0
      .github/workflows/apt.yml
  2. 19 0
      .github/workflows/conventional-commits.yml
  3. 2 2
      .github/workflows/unit-tests.yml
  4. 43 0
      README.md
  5. 2 2
      completions/bash/eza
  6. 36 36
      devtools/deb-package.sh
  7. 4 3
      flake.nix
  8. 1 0
      src/fs/dir.rs
  9. 1 1
      src/fs/feature/git.rs
  10. 13 7
      src/fs/file.rs
  11. 13 2
      src/main.rs
  12. 3 0
      src/output/details.rs
  13. 1 1
      src/output/file_name.rs
  14. 4 0
      tests/cmd/basic_all.stdout
  15. 4 0
      tests/cmd/icons_all.stdout
  16. 21 17
      tests/cmd/long_all_nix.stdout
  17. 21 17
      tests/cmd/long_blocksize_nix.stdout
  18. 21 17
      tests/cmd/long_extended_nix.stdout
  19. 21 17
      tests/cmd/long_git_nix.stdout
  20. 21 17
      tests/cmd/long_git_repos_nix.stdout
  21. 21 17
      tests/cmd/long_git_repos_no_status_nix.stdout
  22. 21 17
      tests/cmd/long_grid_nix.stdout
  23. 4 0
      tests/cmd/long_header_nix.stdout
  24. 21 17
      tests/cmd/long_icons_nix.stdout
  25. 21 17
      tests/cmd/long_nix.stdout
  26. 21 17
      tests/cmd/long_octal_nix.stdout
  27. 21 17
      tests/cmd/long_time_style_relative_nix.stdout
  28. 4 0
      tests/cmd/long_unix.stdout
  29. 4 0
      tests/cmd/long_windows.stdout
  30. 1 0
      tests/itest/exa/file.c
  31. 0 0
      tests/itest/exa/sssssssssssssssssssssssssggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss/Makefile
  32. 0 0
      tests/itest/image.jpg.img.c.rs.log.png
  33. 1 0
      tests/itest/index.svg
  34. 0 0
      tests/itest/vagrant/debug/.gitignore
  35. 1 0
      tests/itest/vagrant/debug/symlinking
  36. 12 0
      tests/itest/vagrant/dev/main.bf
  37. 0 0
      tests/itest/vagrant/log/file.png
  38. 19 0
      tests/itest/vagrant/log/run/run.log.text
  39. 19 0
      tests/itest/vagrant/log/run/sps.log.text
  40. 1 0
      treefmt.nix

+ 28 - 0
.github/workflows/apt.yml

@@ -0,0 +1,28 @@
+name: Apt Installation
+on:
+  schedule:
+    - cron: '0 0 * * *'
+  push:
+    branches: [ main ]
+    paths:
+      - 'deb.asc'
+      - '.github/workflows/apt.yml'
+  pull_request:
+    branches: [ main ]
+    paths:
+      - 'deb.asc'
+      - '.github/workflows/apt.yml'
+jobs:
+  apt_installation:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Install eza via apt repo
+        run: |
+          wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo tee /etc/apt/trusted.gpg.d/gierens.asc && \
+          echo "deb http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list && \
+          sudo apt update && \
+          sudo apt install -y eza
+      - name: Run eza
+        run: eza
+      - name: Open man page
+        run: man eza | cat

+ 19 - 0
.github/workflows/conventional-commits.yml

@@ -0,0 +1,19 @@
+name: Conventional Commits
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    branches: [ main ]
+
+jobs:
+  build:
+    name: Conventional Commits
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v2
+
+      - uses: webiny/action-conventional-commits@v1.1.0
+        # optional, required for private repos
+        # with:
+        #   GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

+ 2 - 2
.github/workflows/unit-tests.yml

@@ -4,14 +4,14 @@ on:
   push:
     branches: [ main ]
     paths:
-      - '.github/workflows/*'
+      - '.github/workflows/unit-tests.yml'
       - 'src/**'
       - 'Cargo.*'
       - build.rs
   pull_request:
     branches: [ main ]
     paths:
-      - '.github/workflows/*'
+      - '.github/workflows/unit-tests.yml'
       - 'src/**'
       - 'Cargo.*'
       - build.rs

+ 43 - 0
README.md

@@ -141,6 +141,36 @@ On Gentoo, eza is available as a package [`sys-apps/eza`](https://packages.gento
 emerge --ask sys-apps/eza
 ```
 
+### openSUSE
+
+Eza is available at [openSUSE:Factory/eza](https://build.opensuse.org/package/show/openSUSE:Factory/eza):
+
+```bash
+zypper ar https://download.opensuse.org/tumbleweed/repo/oss/ factory-oss
+zypper in eza
+```
+
+The preceding repository also contains the Bash, Fish, and Zsh completions.
+
+### Fedora
+
+You can install Eza from [openSUSE:Factory/eza](https://build.opensuse.org/package/show/openSUSE:Factory/eza):
+
+```bash
+tee /etc/yum.repos.d/opensuse-tumbleweed-oss.repo <<EOL
+[opensuse-tumbleweed-oss]
+name=OpenSUSE Tumbleweed OSS
+baseurl=https://download.opensuse.org/tumbleweed/repo/oss/
+enabled=1
+gpgcheck=1
+gpgkey=https://download.opensuse.org/tumbleweed/repo/oss/repodata/repomd.xml.key
+EOL
+
+dnf install eza
+```
+
+The preceding repository also contains the Bash, Fish, and Zsh completions.
+
 ### Brew (MacOS)
 
 [![Homebrew package](https://repology.org/badge/version-for-repo/homebrew/eza.svg)](https://repology.org/project/eza/versions)
@@ -166,6 +196,19 @@ To install eza, run:
 sudo port install eza
 ```
 
+### Scoop (Windows)
+
+[![Windows package](https://repology.org/badge/version-for-repo/scoop/eza.svg)](https://repology.org/project/eza/versions)
+
+
+Eza is available from [Scoop](https://scoop.sh/#/apps?q=eza&id=a52070d25f94bbcc884f80bef53eb47ed1268198).
+
+To install eza, run:
+
+```shell
+scoop install eza
+```
+
 ---
 Click sections to expand.
 

+ 2 - 2
completions/bash/eza

@@ -38,13 +38,13 @@ _eza()
         # _parse_help doesn’t pick up short options when they are on the same line than long options
         --*)
             # colo[u]r isn’t parsed correctly so we filter these options out and add them by hand
-            parse_help=$( eza --help | grep -oE ' (\-\-[[:alnum:]@-]+)' | tr -d ' ' | grep -v '\-\-colo' )
+            parse_help=$( eza --help | grep -oE ' (--[[:alnum:]@-]+)' | tr -d ' ' | grep -v '\--colo' )
             completions=$( echo '--color --colour --color-scale --colour-scale' $parse_help )
             COMPREPLY=( $( compgen -W "$completions" -- "$cur" ) )
             ;;
 
         -*)
-            completions=$( eza --help | grep -oE ' (\-[[:alnum:]@])' | tr -d ' ' )
+            completions=$( eza --help | grep -oE ' (-[[:alnum:]@])' | tr -d ' ' )
             COMPREPLY=( $( compgen -W "$completions" -- "$cur" ) )
             ;;
 

+ 36 - 36
devtools/deb-package.sh

@@ -9,7 +9,7 @@ TAG=$(git describe --tags --abbrev=0)
 VERSION=${TAG:1}
 
 echo "checkout tag ${TAG}"
-git checkout --quiet ${TAG}
+git checkout --quiet "${TAG}"
 
 echo "build man pages"
 just man
@@ -20,7 +20,7 @@ TARGETS["arm64"]="aarch64-unknown-linux-gnu"
 TARGETS["armhf"]="arm-unknown-linux-gnueabihf"
 
 echo "download release notes"
-RELEASE_NOTES=$(curl -s ${REPO_URL}/releases/tag/${TAG})
+RELEASE_NOTES=$(curl -s "${REPO_URL}/releases/tag/${TAG}")
 
 for ARCH in "${!TARGETS[@]}"; do
     echo "building ${ARCH} package:"
@@ -40,29 +40,29 @@ for ARCH in "${!TARGETS[@]}"; do
     echo "    checksum ok"
 
     echo " -> creating directory structure"
-    mkdir -p ${DEB_TMP_DIR}
-    mkdir -p ${DEB_TMP_DIR}${DESTDIR}
-    mkdir -p ${DEB_TMP_DIR}${DOCDIR}
-    mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man1
-    mkdir -p ${DEB_TMP_DIR}${DOCDIR}/man5
-    mkdir -p ${DEB_TMP_DIR}/DEBIAN
-    mkdir -p ${DEB_TMP_DIR}/usr/share/doc/${NAME}
-    chmod 755 -R ${DEB_TMP_DIR}
-    
+    mkdir -p "${DEB_TMP_DIR}"
+    mkdir -p "${DEB_TMP_DIR}${DESTDIR}"
+    mkdir -p "${DEB_TMP_DIR}${DOCDIR}"
+    mkdir -p "${DEB_TMP_DIR}${DOCDIR}/man1"
+    mkdir -p "${DEB_TMP_DIR}${DOCDIR}/man5"
+    mkdir -p "${DEB_TMP_DIR}/DEBIAN"
+    mkdir -p "${DEB_TMP_DIR}/usr/share/doc/${NAME}"
+    chmod 755 -R "${DEB_TMP_DIR}"
+
     echo " -> extract executable"
     tar -xzf "${ARCH}.tar.gz"
-    cp ${NAME} ${DEB_TMP_DIR}${DESTDIR}
-    chmod 755 ${DEB_TMP_DIR}${DESTDIR}/${NAME}
+    cp ${NAME} "${DEB_TMP_DIR}${DESTDIR}"
+    chmod 755 "${DEB_TMP_DIR}${DESTDIR}/${NAME}"
 
     echo " -> compress man pages"
-    gzip -cn9 target/man/eza.1 > ${DEB_TMP_DIR}${DOCDIR}man1/eza.1.gz
-    gzip -cn9 target/man/eza_colors.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors.5.gz
-    gzip -cn9 target/man/eza_colors-explanation.5 > ${DEB_TMP_DIR}${DOCDIR}man5/eza_colors-explanation.5.gz
-    chmod 644 ${DEB_TMP_DIR}${DOCDIR}/**/*.gz
-    
+    gzip -cn9 target/man/eza.1 > "${DEB_TMP_DIR}${DOCDIR}man1/eza.1.gz"
+    gzip -cn9 target/man/eza_colors.5 > "${DEB_TMP_DIR}${DOCDIR}man5/eza_colors.5.gz"
+    gzip -cn9 target/man/eza_colors-explanation.5 > "${DEB_TMP_DIR}${DOCDIR}man5/eza_colors-explanation.5.gz"
+    chmod 644 "${DEB_TMP_DIR}${DOCDIR}"/**/*.gz
+
     echo " -> create control file"
-    touch ${DEB_TMP_DIR}/DEBIAN/control
-    cat > ${DEB_TMP_DIR}/DEBIAN/control <<EOM
+    touch "${DEB_TMP_DIR}/DEBIAN/control"
+    cat > "${DEB_TMP_DIR}/DEBIAN/control" <<EOM
 Package: ${NAME}
 Version: ${VERSION}
 Section: utils
@@ -78,17 +78,17 @@ Description: Modern replacement for ls
  It also has extra features not present in the original ls, such as viewing the
  Git status for a directory, or recursing into directories with a tree view.
 EOM
-    chmod 644 ${DEB_TMP_DIR}/DEBIAN/control
-    
+    chmod 644 "${DEB_TMP_DIR}/DEBIAN/control"
+
     echo " -> copy changelog"
-    cp CHANGELOG.md ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
-    gzip -cn9 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
-    rm ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog
-    chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz
-    
+    cp CHANGELOG.md "${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog"
+    gzip -cn9 "${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog" > "${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz"
+    rm "${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog"
+    chmod 644 "${DEB_TMP_DIR}/usr/share/doc/${NAME}/changelog.gz"
+
     echo " -> create copyright file"
-    touch ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
-    cat > ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright << EOM
+    touch "${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright"
+    cat > "${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright" << EOM
 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: ${NAME}
 Upstream-Contact: Christina Sørensen <christina@cafkafk.com>
@@ -121,16 +121,16 @@ License: MIT
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
 EOM
-    chmod 644 ${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright
-    
+    chmod 644 "${DEB_TMP_DIR}/usr/share/doc/${NAME}/copyright"
+
     echo " -> build ${ARCH} package"
-    dpkg-deb --build --root-owner-group ${DEB_TMP_DIR} > /dev/null
-    
+    dpkg-deb --build --root-owner-group "${DEB_TMP_DIR}" > /dev/null
+
     echo " -> cleanup"
-    rm -rf ${DEB_TMP_DIR} ${ARCH}.tar.gz ${NAME}
-    
+    rm -rf "${DEB_TMP_DIR}" "${ARCH}.tar.gz" "${NAME}"
+
     # gierens: this does not work on my arch at the moment and
     #          i'm verifying on the repo host anyway thus the || true
     echo " -> lint ${ARCH} package"
-    lintian ${DEB_PACKAGE} || true
+    lintian "${DEB_PACKAGE}" || true
 done

+ 4 - 3
flake.nix

@@ -120,7 +120,7 @@
             singleStep = true;
             # set itests files creation date to unix epoch
             buildPhase = ''touch --date=@0 tests/itest/*'';
-            cargoTestOptions = opts: opts ++ [ "--features nix" ];
+            cargoTestOptions = opts: opts ++ ["--features nix"];
             inherit buildInputs;
           };
 
@@ -135,8 +135,8 @@
             singleStep = true;
             # set itests files creation date to unix epoch
             buildPhase = ''touch --date=@0 tests/itest/*; rm tests/cmd/*.stdout || echo; rm tests/cmd/*.stderr || echo;'';
-            cargoTestOptions = opts: opts ++ [ "--features nix" ];
-            TRYCMD="dump";
+            cargoTestOptions = opts: opts ++ ["--features nix"];
+            TRYCMD = "dump";
             postInstall = ''
               cp dump $out -r
             '';
@@ -155,6 +155,7 @@
           build = packages.check;
           test = packages.test;
           lint = packages.clippy;
+          trycmd = packages.trycmd;
         };
       }
     );

+ 1 - 0
src/fs/dir.rs

@@ -42,6 +42,7 @@ impl Dir {
                           .map(|result| result.map(|entry| entry.path()))
                           .collect::<Result<_, _>>()?;
 
+        info!("Read directory success {:?}", &path);
         Ok(Self { contents, path })
     }
 

+ 1 - 1
src/fs/feature/git.rs

@@ -332,7 +332,7 @@ fn reorient(path: &Path) -> PathBuf {
 
 #[cfg(windows)]
 fn reorient(path: &Path) -> PathBuf {
-    let unc_path = path.canonicalize().unwrap();
+    let unc_path = path.canonicalize().unwrap_or_else(|_| path.to_path_buf());
     // On Windows UNC path is returned. We need to strip the prefix for it to work.
     let normal_path = unc_path.as_os_str().to_str().unwrap().trim_start_matches("\\\\?\\");
     PathBuf::from(normal_path)

+ 13 - 7
src/fs/file.rs

@@ -83,7 +83,8 @@ pub struct File<'dir> {
     pub extended_attributes: Vec<Attribute>,
 
     /// The absolute value of this path, used to look up mount points.
-    pub absolute_path: PathBuf,}
+    pub absolute_path: Option<PathBuf>,
+}
 
 impl<'dir> File<'dir> {
     pub fn from_args<PD, FN>(path: PathBuf, parent_dir: PD, filename: FN, deref_links: bool) -> io::Result<File<'dir>>
@@ -98,7 +99,7 @@ impl<'dir> File<'dir> {
         let metadata   = std::fs::symlink_metadata(&path)?;
         let is_all_all = false;
         let extended_attributes = File::gather_extended_attributes(&path);
-        let absolute_path = std::fs::canonicalize(&path)?;
+        let absolute_path = std::fs::canonicalize(&path).ok();
 
         Ok(File { name, ext, path, metadata, parent_dir, is_all_all, deref_links, extended_attributes, absolute_path })
     }
@@ -112,7 +113,7 @@ impl<'dir> File<'dir> {
         let is_all_all = true;
         let parent_dir = Some(parent_dir);
         let extended_attributes = File::gather_extended_attributes(&path);
-        let absolute_path = std::fs::canonicalize(&path)?;
+        let absolute_path = std::fs::canonicalize(&path).ok();
 
         Ok(File { path, parent_dir, metadata, ext, name: ".".into(), is_all_all, deref_links: false, extended_attributes, absolute_path })
     }
@@ -125,7 +126,7 @@ impl<'dir> File<'dir> {
         let is_all_all = true;
         let parent_dir = Some(parent_dir);
         let extended_attributes = File::gather_extended_attributes(&path);
-        let absolute_path = std::fs::canonicalize(&path)?;
+        let absolute_path = std::fs::canonicalize(&path).ok();
 
         Ok(File { path, parent_dir, metadata, ext, name: "..".into(), is_all_all, deref_links: false, extended_attributes, absolute_path })
     }
@@ -203,6 +204,7 @@ impl<'dir> File<'dir> {
     /// Returns an IO error upon failure, but this shouldn’t be used to check
     /// if a `File` is a directory or not! For that, just use `is_directory()`.
     pub fn to_dir(&self) -> io::Result<Dir> {
+        trace!("to_dir: reading dir");
         Dir::read_dir(self.path.clone())
     }
 
@@ -253,7 +255,10 @@ impl<'dir> File<'dir> {
     /// Whether this file is a mount point
     pub fn is_mount_point(&self) -> bool {
         if cfg!(target_os = "linux") && self.is_directory() {
-            return ALL_MOUNTS.contains_key(&self.absolute_path);
+            return match self.absolute_path.as_ref() {
+                Some(path) => ALL_MOUNTS.contains_key(path),
+                None => false,
+            }
         }
         false
     }
@@ -261,7 +266,7 @@ impl<'dir> File<'dir> {
     /// The filesystem device and type for a mount point
     pub fn mount_point_info(&self) -> Option<&MountedFs> {
         if cfg!(target_os = "linux") {
-            return ALL_MOUNTS.get(&self.absolute_path);
+            return self.absolute_path.as_ref().and_then(|p|ALL_MOUNTS.get(p));
         }
         None
     }
@@ -324,7 +329,7 @@ impl<'dir> File<'dir> {
                     is_all_all: false,
                     deref_links: self.deref_links,
                     extended_attributes,
-                    absolute_path
+                    absolute_path: Some(absolute_path)
                 };
                 FileTarget::Ok(Box::new(file))
             }
@@ -527,6 +532,7 @@ impl<'dir> File<'dir> {
     /// but as mentioned in the size function comment above, different filesystems
     /// make it difficult to get any info about a dir by it's size, so this may be it.
     fn is_empty_directory(&self) -> bool {
+        trace!("is_empty_directory: reading dir");
         match Dir::read_dir(self.path.clone()) {
             // . & .. are skipped, if the returned iterator has .next(), it's not empty
             Ok(has_files) => has_files.files(super::DotFilter::Dotfiles, None, false, false).next().is_none(),

+ 13 - 2
src/main.rs

@@ -27,6 +27,7 @@ use std::env;
 use std::ffi::{OsStr, OsString};
 use std::io::{self, Write, ErrorKind};
 use std::path::{Component, PathBuf};
+use std::process::exit;
 
 use ansiterm::{ANSIStrings, Style};
 
@@ -87,8 +88,6 @@ lazy_static! {
 }
 
 fn main() {
-    use std::process::exit;
-
     #[cfg(unix)]
     unsafe {
         libc::signal(libc::SIGPIPE, libc::SIG_DFL);
@@ -118,8 +117,11 @@ fn main() {
             let theme = options.theme.to_theme(terminal_size::terminal_size().is_some());
             let exa = Exa { options, writer, input_paths, theme, console_width, git };
 
+
+            info!("matching on exa.run");
             match exa.run() {
                 Ok(exit_status) => {
+                    trace!("exa.run: exit Ok(exit_status)");
                     exit(exit_status);
                 }
 
@@ -130,6 +132,7 @@ fn main() {
 
                 Err(e) => {
                     eprintln!("{e}");
+                    trace!("exa.run: exit RUNTIME_ERROR");
                     exit(exits::RUNTIME_ERROR);
                 }
             }
@@ -225,8 +228,13 @@ impl<'args> Exa<'args> {
 
                 Ok(f) => {
                     if f.points_to_directory() && ! self.options.dir_action.treat_dirs_as_files() {
+                        trace!("matching on to_dir");
                         match f.to_dir() {
                             Ok(d)   => dirs.push(d),
+                            Err(e) if e.kind() == ErrorKind::PermissionDenied => {
+                                warn!("Permission Denied: {e}");
+                                exit(exits::PERMISSION_DENIED);
+                            },
                             Err(e)  => writeln!(io::stderr(), "{file_path:?}: {e}")?,
                         }
                     }
@@ -378,4 +386,7 @@ mod exits {
 
     /// Exit code for when the command-line options are invalid.
     pub const OPTIONS_ERROR: i32 = 3;
+
+    /// Exit code for missing file permissions
+    pub const PERMISSION_DENIED: i32 = 13;
 }

+ 3 - 0
src/output/details.rs

@@ -68,6 +68,8 @@ use std::vec::IntoIter as VecIntoIter;
 use ansiterm::Style;
 use scoped_threadpool::Pool;
 
+use log::*;
+
 use crate::fs::{Dir, File};
 use crate::fs::dir_action::RecurseOptions;
 use crate::fs::feature::git::GitCache;
@@ -261,6 +263,7 @@ impl<'a> Render<'a> {
                     let mut dir = None;
                     if let Some(r) = self.recurse {
                         if file.is_directory() && r.tree && ! r.is_too_deep(depth.0) {
+                            trace!("matching on to_dir");
                             match file.to_dir() {
                                 Ok(d) => {
                                     dir = Some(d);

+ 1 - 1
src/output/file_name.rs

@@ -350,7 +350,7 @@ impl<'a, 'dir, C: Colours> FileName<'a, 'dir, C> {
 
         let mut display_hyperlink = false;
         if self.options.embed_hyperlinks == EmbedHyperlinks::On {
-            if let Some(abs_path) = self.file.path.canonicalize().unwrap().as_os_str().to_str() {
+            if let Some(abs_path) = self.file.absolute_path.as_ref().and_then(|p| p.as_os_str().to_str()) {
                 bits.insert(0, ANSIString::from(format!(
                     "{}file://{}{}{}",
                     HYPERLINK_START,

+ 4 - 0
tests/cmd/basic_all.stdout

@@ -3,10 +3,13 @@ b
 c
 d
 e
+exa
 f
 g
 h
 i
+image.jpg.img.c.rs.log.png
+index.svg
 j
 k
 l
@@ -15,3 +18,4 @@ n
 o
 p
 q
+vagrant

+ 4 - 0
tests/cmd/icons_all.stdout

@@ -3,10 +3,13 @@
  c
  d
  e
+ exa
  f
  g
  h
  i
+ image.jpg.img.c.rs.log.png
+󰕙 index.svg
  j
  k
  l
@@ -15,3 +18,4 @@
  o
  p
  q
+ vagrant

+ 21 - 17
tests/cmd/long_all_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0 nixbld  1 Jan  1970 a
+.rw-r--r--  0 nixbld  1 Jan  1970 b
+.rw-r--r--  0 nixbld  1 Jan  1970 c
+.rw-r--r--  0 nixbld  1 Jan  1970 d
+.rw-r--r--  0 nixbld  1 Jan  1970 e
+drwxr-xr-x  - nixbld  1 Jan  1970 exa
+.rw-r--r--  0 nixbld  1 Jan  1970 f
+.rw-r--r--  0 nixbld  1 Jan  1970 g
+.rw-r--r--  0 nixbld  1 Jan  1970 h
+.rw-r--r--  0 nixbld  1 Jan  1970 i
+.rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 j
+.rw-r--r--  0 nixbld  1 Jan  1970 k
+.rw-r--r--  0 nixbld  1 Jan  1970 l
+.rw-r--r--  0 nixbld  1 Jan  1970 m
+.rw-r--r--  0 nixbld  1 Jan  1970 n
+.rw-r--r--  0 nixbld  1 Jan  1970 o
+.rw-r--r--  0 nixbld  1 Jan  1970 p
+.rw-r--r--  0 nixbld  1 Jan  1970 q
+drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_blocksize_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0    0 nixbld  1 Jan  1970 a
+.rw-r--r--  0    0 nixbld  1 Jan  1970 b
+.rw-r--r--  0    0 nixbld  1 Jan  1970 c
+.rw-r--r--  0    0 nixbld  1 Jan  1970 d
+.rw-r--r--  0    0 nixbld  1 Jan  1970 e
+drwxr-xr-x  -    - nixbld  1 Jan  1970 exa
+.rw-r--r--  0    0 nixbld  1 Jan  1970 f
+.rw-r--r--  0    0 nixbld  1 Jan  1970 g
+.rw-r--r--  0    0 nixbld  1 Jan  1970 h
+.rw-r--r--  0    0 nixbld  1 Jan  1970 i
+.rw-r--r--  0    0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 4.1k nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0    0 nixbld  1 Jan  1970 j
+.rw-r--r--  0    0 nixbld  1 Jan  1970 k
+.rw-r--r--  0    0 nixbld  1 Jan  1970 l
+.rw-r--r--  0    0 nixbld  1 Jan  1970 m
+.rw-r--r--  0    0 nixbld  1 Jan  1970 n
+.rw-r--r--  0    0 nixbld  1 Jan  1970 o
+.rw-r--r--  0    0 nixbld  1 Jan  1970 p
+.rw-r--r--  0    0 nixbld  1 Jan  1970 q
+drwxr-xr-x  -    - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_extended_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0 nixbld  1 Jan  1970 a
+.rw-r--r--  0 nixbld  1 Jan  1970 b
+.rw-r--r--  0 nixbld  1 Jan  1970 c
+.rw-r--r--  0 nixbld  1 Jan  1970 d
+.rw-r--r--  0 nixbld  1 Jan  1970 e
+drwxr-xr-x  - nixbld  1 Jan  1970 exa
+.rw-r--r--  0 nixbld  1 Jan  1970 f
+.rw-r--r--  0 nixbld  1 Jan  1970 g
+.rw-r--r--  0 nixbld  1 Jan  1970 h
+.rw-r--r--  0 nixbld  1 Jan  1970 i
+.rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 j
+.rw-r--r--  0 nixbld  1 Jan  1970 k
+.rw-r--r--  0 nixbld  1 Jan  1970 l
+.rw-r--r--  0 nixbld  1 Jan  1970 m
+.rw-r--r--  0 nixbld  1 Jan  1970 n
+.rw-r--r--  0 nixbld  1 Jan  1970 o
+.rw-r--r--  0 nixbld  1 Jan  1970 p
+.rw-r--r--  0 nixbld  1 Jan  1970 q
+drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_git_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0 nixbld  1 Jan  1970 a
+.rw-r--r--  0 nixbld  1 Jan  1970 b
+.rw-r--r--  0 nixbld  1 Jan  1970 c
+.rw-r--r--  0 nixbld  1 Jan  1970 d
+.rw-r--r--  0 nixbld  1 Jan  1970 e
+drwxr-xr-x  - nixbld  1 Jan  1970 exa
+.rw-r--r--  0 nixbld  1 Jan  1970 f
+.rw-r--r--  0 nixbld  1 Jan  1970 g
+.rw-r--r--  0 nixbld  1 Jan  1970 h
+.rw-r--r--  0 nixbld  1 Jan  1970 i
+.rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 j
+.rw-r--r--  0 nixbld  1 Jan  1970 k
+.rw-r--r--  0 nixbld  1 Jan  1970 l
+.rw-r--r--  0 nixbld  1 Jan  1970 m
+.rw-r--r--  0 nixbld  1 Jan  1970 n
+.rw-r--r--  0 nixbld  1 Jan  1970 o
+.rw-r--r--  0 nixbld  1 Jan  1970 p
+.rw-r--r--  0 nixbld  1 Jan  1970 q
+drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_git_repos_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - a
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - b
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - c
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - d
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - e
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - f
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - g
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - h
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - i
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - j
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - k
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - l
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - m
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - n
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - o
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - p
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - q
+.rw-r--r--  0 nixbld  1 Jan  1970 - - a
+.rw-r--r--  0 nixbld  1 Jan  1970 - - b
+.rw-r--r--  0 nixbld  1 Jan  1970 - - c
+.rw-r--r--  0 nixbld  1 Jan  1970 - - d
+.rw-r--r--  0 nixbld  1 Jan  1970 - - e
+drwxr-xr-x  - nixbld  1 Jan  1970 - - exa
+.rw-r--r--  0 nixbld  1 Jan  1970 - - f
+.rw-r--r--  0 nixbld  1 Jan  1970 - - g
+.rw-r--r--  0 nixbld  1 Jan  1970 - - h
+.rw-r--r--  0 nixbld  1 Jan  1970 - - i
+.rw-r--r--  0 nixbld  1 Jan  1970 - - image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 - - index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 - - j
+.rw-r--r--  0 nixbld  1 Jan  1970 - - k
+.rw-r--r--  0 nixbld  1 Jan  1970 - - l
+.rw-r--r--  0 nixbld  1 Jan  1970 - - m
+.rw-r--r--  0 nixbld  1 Jan  1970 - - n
+.rw-r--r--  0 nixbld  1 Jan  1970 - - o
+.rw-r--r--  0 nixbld  1 Jan  1970 - - p
+.rw-r--r--  0 nixbld  1 Jan  1970 - - q
+drwxr-xr-x  - nixbld  1 Jan  1970 - - vagrant

+ 21 - 17
tests/cmd/long_git_repos_no_status_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - a
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - b
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - c
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - d
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - e
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - f
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - g
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - h
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - i
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - j
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - k
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - l
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - m
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - n
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - o
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - p
-.rw-r--r-- 0 nixbld  1 Jan  1970 - - q
+.rw-r--r--  0 nixbld  1 Jan  1970 - - a
+.rw-r--r--  0 nixbld  1 Jan  1970 - - b
+.rw-r--r--  0 nixbld  1 Jan  1970 - - c
+.rw-r--r--  0 nixbld  1 Jan  1970 - - d
+.rw-r--r--  0 nixbld  1 Jan  1970 - - e
+drwxr-xr-x  - nixbld  1 Jan  1970 - - exa
+.rw-r--r--  0 nixbld  1 Jan  1970 - - f
+.rw-r--r--  0 nixbld  1 Jan  1970 - - g
+.rw-r--r--  0 nixbld  1 Jan  1970 - - h
+.rw-r--r--  0 nixbld  1 Jan  1970 - - i
+.rw-r--r--  0 nixbld  1 Jan  1970 - - image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 - - index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 - - j
+.rw-r--r--  0 nixbld  1 Jan  1970 - - k
+.rw-r--r--  0 nixbld  1 Jan  1970 - - l
+.rw-r--r--  0 nixbld  1 Jan  1970 - - m
+.rw-r--r--  0 nixbld  1 Jan  1970 - - n
+.rw-r--r--  0 nixbld  1 Jan  1970 - - o
+.rw-r--r--  0 nixbld  1 Jan  1970 - - p
+.rw-r--r--  0 nixbld  1 Jan  1970 - - q
+drwxr-xr-x  - nixbld  1 Jan  1970 - - vagrant

+ 21 - 17
tests/cmd/long_grid_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0 nixbld  1 Jan  1970 a
+.rw-r--r--  0 nixbld  1 Jan  1970 b
+.rw-r--r--  0 nixbld  1 Jan  1970 c
+.rw-r--r--  0 nixbld  1 Jan  1970 d
+.rw-r--r--  0 nixbld  1 Jan  1970 e
+drwxr-xr-x  - nixbld  1 Jan  1970 exa
+.rw-r--r--  0 nixbld  1 Jan  1970 f
+.rw-r--r--  0 nixbld  1 Jan  1970 g
+.rw-r--r--  0 nixbld  1 Jan  1970 h
+.rw-r--r--  0 nixbld  1 Jan  1970 i
+.rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 j
+.rw-r--r--  0 nixbld  1 Jan  1970 k
+.rw-r--r--  0 nixbld  1 Jan  1970 l
+.rw-r--r--  0 nixbld  1 Jan  1970 m
+.rw-r--r--  0 nixbld  1 Jan  1970 n
+.rw-r--r--  0 nixbld  1 Jan  1970 o
+.rw-r--r--  0 nixbld  1 Jan  1970 p
+.rw-r--r--  0 nixbld  1 Jan  1970 q
+drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 4 - 0
tests/cmd/long_header_nix.stdout

@@ -4,10 +4,13 @@ Permissions Size User   Date Modified Name
 .rw-r--r--     0 nixbld  1 Jan  1970  c
 .rw-r--r--     0 nixbld  1 Jan  1970  d
 .rw-r--r--     0 nixbld  1 Jan  1970  e
+drwxr-xr-x     - nixbld  1 Jan  1970  exa
 .rw-r--r--     0 nixbld  1 Jan  1970  f
 .rw-r--r--     0 nixbld  1 Jan  1970  g
 .rw-r--r--     0 nixbld  1 Jan  1970  h
 .rw-r--r--     0 nixbld  1 Jan  1970  i
+.rw-r--r--     0 nixbld  1 Jan  1970  image.jpg.img.c.rs.log.png
+.rw-r--r--    19 nixbld  1 Jan  1970  index.svg
 .rw-r--r--     0 nixbld  1 Jan  1970  j
 .rw-r--r--     0 nixbld  1 Jan  1970  k
 .rw-r--r--     0 nixbld  1 Jan  1970  l
@@ -16,3 +19,4 @@ Permissions Size User   Date Modified Name
 .rw-r--r--     0 nixbld  1 Jan  1970  o
 .rw-r--r--     0 nixbld  1 Jan  1970  p
 .rw-r--r--     0 nixbld  1 Jan  1970  q
+drwxr-xr-x     - nixbld  1 Jan  1970  vagrant

+ 21 - 17
tests/cmd/long_icons_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970  a
-.rw-r--r-- 0 nixbld  1 Jan  1970  b
-.rw-r--r-- 0 nixbld  1 Jan  1970  c
-.rw-r--r-- 0 nixbld  1 Jan  1970  d
-.rw-r--r-- 0 nixbld  1 Jan  1970  e
-.rw-r--r-- 0 nixbld  1 Jan  1970  f
-.rw-r--r-- 0 nixbld  1 Jan  1970  g
-.rw-r--r-- 0 nixbld  1 Jan  1970  h
-.rw-r--r-- 0 nixbld  1 Jan  1970  i
-.rw-r--r-- 0 nixbld  1 Jan  1970  j
-.rw-r--r-- 0 nixbld  1 Jan  1970  k
-.rw-r--r-- 0 nixbld  1 Jan  1970  l
-.rw-r--r-- 0 nixbld  1 Jan  1970  m
-.rw-r--r-- 0 nixbld  1 Jan  1970  n
-.rw-r--r-- 0 nixbld  1 Jan  1970  o
-.rw-r--r-- 0 nixbld  1 Jan  1970  p
-.rw-r--r-- 0 nixbld  1 Jan  1970  q
+.rw-r--r--  0 nixbld  1 Jan  1970  a
+.rw-r--r--  0 nixbld  1 Jan  1970  b
+.rw-r--r--  0 nixbld  1 Jan  1970  c
+.rw-r--r--  0 nixbld  1 Jan  1970  d
+.rw-r--r--  0 nixbld  1 Jan  1970  e
+drwxr-xr-x  - nixbld  1 Jan  1970  exa
+.rw-r--r--  0 nixbld  1 Jan  1970  f
+.rw-r--r--  0 nixbld  1 Jan  1970  g
+.rw-r--r--  0 nixbld  1 Jan  1970  h
+.rw-r--r--  0 nixbld  1 Jan  1970  i
+.rw-r--r--  0 nixbld  1 Jan  1970  image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 󰕙 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970  j
+.rw-r--r--  0 nixbld  1 Jan  1970  k
+.rw-r--r--  0 nixbld  1 Jan  1970  l
+.rw-r--r--  0 nixbld  1 Jan  1970  m
+.rw-r--r--  0 nixbld  1 Jan  1970  n
+.rw-r--r--  0 nixbld  1 Jan  1970  o
+.rw-r--r--  0 nixbld  1 Jan  1970  p
+.rw-r--r--  0 nixbld  1 Jan  1970  q
+drwxr-xr-x  - nixbld  1 Jan  1970  vagrant

+ 21 - 17
tests/cmd/long_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld  1 Jan  1970 a
-.rw-r--r-- 0 nixbld  1 Jan  1970 b
-.rw-r--r-- 0 nixbld  1 Jan  1970 c
-.rw-r--r-- 0 nixbld  1 Jan  1970 d
-.rw-r--r-- 0 nixbld  1 Jan  1970 e
-.rw-r--r-- 0 nixbld  1 Jan  1970 f
-.rw-r--r-- 0 nixbld  1 Jan  1970 g
-.rw-r--r-- 0 nixbld  1 Jan  1970 h
-.rw-r--r-- 0 nixbld  1 Jan  1970 i
-.rw-r--r-- 0 nixbld  1 Jan  1970 j
-.rw-r--r-- 0 nixbld  1 Jan  1970 k
-.rw-r--r-- 0 nixbld  1 Jan  1970 l
-.rw-r--r-- 0 nixbld  1 Jan  1970 m
-.rw-r--r-- 0 nixbld  1 Jan  1970 n
-.rw-r--r-- 0 nixbld  1 Jan  1970 o
-.rw-r--r-- 0 nixbld  1 Jan  1970 p
-.rw-r--r-- 0 nixbld  1 Jan  1970 q
+.rw-r--r--  0 nixbld  1 Jan  1970 a
+.rw-r--r--  0 nixbld  1 Jan  1970 b
+.rw-r--r--  0 nixbld  1 Jan  1970 c
+.rw-r--r--  0 nixbld  1 Jan  1970 d
+.rw-r--r--  0 nixbld  1 Jan  1970 e
+drwxr-xr-x  - nixbld  1 Jan  1970 exa
+.rw-r--r--  0 nixbld  1 Jan  1970 f
+.rw-r--r--  0 nixbld  1 Jan  1970 g
+.rw-r--r--  0 nixbld  1 Jan  1970 h
+.rw-r--r--  0 nixbld  1 Jan  1970 i
+.rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+.rw-r--r--  0 nixbld  1 Jan  1970 j
+.rw-r--r--  0 nixbld  1 Jan  1970 k
+.rw-r--r--  0 nixbld  1 Jan  1970 l
+.rw-r--r--  0 nixbld  1 Jan  1970 m
+.rw-r--r--  0 nixbld  1 Jan  1970 n
+.rw-r--r--  0 nixbld  1 Jan  1970 o
+.rw-r--r--  0 nixbld  1 Jan  1970 p
+.rw-r--r--  0 nixbld  1 Jan  1970 q
+drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_octal_nix.stdout

@@ -1,17 +1,21 @@
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 a
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 b
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 c
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 d
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 e
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 f
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 g
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 h
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 i
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 j
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 k
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 l
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 m
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 n
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 o
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 p
-0644 .rw-r--r-- 0 nixbld  1 Jan  1970 q
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 a
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 b
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 c
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 d
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 e
+0755 drwxr-xr-x  - nixbld  1 Jan  1970 exa
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 f
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 g
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 h
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 i
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 image.jpg.img.c.rs.log.png
+0644 .rw-r--r-- 19 nixbld  1 Jan  1970 index.svg
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 j
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 k
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 l
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 m
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 n
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 o
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 p
+0644 .rw-r--r--  0 nixbld  1 Jan  1970 q
+0755 drwxr-xr-x  - nixbld  1 Jan  1970 vagrant

+ 21 - 17
tests/cmd/long_time_style_relative_nix.stdout

@@ -1,17 +1,21 @@
-.rw-r--r-- 0 nixbld 53 years a
-.rw-r--r-- 0 nixbld 53 years b
-.rw-r--r-- 0 nixbld 53 years c
-.rw-r--r-- 0 nixbld 53 years d
-.rw-r--r-- 0 nixbld 53 years e
-.rw-r--r-- 0 nixbld 53 years f
-.rw-r--r-- 0 nixbld 53 years g
-.rw-r--r-- 0 nixbld 53 years h
-.rw-r--r-- 0 nixbld 53 years i
-.rw-r--r-- 0 nixbld 53 years j
-.rw-r--r-- 0 nixbld 53 years k
-.rw-r--r-- 0 nixbld 53 years l
-.rw-r--r-- 0 nixbld 53 years m
-.rw-r--r-- 0 nixbld 53 years n
-.rw-r--r-- 0 nixbld 53 years o
-.rw-r--r-- 0 nixbld 53 years p
-.rw-r--r-- 0 nixbld 53 years q
+.rw-r--r--  0 nixbld 53 years a
+.rw-r--r--  0 nixbld 53 years b
+.rw-r--r--  0 nixbld 53 years c
+.rw-r--r--  0 nixbld 53 years d
+.rw-r--r--  0 nixbld 53 years e
+drwxr-xr-x  - nixbld 53 years exa
+.rw-r--r--  0 nixbld 53 years f
+.rw-r--r--  0 nixbld 53 years g
+.rw-r--r--  0 nixbld 53 years h
+.rw-r--r--  0 nixbld 53 years i
+.rw-r--r--  0 nixbld 53 years image.jpg.img.c.rs.log.png
+.rw-r--r-- 19 nixbld 53 years index.svg
+.rw-r--r--  0 nixbld 53 years j
+.rw-r--r--  0 nixbld 53 years k
+.rw-r--r--  0 nixbld 53 years l
+.rw-r--r--  0 nixbld 53 years m
+.rw-r--r--  0 nixbld 53 years n
+.rw-r--r--  0 nixbld 53 years o
+.rw-r--r--  0 nixbld 53 years p
+.rw-r--r--  0 nixbld 53 years q
+drwxr-xr-x  - nixbld 53 years vagrant

+ 4 - 0
tests/cmd/long_unix.stdout

@@ -3,10 +3,13 @@
 .rw-r--r-- c
 .rw-r--r-- d
 .rw-r--r-- e
+drwxr-xr-x exa
 .rw-r--r-- f
 .rw-r--r-- g
 .rw-r--r-- h
 .rw-r--r-- i
+.rw-r--r-- image.jpg.img.c.rs.log.png
+.rw-r--r-- index.svg
 .rw-r--r-- j
 .rw-r--r-- k
 .rw-r--r-- l
@@ -15,3 +18,4 @@
 .rw-r--r-- o
 .rw-r--r-- p
 .rw-r--r-- q
+drwxr-xr-x vagrant

+ 4 - 0
tests/cmd/long_windows.stdout

@@ -3,10 +3,13 @@
 -a--- c
 -a--- d
 -a--- e
+d---- exa
 -a--- f
 -a--- g
 -a--- h
 -a--- i
+-a--- image.jpg.img.c.rs.log.png
+-a--- index.svg
 -a--- j
 -a--- k
 -a--- l
@@ -15,3 +18,4 @@
 -a--- o
 -a--- p
 -a--- q
+d---- vagrant

+ 1 - 0
tests/itest/exa/file.c

@@ -0,0 +1 @@
+djihisudjuhfius

+ 0 - 0
tests/itest/exa/sssssssssssssssssssssssssggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss/Makefile


+ 0 - 0
tests/itest/image.jpg.img.c.rs.log.png


+ 1 - 0
tests/itest/index.svg

@@ -0,0 +1 @@
+Not a real svg file

+ 0 - 0
tests/itest/vagrant/debug/.gitignore


+ 1 - 0
tests/itest/vagrant/debug/symlinking

@@ -0,0 +1 @@
+a

+ 12 - 0
tests/itest/vagrant/dev/main.bf

@@ -0,0 +1,12 @@
+>++++++++[<+++++++++>-]<.
+>++++[<+++++++>-]<+.
++++++++..
++++.
+>>++++++[<+++++++>-]<++.
+------------.
+>++++++[<+++++++++>-]<+.
+<.
++++.
+------.
+--------.
+>>>++++[<++++++++>-]<+.

+ 0 - 0
tests/itest/vagrant/log/file.png


+ 19 - 0
tests/itest/vagrant/log/run/run.log.text

@@ -0,0 +1,19 @@
+Enjoyed minutes related as at on on. Is fanny dried as often me. Goodness as reserved raptures to mistaken steepest oh screened he. Gravity he mr sixteen esteems. Mile home its new way with high told said. Finished no horrible blessing landlord dwelling dissuade if. Rent fond am he in on read. Anxious cordial demands settled entered in do to colonel.
+
+Its sometimes her behaviour are contented. Do listening am eagerness oh objection collected. Together gay feelings continue juvenile had off one. Unknown may service subject her letters one bed. Child years noise ye in forty. Loud in this in both hold. My entrance me is disposal bachelor remember relation.
+
+In to am attended desirous raptures declared diverted confined at. Collected instantly remaining up certainly to necessary as. Over walk dull into son boy door went new. At or happiness commanded daughters as. Is handsome an declared at received in extended vicinity subjects. Into miss on he over been late pain an. Only week bore boy what fat case left use. Match round scale now sex style far times. Your me past an much.
+
+Parish so enable innate in formed missed. Hand two was eat busy fail. Stand smart grave would in so. Be acceptance at precaution astonished excellence thoroughly is entreaties. Who decisively attachment has dispatched. Fruit defer in party me built under first. Forbade him but savings sending ham general. So play do in near park that pain.
+
+On no twenty spring of in esteem spirit likely estate. Continue new you declared differed learning bringing honoured. At mean mind so upon they rent am walk. Shortly am waiting inhabit smiling he chiefly of in. Lain tore time gone him his dear sure. Fat decisively estimating affronting assistance not. Resolve pursuit regular so calling me. West he plan girl been my then up no.
+
+By spite about do of do allow blush. Additions in conveying or collected objection in. Suffer few desire wonder her object hardly nearer. Abroad no chatty others my silent an. Fat way appear denote who wholly narrow gay settle. Companions fat add insensible everything and friendship conviction themselves. Theirs months ten had add narrow own.
+
+At distant inhabit amongst by. Appetite welcomed interest the goodness boy not. Estimable education for disposing pronounce her. John size good gay plan sent old roof own. Inquietude saw understood his friendship frequently yet. Nature his marked ham wished.
+
+Concerns greatest margaret him absolute entrance nay. Door neat week do find past he. Be no surprise he honoured indulged. Unpacked endeavor six steepest had husbands her. Painted no or affixed it so civilly. Exposed neither pressed so cottage as proceed at offices. Nay they gone sir game four. Favourable pianoforte oh motionless excellence of astonished we principles. Warrant present garrets limited cordial in inquiry to. Supported me sweetness behaviour shameless excellent so arranging.
+
+He my polite be object oh change. Consider no mr am overcame yourself throwing sociable children. Hastily her totally conduct may. My solid by stuff first smile fanny. Humoured how advanced mrs elegance sir who. Home sons when them dine do want to. Estimating themselves unsatiable imprudence an he at an. Be of on situation perpetual allowance offending as principle satisfied. Improved carriage securing are desirous too.
+
+Attended no do thoughts me on dissuade scarcely. Own are pretty spring suffer old denote his. By proposal speedily mr striking am. But attention sex questions applauded how happiness. To travelling occasional at oh sympathize prosperous. His merit end means widow songs linen known. Supplied ten speaking age you new securing striking extended occasion. Sang put paid away joy into six her.

+ 19 - 0
tests/itest/vagrant/log/run/sps.log.text

@@ -0,0 +1,19 @@
+Paid was hill sir high. For him precaution any advantages dissimilar comparison few terminated projecting. Prevailed discovery immediate objection of ye at. Repair summer one winter living feebly pretty his. In so sense am known these since. Shortly respect ask cousins brought add tedious nay. Expect relied do we genius is. On as around spirit of hearts genius. Is raptures daughter branched laughter peculiar in settling.
+
+Whole wound wrote at whose to style in. Figure ye innate former do so we. Shutters but sir yourself provided you required his. So neither related he am do believe. Nothing but you hundred had use regular. Fat sportsmen arranging preferred can. Busy paid like is oh. Dinner our ask talent her age hardly. Neglected collected an attention listening do abilities.
+
+Agreed joy vanity regret met may ladies oppose who. Mile fail as left as hard eyes. Meet made call in mean four year it to. Prospect so branched wondered sensible of up. For gay consisted resolving pronounce sportsman saw discovery not. Northward or household as conveying we earnestly believing. No in up contrasted discretion inhabiting excellence. Entreaties we collecting unpleasant at everything conviction.
+
+Had denoting properly jointure you occasion directly raillery. In said to of poor full be post face snug. Introduced imprudence see say unpleasing devonshire acceptance son. Exeter longer wisdom gay nor design age. Am weather to entered norland no in showing service. Nor repeated speaking shy appetite. Excited it hastily an pasture it observe. Snug hand how dare here too.
+
+Supplied directly pleasant we ignorant ecstatic of jointure so if. These spoke house of we. Ask put yet excuse person see change. Do inhabiting no stimulated unpleasing of admiration he. Enquire explain another he in brandon enjoyed be service. Given mrs she first china. Table party no or trees an while it since. On oh celebrated at be announcing dissimilar insipidity. Ham marked engage oppose cousin ask add yet.
+
+Talent she for lively eat led sister. Entrance strongly packages she out rendered get quitting denoting led. Dwelling confined improved it he no doubtful raptures. Several carried through an of up attempt gravity. Situation to be at offending elsewhere distrusts if. Particular use for considered projection cultivated. Worth of do doubt shall it their. Extensive existence up me contained he pronounce do. Excellence inquietude assistance precaution any impression man sufficient.
+
+Full age sex set feel her told. Tastes giving in passed direct me valley as supply. End great stood boy noisy often way taken short. Rent the size our more door. Years no place abode in no child my. Man pianoforte too solicitude friendship devonshire ten ask. Course sooner its silent but formal she led. Extensive he assurance extremity at breakfast. Dear sure ye sold fine sell on. Projection at up connection literature insensible motionless projecting.
+
+Examine she brother prudent add day ham. Far stairs now coming bed oppose hunted become his. You zealously departure had procuring suspicion. Books whose front would purse if be do decay. Quitting you way formerly disposed perceive ladyship are. Common turned boy direct and yet.
+
+But why smiling man her imagine married. Chiefly can man her out believe manners cottage colonel unknown. Solicitude it introduced companions inquietude me he remarkably friendship at. My almost or horses period. Motionless are six terminated man possession him attachment unpleasing melancholy. Sir smile arose one share. No abroad in easily relied an whence lovers temper by. Looked wisdom common he an be giving length mr.
+
+Inquietude simplicity terminated she compliment remarkably few her nay. The weeks are ham asked jokes. Neglected perceived shy nay concluded. Not mile draw plan snug next all. Houses latter an valley be indeed wished merely in my. Money doubt oh drawn every or an china. Visited out friends for expense message set eat.

+ 1 - 0
treefmt.nix

@@ -3,5 +3,6 @@
   programs = {
     alejandra.enable = true;
     rustfmt.enable = true;
+    shellcheck.enable = true;
   };
 }