diff --git a/Vagrantfile b/Vagrantfile index 726cded..a8b4c59 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -489,6 +489,21 @@ Vagrant.configure(2) do |config| sudo chown #{user}:#{user} -R "#{test_dir}/git2" EOF + # A third Git repository + # Regression test for https://github.com/ogham/exa/issues/526 + config.vm.provision :shell, privileged: false, inline: <<-EOF + set -xe + mkdir -p "#{test_dir}/git3" + cd "#{test_dir}/git3" + git init + + # Create a symbolic link pointing to a non-existing file + ln -s aaa/aaa/a b + + find "#{test_dir}/git3" -exec touch {} -t #{some_date} \\; + sudo chown #{user}:#{user} -R "#{test_dir}/git3" + EOF + # Hidden and dot file testcases. # We need to set the permissions of `.` and `..` because they actually # get displayed in the output here, so this has to come last. diff --git a/src/fs/feature/git.rs b/src/fs/feature/git.rs index ba15c78..b0646d3 100644 --- a/src/fs/feature/git.rs +++ b/src/fs/feature/git.rs @@ -266,11 +266,11 @@ impl Git { fn reorient(path: &Path) -> PathBuf { use std::env::current_dir; // I’m not 100% on this func tbh - match current_dir() { + let path = match current_dir() { Err(_) => Path::new(".").join(&path), Ok(dir) => dir.join(&path), - }.canonicalize().unwrap() // errors can be ignored here because they only occur if - // the path does not exist / a component is not a folder + }; + path.canonicalize().unwrap_or(path) } /// The character to display if the file has been modified, but not staged. diff --git a/xtests/run.sh b/xtests/run.sh index 2f390d6..e988f78 100755 --- a/xtests/run.sh +++ b/xtests/run.sh @@ -210,6 +210,9 @@ $exa $testcases/git2/target -l --git 2>&1 | diff -q - $results $exa $testcases/git2/deeply/nested/repository -l --git 2>&1 | diff -q - $results/git_2_repository || exit 1 $exa $testcases/git2/{deeply,ignoreds,target} -l --git 2>&1 | diff -q - $results/git_2_all || exit 1 +# Regressions test +$exa $testcases/git3 -l --git &>/dev/null || echo "Failed to display broken symlink in git repository"; exit 1 + COLUMNS=150 $exa $testcases/git/**/* $testcases --git --long --grid -d | diff -q - $results/git_1_files || exit 1 $exa $testcases/git $testcases/git2 --git --long | diff -q - $results/git_12 || exit 1