Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.1.38 many new failing tests #1713

Closed
dvzrv opened this issue Oct 18, 2023 · 3 comments · Fixed by #1715
Closed

3.1.38 many new failing tests #1713

dvzrv opened this issue Oct 18, 2023 · 3 comments · Fixed by #1715

Comments

@dvzrv
Copy link

dvzrv commented Oct 18, 2023

Hi! I maintain this package for Arch Linux. Many new failing test with 3.1.38:

=========================== short test summary info ============================
FAILED ../../../../dev/test/test_docs.py::Tutorials::test_references_and_objects
FAILED ../../../../dev/test/test_docs.py::Tutorials::test_submodules - IndexE...
FAILED ../../../../dev/test/test_repo.py::TestRepo::test_clone_from_with_path_contains_unicode
FAILED ../../../../dev/test/test_repo.py::TestRepo::test_submodule_update - g...
FAILED ../../../../dev/test/test_repo.py::TestRepo::test_submodules - Asserti...
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_add_clone_multi_options_argument
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_add_no_clone_multi_options_argument
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_base_rw - ...
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_branch_renames
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_depth - gi...
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_git_submodule_compatibility
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_remove_norefs
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_rename - g...
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_root_module
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_update_clone_multi_options_argument
FAILED ../../../../dev/test/test_submodule.py::TestSubmodule::test_update_no_clone_multi_options_argument
==== 16 failed, 468 passed, 42 skipped, 2 deselected, 5 warnings in 47.69s =====

python-gitpython-3.1.38-1-x86_64-check.log

As I neither use this package, nor really know how to fix these tests (or have the time to do so), I'll disable them.

@Byron
Copy link
Member

Byron commented Oct 18, 2023

Thanks for reporting.

Is it possible to add Arch Linux to CI here? If you happen to know existing GitHub CI setups, I'd appreciate a pointer so maybe one day this platform can also be tested here.

Maybe this is also related to recent changes though, so CC @EliahKagan .

EliahKagan added a commit to EliahKagan/GitPython that referenced this issue Oct 18, 2023
This has actions/checkout no longer automatically clone submodules
in the CI test workflows. This change is for the purpose of
reproducing gitpython-developers#1713, to allow the forthcoming fix for it to be
tested.

However, continuing to rely on init-tests-after-clone.sh to get the
submodules would serve as a kind of regression testing for gitpython-developers#1713.
So it is unclear at this time if and when this change should be
undone.
EliahKagan added a commit to EliahKagan/GitPython that referenced this issue Oct 18, 2023
Since 7110bf8 (in gitpython-developers#1693), "git submodule update --init --recursive"
was not run on CI, on the mistaken grounds that the CI test
workflows would already have taken care of cloning all submodules
(ever since 4eef3ec when the "submodules: recursive" option was
added to the actions/checkout step).

This changes the init-tests-after-clone.sh script to again run that
command unconditionally, including on CI. The assumption that it
wasn't needed on CI was based on the specific content of
GitPython's own GitHub Actions workflows. But this disregarded that
the test suite is run on CI for *other* projects: specifically, for
downstream projects that package GitPython (gitpython-developers#1713).

This also brings back the comment from fc96980 that says more about
how the tests rely on submodules being present (specifically, that
they need a submodule with a submodule). However, that is not
specifically related to the bug being fixed.
@EliahKagan
Copy link
Contributor

I'm pretty sure I inadvertently introduced this bug in #1693, when I had init-tests-after-clone.sh refrain from cloning submodules when it detected it was running on CI, giving the current code:

# The tests need submodules. (On CI, they would already have been checked out.)
if ! ci; then
git submodule update --init --recursive
fi

I reasoned, incorrectly, that this was safe, due to the CI test workflows in this repository (and thus forks, reuploads, etc.) taking care of cloning submodules (this shows pythonpackage.yml, but cygwin-test.yml has the same thing):

- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive

The problem is that checking for CI--even conservatively, as done here--is not the same as checking for CI workflows originating in this repository:

ci() {
# For now, check just these, as a false positive could lead to data loss.
test -n "${TRAVIS-}" || test -n "${GITHUB_ACTIONS-}"
}

Confusing the two does not cause data loss--any CI will want to skip the interactive prompt--but it does cause brittleness. GitPython's tests can be run on CI through workflows unrelated to the ones we have here, and projects distributing downstream packages of GitPython, including operating systems such as Arch Linux, are examples of where it makes sense to do that.

init-tests-after-clone.sh is intended to be sufficient, after an ordinary (non-shallow) clone, to get a cloned repository to a state where the tests are ready to be run. I think this is both an intended and reasonable assumption from:

GitPython/README.md

Lines 120 to 122 in 6f765a2

_Important_: Right after cloning this repository, please be sure to have executed
the `./init-tests-after-clone.sh` script in the repository root. Otherwise
you will encounter test failures.

The need to clone submodules is intentionally not mentioned in README.md, because it is intended that the init script take care of that whenever it is necessary. Therefore, this really is a regression in GitPython's tests--or more precisely in code that supports them--which I introduced in #1693 due to a mistake about what we are in practice checking for when we check for CI.

The fix should be simple: the init script should unconditionally clone submodules. More granular solutions that still avoid cloning submodules on some CI configurations or if they appear already present are possible, but if that is to be done then I suggest deferring it, so the simpler fix can be applied sooner. I've proposed that fix in #1715, tested it (though not with Arch Linux), and included a more comprehensive analysis in the description.

@Byron
Copy link
Member

Byron commented Oct 18, 2023

This issue should now be fixed with the latest release. Please let us know if that's not the case here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging a pull request may close this issue.

3 participants