diff options
author | Dan Davison <dandavison7@gmail.com> | 2021-04-24 16:47:31 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-24 16:47:31 -0400 |
commit | 97671f76b2f61eba85284e63c6275cd29344fb57 (patch) | |
tree | cf7e9e2198604801c76a2fcb91579fdda1c13ed2 /src/delta.rs | |
parent | a15b1221ba29ec062590069ea629a0464f81e0a6 (diff) | |
parent | dc8a6fc3d48c16f82402d46cd83106cf94ed83fe (diff) |
Merge pull request #565 from dandavison/file-regex-replacement
Output paths relative to current working directory
Diffstat (limited to 'src/delta.rs')
-rw-r--r-- | src/delta.rs | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/delta.rs b/src/delta.rs index 7d52eae1..26dbc687 100644 --- a/src/delta.rs +++ b/src/delta.rs @@ -113,6 +113,8 @@ impl<'a> StateMachine<'a> { let mut handled_line = if line.starts_with("commit ") { self.handle_commit_meta_header_line()? + } else if self.state == State::CommitMeta && line.starts_with(' ') { + self.handle_diff_stat_line()? } else if line.starts_with("diff ") { self.handle_file_meta_diff_line()? } else if (self.state == State::FileMeta || self.source == Source::DiffUnified) @@ -226,6 +228,24 @@ impl<'a> StateMachine<'a> { Ok(()) } + fn handle_diff_stat_line(&mut self) -> std::io::Result<bool> { + let mut handled_line = false; + if self.config.relative_paths { + if let Some(cwd) = self.config.cwd_relative_to_repo_root.as_deref() { + if let Some(replacement_line) = parse::relativize_path_in_diff_stat_line( + &self.raw_line, + cwd, + self.config.diff_stat_align_width, + ) { + self.painter.emit()?; + writeln!(self.painter.writer, "{}", replacement_line)?; + handled_line = true + } + } + } + Ok(handled_line) + } + #[allow(clippy::unnecessary_wraps)] fn handle_file_meta_diff_line(&mut self) -> std::io::Result<bool> { self.painter.paint_buffered_minus_and_plus_lines(); @@ -237,8 +257,15 @@ impl<'a> StateMachine<'a> { fn handle_file_meta_minus_line(&mut self) -> std::io::Result<bool> { let mut handled_line = false; - let parsed_file_meta_line = - parse::parse_file_meta_line(&self.line, self.source == Source::GitDiff); + let parsed_file_meta_line = parse::parse_file_meta_line( + &self.line, + self.source == Source::GitDiff, + if self.config.relative_paths { + self.config.cwd_relative_to_repo_root.as_deref() + } else { + None + }, + ); self.minus_file = parsed_file_meta_line.0; self.file_event = parsed_file_meta_line.1; @@ -271,8 +298,15 @@ impl<'a> StateMachine<'a> { fn handle_file_meta_plus_line(&mut self) -> std::io::Result<bool> { let mut handled_line = false; - let parsed_file_meta_line = - parse::parse_file_meta_line(&self.line, self.source == Source::GitDiff); + let parsed_file_meta_line = parse::parse_file_meta_line( + &self.line, + self.source == Source::GitDiff, + if self.config.relative_paths { + self.config.cwd_relative_to_repo_root.as_deref() + } else { + None + }, + ); self.plus_file = parsed_file_meta_line.0; self.painter .set_syntax(parse::get_file_extension_from_file_meta_line_file_path( |