summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2021-08-20 17:55:15 -0700
committerDan Davison <dandavison7@gmail.com>2021-08-20 19:58:07 -0700
commit601ebdb9d93e9a5b76424b2b8f24ed5064a1a262 (patch)
tree9abbf343e4e91d9a3bf13d55475b6d733c56558d
parent64fa4c6aeb3542148d6701deb2992cd86f89da68 (diff)
Add failing test that gitconfig insteadOf is honored
See #693
-rw-r--r--src/features/hyperlinks.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/features/hyperlinks.rs b/src/features/hyperlinks.rs
index 2d3ad3b0..2dad4a9d 100644
--- a/src/features/hyperlinks.rs
+++ b/src/features/hyperlinks.rs
@@ -110,3 +110,44 @@ fn format_commit_line_captures_with_osc8_commit_hyperlink(
fn format_github_commit_url(commit: &str, github_repo: &str) -> String {
format!("https://github.com/{}/commit/{}", github_repo, commit)
}
+
+#[cfg(test)]
+mod tests {
+ use std::fs::remove_file;
+
+ use super::format_commit_line_with_osc8_commit_hyperlink;
+ use crate::tests::integration_test_utils;
+
+ #[test]
+ fn test_commit_hyperlink_honors_insteadof() {
+ let git_config_contents = br#"
+[remote "origin"]
+ url = github:dandavison/delta
+ fetch = +refs/heads/*:refs/remotes/origin/*
+[url "https://github.com/"]
+ insteadOf = github:
+[url "ssh://git@github.com/"]
+ pushInsteadOf = github:
+ insteadOf = githubpriv:
+"#;
+ let git_config_path = "delta__test_commit_hyperlink_honors_insteadof";
+ let config = integration_test_utils::make_config_from_args_and_git_config(
+ &[],
+ Some(git_config_contents),
+ Some(git_config_path),
+ );
+ let hash = "342016d0a69d8361dc17396d9a441704416eb7bb";
+ let line = format!("commit {}", hash);
+ // TODO: This doesn't work because a git2::Repository is needed in order
+ // to compute the remote URL but we do not actually have a repositoty
+ // since the utility make_config_from_args_and_git_config creates a
+ // GitConfig struct with a null Repository.
+ let formatted = format_commit_line_with_osc8_commit_hyperlink(&line, &config);
+ assert!(formatted.contains(&format!(
+ "https://github.com/dandavison/delta/commit/{}",
+ hash
+ )));
+
+ remove_file(git_config_path).unwrap();
+ }
+}