diff options
| author | Joshua Nelson <jyn514@gmail.com> | 2020-11-14 02:44:33 -0500 |
|---|---|---|
| committer | Joshua Nelson <jyn514@gmail.com> | 2020-11-14 02:48:13 -0500 |
| commit | 4d44d77c4d97f46bbfd184e3995e0278b8c3d096 (patch) | |
| tree | 2d1638ce20ce6355f3430dd0cfc34a33c69eed6c | |
| parent | e6e4a0ab63edb18d28e7de57b10e80f95ffd7666 (diff) | |
| download | rust-4d44d77c4d97f46bbfd184e3995e0278b8c3d096.tar.gz rust-4d44d77c4d97f46bbfd184e3995e0278b8c3d096.zip | |
Use default git pager instead of hard-coding `delta`
| -rw-r--r-- | src/tools/compiletest/src/runtest.rs | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 7e17cac8b83..46bf007c649 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -2358,6 +2358,7 @@ impl<'test> TestCx<'test> { let suffix = self.safe_revision().map_or("nightly".into(), |path| path.to_owned() + "-nightly"); let compare_dir = output_base_dir(self.config, self.testpaths, Some(&suffix)); + // Don't give an error if the directory didn't already exist let _ = fs::remove_dir_all(&compare_dir); create_dir_all(&compare_dir).unwrap(); @@ -2406,18 +2407,28 @@ impl<'test> TestCx<'test> { self.fatal("failed to run tidy"); } - let has_delta = Command::new("delta") - .arg("--version") - .stdout(Stdio::null()) - .status() - .map_or(false, |status| status.success()); + let pager = { + let output = Command::new("git").args(&["config", "--get", "core.pager"]).output().ok(); + output.and_then(|out| { + if out.status.success() { + Some(String::from_utf8(out.stdout).expect("invalid UTF8 in git pager")) + } else { + None + } + }) + }; let mut diff = Command::new("diff"); diff.args(&["-u", "-r"]).args(&[out_dir, &compare_dir]); - let output = if has_delta { + let output = if let Some(pager) = pager { let diff_pid = diff.stdout(Stdio::piped()).spawn().expect("failed to run `diff`"); - let output = Command::new("delta") - .arg("--paging=never") + let pager = pager.trim(); + if self.config.verbose { + eprintln!("using pager {}", pager); + } + let output = Command::new(pager) + // disable paging; we want this to be non-interactive + .env("PAGER", "") .stdin(diff_pid.stdout.unwrap()) // Capture output and print it explicitly so it will in turn be // captured by libtest. @@ -2426,7 +2437,10 @@ impl<'test> TestCx<'test> { assert!(output.status.success()); output } else { - eprintln!("warning: `delta` not installed, falling back to `diff --color`"); + eprintln!("warning: no pager configured, falling back to `diff --color`"); + eprintln!( + "help: try configuring a git pager (e.g. `delta`) with `git config --global core.pager delta`" + ); let output = diff.arg("--color").output().unwrap(); assert!(output.status.success() || output.status.code() == Some(1)); output |
