summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNakul Chaudhari <chaudhari@navvis.com>2018-05-05 10:07:58 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2018-05-06 11:22:48 +0200
commitcbdf5c50c475c3a5720fca36547697f846dbe063 (patch)
tree69ce6a1f5a37909b36cf0bbf770962a1fac7b261
parent418b3c5ea1b0673d061f29ce268a4ee6c07c5219 (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--.gitignore2
-rw-r--r--src/main.rs14
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<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;
}