diff options
author | Nakul Chaudhari <chaudhari@navvis.com> | 2018-05-05 10:07:58 +0200 |
---|---|---|
committer | David Peter <sharkdp@users.noreply.github.com> | 2018-05-06 11:22:48 +0200 |
commit | cbdf5c50c475c3a5720fca36547697f846dbe063 (patch) | |
tree | 69ce6a1f5a37909b36cf0bbf770962a1fac7b261 | |
parent | 418b3c5ea1b0673d061f29ce268a4ee6c07c5219 (diff) |
Fix bug where git modification markers would not be shown if directory
was not cwd
Git ignore Idea dir
Fix #22
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | src/main.rs | 14 |
2 files changed, 10 insertions, 6 deletions
@@ -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<P: AsRef<Path>>( Style::default().paint(" ") }; - match options.style { // Show only content for plain style OptionsStyle::Plain => writeln!( @@ -231,13 +230,16 @@ fn print_file<P: AsRef<Path>>( } fn get_git_diff(filename: &str) -> Option<LineChanges> { - 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<LineChanges> { 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; } |