This builds on #1635 by: - Updating the comment about #1622, including by adding links to Git mailing list posts by Aarni Koskela, who discovered the bug that turns out to be the cause of this, and Patrick Steinhardt, who analyzed the bug and wrote a fix (currently in testing); and https://github.com/GitoxideLabs/gitoxide/issues/1622#issuecomment-2529580735, which summarizes that and reports on its connection to #1622. - Narrowing the partial suppression of the failing test code (which consists of conditionally using `parse_spec_no_baseline` instead of `parse_spec` in some assertions) so that it is only done if Git is at one of the versions that is known to be affected. If any future Git versions are affected, such as by the currently cooking patch not being merged as soon as I expect, then this could potentially fail on CI again. But that is something we would probably want to find out about.
Unified · Split
| @@ -95,11 +95,19 @@ mod find_youngest_matching_commit { · 94 unmodified lines | |||
| 95 | fn regex_matches() { | 95 | fn regex_matches() { |
| 96 | let repo = repo("complex_graph").unwrap(); | 96 | let repo = repo("complex_graph").unwrap(); |
| 97 | 97 | ||
| 98 | // On the full linux CI `test` workflow, archived baseline aren't used - instead fixtures will be re-evaluated. | 98 | // The full Linux CI `test` job regenerates baselines instead of taking them from archives. |
| 99 | // As of Git 2.47, its behaviour changed which makes the following assertion fail. | 99 | // In Git 2.47.0 (and 2.47.1), the traversal order differs, so some `parse_spec` assertions |
| 100 | // We decided to just ignore it until it's clear that this isn't a bug - obviously the traversal order changed. | 100 | // fail. This is a Git bug with a forthcoming fix. For now, we use `parse_spec_no_baseline` |
| 101 | let is_in_test_ci_workflow = is_ci::cached() && std::env::var_os("GIX_TEST_IGNORE_ARCHIVES").is_some(); | 101 | // for them when tests are run that way with known-affected Git versions. For details, see: |
| 102 | if is_in_test_ci_workflow { | 102 | // |
| 103 | // - https://lore.kernel.org/git/Z1LJSADiStlFicTL@pks.im/T/ | ||
| 104 | // - https://lore.kernel.org/git/Z1LtS-8f8WZyobz3@pks.im/T/ | ||
| 105 | // - https://github.com/GitoxideLabs/gitoxide/issues/1622#issuecomment-2529580735 | ||
| 106 | let skip_some_baselines = is_ci::cached() | ||
| 107 | && std::env::var_os("GIX_TEST_IGNORE_ARCHIVES").is_some() | ||
| 108 | && ((2, 47, 0)..(2, 47, 2)).contains(&gix_testtools::GIT_VERSION); | ||
| 109 | |||
| 110 | if skip_some_baselines { | ||
| 103 | assert_eq!( | 111 | assert_eq!( |
| 104 | parse_spec_no_baseline(":/mes.age", &repo).unwrap(), | 112 | parse_spec_no_baseline(":/mes.age", &repo).unwrap(), |
| 105 | Spec::from_id(hex_to_id("ef80b4b77b167f326351c93284dc0eb00dd54ff4").attach(&repo)) | 113 | Spec::from_id(hex_to_id("ef80b4b77b167f326351c93284dc0eb00dd54ff4").attach(&repo)) |
| @@ -116,7 +124,7 @@ mod find_youngest_matching_commit { · 10 unmodified lines | |||
| 116 | "None of 10 commits reached from all references matched regex \"not there\"" | 124 | "None of 10 commits reached from all references matched regex \"not there\"" |
| 117 | ); | 125 | ); |
| 118 | 126 | ||
| 119 | if is_in_test_ci_workflow { | 127 | if skip_some_baselines { |
| 120 | assert_eq!( | 128 | assert_eq!( |
| 121 | parse_spec_no_baseline(":/!-message", &repo).unwrap(), | 129 | parse_spec_no_baseline(":/!-message", &repo).unwrap(), |
| 122 | Spec::from_id(hex_to_id("55e825ebe8fd2ff78cad3826afb696b96b576a7e").attach(&repo)) | 130 | Spec::from_id(hex_to_id("55e825ebe8fd2ff78cad3826afb696b96b576a7e").attach(&repo)) |