From 1c964372ad7cfb70116101480638e39a0d07d762 Mon Sep 17 00:00:00 2001 From: Ian Kerins Date: Sat, 8 Oct 2016 22:40:03 -0400 Subject: [PATCH] Always follow symlinks on explicit file arguments. --- src/args.rs | 4 +++- tests/tests.rs | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/args.rs b/src/args.rs index 6cca1256..365749d8 100644 --- a/src/args.rs +++ b/src/args.rs @@ -708,7 +708,9 @@ impl Args { /// Create a new recursive directory iterator at the path given. pub fn walker(&self, path: &Path) -> Result { - let mut wd = WalkDir::new(path).follow_links(self.follow); + // Always follow symlinks for explicitly specified files. + let mut wd = WalkDir::new(path).follow_links(self.follow + || path.is_file()); if let Some(maxdepth) = self.maxdepth { wd = wd.max_depth(maxdepth); } diff --git a/tests/tests.rs b/tests/tests.rs index d27db8ce..1308d715 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -567,6 +567,25 @@ baz/sherlock:be, to a very large extent, the result of luck. Sherlock Holmes assert_eq!(lines, path(expected)); }); +// Follow symlinks on explicit file arguments. +sherlock!(symlink_explicit_file, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { + wd.link("sherlock", "sym1"); + wd.link("sherlock", "sym2"); + cmd.arg("sym1"); + cmd.arg("sym2"); + + let lines: String = wd.stdout(&mut cmd); + let expected = "\ +sherlock:For the Doctor Watsons of this world, as opposed to the Sherlock +sherlock:be, to a very large extent, the result of luck. Sherlock Holmes +sym1:For the Doctor Watsons of this world, as opposed to the Sherlock +sym1:be, to a very large extent, the result of luck. Sherlock Holmes +sym2:For the Doctor Watsons of this world, as opposed to the Sherlock +sym2:be, to a very large extent, the result of luck. Sherlock Holmes +"; + assert_eq!(lines, path(expected)); +}); + sherlock!(unrestricted1, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { wd.create(".gitignore", "sherlock\n"); cmd.arg("-u");