Hi, while the reftable backend is a recent addition to Git, it has been part of JGit since 2017 already. Given that there are essentially two different implementations of the reftable format now there is a very real risk of these two diverge and become incompatible with each other, which would be a shame. This patch series addresses this risk by introducing compatibility tests which assert that both Git and JGit can access reftables written by the respective other implementation. The patch series is structured as follows: - Patches 1-8 merge "install-docker-dependencies.sh" into "install-dependencies.sh". This is done so that both CI job flavors have the same dependencies and thus the same test coverage available without always having to maintain them both. - Patch 9 makes JGit available. - Patch 10 starts running backend-specific tests in all jobs, and patch 11 addresses a portability issue surfaced by this. - Patch 12 adds a very basic compatibility test suite for Git/JGit reftables. I mostly consider this as a proof of concept, it should likely be extended over time. These compatibility tests surface three findings: - JGit does not support reftables format v2, which was added to support the SHA256 object format. - JGit cannot read reflogs written by itself when starting from an unborn branch. This smells like a bug in JGit to me where it misinterprets reflog entries with a zero object ID as new OID, but I didn't dig any deeper yet. - JGit is incompatible with split indices because it cannot handle 'link' DIRC entries. This is unrelated to reftables though. I have tested the CI changes against both GitLab [1] and GitHub [2]. The macOS test failures on GitHub are caused by the recent curl regression. [1]: https://gitlab.com/gitlab-org/git/-/merge_requests/123 [2]: https://github.com/git/git/pull/1696 Patrick Patrick Steinhardt (12): ci: rename "runs_on_pool" to "distro" ci: expose distro name in dockerized GitHub jobs ci: allow skipping sudo on dockerized jobs ci: drop duplicate package installation for "linux-gcc-default" ci: convert "install-dependencies.sh" to use "/bin/sh" ci: merge custom PATH directories ci: merge scripts which install dependencies ci: make Perforce binaries executable for all users ci: install JGit dependency t06xx: always execute backend-specific tests t0610: fix non-portable variable assignment t0612: add tests to exercise Git/JGit reftable compatibility .github/workflows/main.yml | 8 +- .gitlab-ci.yml | 4 +- ci/install-dependencies.sh | 100 ++++++++++++++------- ci/install-docker-dependencies.sh | 46 ---------- ci/lib.sh | 14 ++- t/t0600-reffiles-backend.sh | 8 +- t/t0601-reffiles-pack-refs.sh | 9 +- t/t0610-reftable-basics.sh | 12 ++- t/t0612-reftable-jgit-compatibility.sh | 115 +++++++++++++++++++++++++ 9 files changed, 208 insertions(+), 108 deletions(-) delete mode 100755 ci/install-docker-dependencies.sh create mode 100755 t/t0612-reftable-jgit-compatibility.sh base-commit: 7774cfed6261ce2900c84e55906da708c711d601 -- 2.44.GIT