1
1
mirror of https://github.com/Byron/gitoxide synced 2025-10-06 01:52:40 +02:00

Implement Display trait for reference name types

Co-authored-by: Byron <63622+Byron@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-09-27 20:20:07 +02:00
committed by Sebastian Thiel
parent 9c686d9bc5
commit b813339291
4 changed files with 95 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
//! Tests for Display implementations
#[cfg(test)]
mod display_tests {
use crate::{FullName, PartialName};
use std::convert::TryFrom;
#[test]
fn test_full_name_display() {
let full_name = FullName::try_from("refs/heads/main").unwrap();
assert_eq!(format!("{}", full_name), "refs/heads/main");
assert_eq!(full_name.to_string(), "refs/heads/main");
}
#[test]
fn test_full_name_ref_display() {
let full_name = FullName::try_from("refs/heads/main").unwrap();
let full_name_ref = full_name.as_ref();
assert_eq!(format!("{}", full_name_ref), "refs/heads/main");
assert_eq!(full_name_ref.to_string(), "refs/heads/main");
}
#[test]
fn test_partial_name_display() {
let partial_name = PartialName::try_from("heads/main").unwrap();
assert_eq!(format!("{}", partial_name), "heads/main");
assert_eq!(partial_name.to_string(), "heads/main");
}
#[test]
fn test_partial_name_ref_display() {
let partial_name = PartialName::try_from("heads/main").unwrap();
let partial_name_ref = partial_name.as_ref();
assert_eq!(format!("{}", partial_name_ref), "heads/main");
assert_eq!(partial_name_ref.to_string(), "heads/main");
}
#[test]
fn test_display_with_various_ref_types() {
// Test various types of refs
let refs = vec![
"refs/heads/main",
"refs/remotes/origin/main",
"refs/tags/v1.0.0",
"HEAD",
];
for ref_name in refs {
let full_name = FullName::try_from(ref_name).unwrap();
let full_name_ref = full_name.as_ref();
assert_eq!(format!("{}", full_name), ref_name);
assert_eq!(format!("{}", full_name_ref), ref_name);
}
}
#[test]
fn test_display_with_partial_names() {
let partial_names = vec![
"main",
"heads/main",
"remotes/origin/main",
"tags/v1.0.0",
];
for partial_name_str in partial_names {
let partial_name = PartialName::try_from(partial_name_str).unwrap();
let partial_name_ref = partial_name.as_ref();
assert_eq!(format!("{}", partial_name), partial_name_str);
assert_eq!(format!("{}", partial_name_ref), partial_name_str);
}
}
}

View File

@@ -73,6 +73,12 @@ impl std::fmt::Display for FullName {
}
}
impl std::fmt::Display for FullNameRef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(&self.0, f)
}
}
impl FullNameRef {
/// Interpret this fully qualified reference name as partial name.
pub fn as_partial_name(&self) -> &PartialNameRef {

View File

@@ -213,3 +213,6 @@ pub enum TargetRef<'a> {
/// A ref that points to another reference by its validated name, adding a level of indirection.
Symbolic(&'a FullNameRef),
}
#[cfg(test)]
mod display_tests;

View File

@@ -266,6 +266,18 @@ impl convert::TryFrom<BString> for PartialName {
}
}
impl std::fmt::Display for PartialName {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(&self.0, f)
}
}
impl std::fmt::Display for PartialNameRef {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
std::fmt::Display::fmt(&self.0, f)
}
}
/// Note that this method is disagreeing with `gix_validate` as it allows dashes '-' for some reason.
/// Since partial names cannot be created with dashes inside we adjusted this as it's probably unintended or git creates pseudo-refs
/// which wouldn't pass its safety checks.