
This is a follow-up to #10685 which started to hide these errors instead of displaying them to the user. But the errors are still noisy and not actionable, so we hide them instead. Release Notes: - Removed error message being logged when `git blame` is run in a repository without commits. Co-authored-by: Bennet <bennetbo@gmx.de>
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
use crate::Oid;
|
|
use anyhow::{anyhow, Result};
|
|
use collections::HashMap;
|
|
use std::path::Path;
|
|
use std::process::Command;
|
|
|
|
#[cfg(windows)]
|
|
use std::os::windows::process::CommandExt;
|
|
|
|
pub fn get_messages(working_directory: &Path, shas: &[Oid]) -> Result<HashMap<Oid, String>> {
|
|
if shas.is_empty() {
|
|
return Ok(HashMap::default());
|
|
}
|
|
|
|
const MARKER: &'static str = "<MARKER>";
|
|
|
|
let mut command = Command::new("git");
|
|
|
|
command
|
|
.current_dir(working_directory)
|
|
.arg("show")
|
|
.arg("-s")
|
|
.arg(format!("--format=%B{}", MARKER))
|
|
.args(shas.iter().map(ToString::to_string));
|
|
|
|
#[cfg(windows)]
|
|
command.creation_flags(windows::Win32::System::Threading::CREATE_NO_WINDOW.0);
|
|
|
|
let output = command
|
|
.output()
|
|
.map_err(|e| anyhow!("Failed to start git blame process: {}", e))?;
|
|
|
|
anyhow::ensure!(
|
|
output.status.success(),
|
|
"'git show' failed with error {:?}",
|
|
output.status
|
|
);
|
|
|
|
Ok(shas
|
|
.iter()
|
|
.cloned()
|
|
.zip(
|
|
String::from_utf8_lossy(&output.stdout)
|
|
.trim()
|
|
.split_terminator(MARKER)
|
|
.map(|str| String::from(str.trim())),
|
|
)
|
|
.collect::<HashMap<Oid, String>>())
|
|
}
|