GPT 5.5review1cd36be6 months agoHistory
199 lines · 6.3 KB · Rust
RawDownload
//! Some dates adjusted to be a year apart, but still 'c1' and 'c2' with the same date.use super::*;use crate::util::{fixture, odb_at};use gix_traverse::commit::simple::CommitTimeOrder; fn adjusted_dates_repo() -> crate::Result<(std::path::PathBuf, gix_odb::Handle)> {    let dir = fixture("make_traversal_repo_for_commits_with_dates.sh")?;    let odb = odb_at(dir.join(".git").join("objects"))?;    Ok((dir, odb))} #[test]fn head_breadth_first() -> crate::Result {    let (repo_dir, odb) = adjusted_dates_repo()?;     // Timestamps show b1c1 (978393600) is a year newer than c2 (946771200),    // explaining why date-order puts b1c1 before c2.    insta::assert_snapshot!(git_graph_with_time(&repo_dir)?, @r"        *   Oid(1) 1009929600 (HEAD -> main) m1b1        |\          | * Oid(2) 978393600 (branch1) b1c1        * | Oid(3) 946771200 c2        |/          * Oid(4) 946771200 c1        ");     let tip = hex_to_id("288e509293165cb5630d08f4185bdf2445bf6170"); // m1b1     // Git also shows `b1c1` first, making topo-order similar to date order,    // even though c2 *is* the first parent.    let expected = [        tip,        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1    ];     let result = traverse_both([tip], &odb, Sorting::BreadthFirst, Parents::All, [])?;    assert_eq!(result, expected);    Ok(())} #[test]fn head_date_order() -> crate::Result {    let (_repo_dir, odb) = adjusted_dates_repo()?;    // Graph with timestamps shown in `head_breadth_first`    let tip = hex_to_id("288e509293165cb5630d08f4185bdf2445bf6170"); // m1b1     // NewestFirst    let expected_newest = [        tip,        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1    ];    let result = traverse_both(        [tip],        &odb,        Sorting::ByCommitTime(CommitTimeOrder::NewestFirst),        Parents::All,        [],    )?;    assert_eq!(result, expected_newest);     // OldestFirst    let expected_oldest = [        tip,        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1    ];    let result = traverse_both(        [tip],        &odb,        Sorting::ByCommitTime(CommitTimeOrder::OldestFirst),        Parents::All,        [],    )?;    assert_eq!(result, expected_oldest);     Ok(())} #[test]fn head_date_order_with_cutoff() -> crate::Result {    let (_repo_dir, odb) = adjusted_dates_repo()?;    // Graph shown in `head_breadth_first`    let tip = hex_to_id("288e509293165cb5630d08f4185bdf2445bf6170"); // m1b1     let expected = [        tip,        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1    ];     for order in [CommitTimeOrder::NewestFirst, CommitTimeOrder::OldestFirst] {        let result = traverse_both(            [tip],            &odb,            Sorting::ByCommitTimeCutoff {                order,                seconds: 978393600, // =2001-01-02 00:00:00 +0000            },            Parents::All,            [],        )?;        assert_eq!(result, expected, "order = {order:?}");    }    Ok(())} #[test]fn head_date_order_with_cutoff_disabled() -> crate::Result {    let (_repo_dir, odb) = adjusted_dates_repo()?;    // Graph shown in `head_breadth_first`    let tip = hex_to_id("288e509293165cb5630d08f4185bdf2445bf6170"); // m1b1    let very_early = 878393600; // an early date before any commit     // NewestFirst with early cutoff (effectively disabled)    let expected_newest = [        tip,        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1    ];    let result = traverse_both(        [tip],        &odb,        Sorting::ByCommitTimeCutoff {            order: CommitTimeOrder::NewestFirst,            seconds: very_early,        },        Parents::All,        [],    )?;    assert_eq!(result, expected_newest);     // OldestFirst with early cutoff    let expected_oldest = [        tip,        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1        hex_to_id("bcb05040a6925f2ff5e10d3ae1f9264f2e8c43ac"), // b1c1    ];    let result = traverse_both(        [tip],        &odb,        Sorting::ByCommitTimeCutoff {            order: CommitTimeOrder::OldestFirst,            seconds: very_early,        },        Parents::All,        [],    )?;    assert_eq!(result, expected_oldest);     Ok(())} #[test]fn date_order_with_cutoff_is_applied_to_starting_position() -> crate::Result {    let (_repo_dir, odb) = adjusted_dates_repo()?;    // Graph shown in `head_breadth_first`    let tip = hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"); // c2     for order in [CommitTimeOrder::NewestFirst, CommitTimeOrder::OldestFirst] {        let graph = commit_graph(odb.store_ref());        let count = Simple::new([tip], &odb)            .sorting(Sorting::ByCommitTimeCutoff {                order,                seconds: 978393600, // =2001-01-02 00:00:00 +0000            })?            .commit_graph(graph)            .count();        assert_eq!(            count, 0,            "initial tips that don't pass cutoff value are not returned either"        );    }    Ok(())} #[test]fn head_date_order_first_parent_only() -> crate::Result {    let (_repo_dir, odb) = adjusted_dates_repo()?;    // Graph shown in `head_breadth_first`    let tip = hex_to_id("288e509293165cb5630d08f4185bdf2445bf6170"); // m1b1     let expected = [        tip,        hex_to_id("9902e3c3e8f0c569b4ab295ddf473e6de763e1e7"), // c2        hex_to_id("134385f6d781b7e97062102c6a483440bfda2a03"), // c1    ];     for order in [CommitTimeOrder::NewestFirst, CommitTimeOrder::OldestFirst] {        let result = traverse_both([tip], &odb, Sorting::ByCommitTime(order), Parents::First, [])?;        assert_eq!(result, expected, "order = {order:?}");    }    Ok(())}