From cbdf5c50c475c3a5720fca36547697f846dbe063 Mon Sep 17 00:00:00 2001 From: Nakul Chaudhari Date: Sat, 5 May 2018 10:07:58 +0200 Subject: [PATCH] Fix bug where git modification markers would not be shown if directory was not cwd Git ignore Idea dir Fix #22 --- .gitignore | 2 ++ src/main.rs | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 0196246b..d6e94762 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /target/ **/*.rs.bk + +.idea diff --git a/src/main.rs b/src/main.rs index ab79f352..8e3f4d46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -198,7 +198,6 @@ fn print_file>( Style::default().paint(" ") }; - match options.style { // Show only content for plain style OptionsStyle::Plain => writeln!( @@ -231,13 +230,16 @@ fn print_file>( } fn get_git_diff(filename: &str) -> Option { - let repo = Repository::open_from_env().ok()?; + let repo = Repository::discover(Path::new(&filename)).ok()?; let workdir = repo.workdir()?; - let current_dir = env::current_dir().ok()?; - let filepath = current_dir.join(Path::new(&filename)); + let absolute_file_path = workdir.join(Path::new(&filename)); + let relative_file_path = absolute_file_path.strip_prefix(workdir).ok()?; let mut diff_options = DiffOptions::new(); - let pathspec = format!("*{}", filename).into_c_string().ok()?; + let pathspec = format!("*{}", relative_file_path.display()) + .into_c_string() + .ok()?; + // GIT pathspec uses relative path diff_options.pathspec(pathspec); diff_options.context_lines(0); @@ -259,7 +261,7 @@ fn get_git_diff(filename: &str) -> Option { Some(&mut |delta, hunk| { let path = delta.new_file().path().unwrap_or_else(|| Path::new("")); - if filepath != workdir.join(path) { + if relative_file_path != path { return false; }