mkosi: Replace submodules with our own thing

Unfortunately, git submodules break in all sorts of ways:

- Various github workflows (dependabot, github pages) try to do a shallow
clone of git submodules which does not work at all when the git repository
is hosted on pagure (https://pagure.io/pagure/issue/5453,
https://github.com/dependabot/dependabot-core/issues/9391).
- If the git forge hosting the git repository uses SHA256, then it breaks our
usage of it as a submodule as SHA256 repositories cannot be used as submodules
in SHA1 repositories (src.opensuse.org moved to SHA256 which broke our usage of
opensuse's systemd spec as a submodule).
- git submodules completely break usage of git worktrees.
- ...

Let's avoid all these issues by just doing our own home grown implementation of
git submodules. We lose the automatic dependabot updates this way but since dependabot
fails to run more often that not with submodules we don't really lose anything.
This commit is contained in:
Daan De Meyer 2024-05-30 16:24:42 +02:00
parent 6ecdd5ebd1
commit ba592dc715
16 changed files with 42 additions and 65 deletions

View file

@ -17,8 +17,3 @@ updates:
schedule:
interval: "monthly"
open-pull-requests-limit: 2
- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 2

20
.gitmodules vendored
View file

@ -1,20 +0,0 @@
[submodule "pkg/fedora"]
path = pkg/fedora
url = https://src.fedoraproject.org/rpms/systemd.git
branch = rawhide
[submodule "pkg/opensuse"]
path = pkg/opensuse
url = https://code.opensuse.org/package/systemd.git
branch = master
[submodule "pkg/debian"]
path = pkg/debian
url = https://salsa.debian.org/systemd-team/systemd.git
branch = debian/master
[submodule "pkg/centos"]
path = pkg/centos
url = https://git.centos.org/rpms/systemd.git
branch = c9s-sig-hyperscale
[submodule "pkg/arch"]
path = pkg/arch
url = https://gitlab.archlinux.org/archlinux/packaging/packages/systemd.git
branch = main

View file

@ -22,15 +22,6 @@ If adding a new source file, consider adding a matching test executable.
For features at a higher level, tests in `src/test/` are very strongly recommended.
If that is not possible, integration tests in `test/` are encouraged.
```shell
$ git config submodule.recurse true
$ git config fetch.recurseSubmodules on-demand
$ git config push.recurseSubmodules no
$ cp .git/hooks/pre-commit.sample .git/hooks/pre-commit
$ cp tools/git-submodule-update-hook.sh .git/hooks/post-rewrite
$ cp tools/git-submodule-update-hook.sh .git/hooks/post-checkout
```
Please always test your work before submitting a PR.
For many of the components of systemd testing is straightforward as you can simply compile systemd and run the relevant tool from the build directory.

View file

@ -4,6 +4,11 @@
Distribution=arch
[Content]
Environment=
GIT_URL=https://gitlab.archlinux.org/archlinux/packaging/packages/systemd.git
GIT_BRANCH=main
GIT_COMMIT=dc6c099e0785753c1c88b4adcbcbfc209a8d12e3
VolatilePackages=
systemd
systemd-libs

View file

@ -4,6 +4,11 @@
Distribution=centos
[Content]
Environment=
GIT_URL=https://git.centos.org/rpms/systemd.git
GIT_BRANCH=c9s-sig-hyperscale
GIT_COMMIT=8cf2aed0181920611421384f7374720db269d6c7
Packages=
kernel-modules # For squashfs
rpmautospec-rpm-macros

View file

@ -5,6 +5,11 @@ Distribution=|debian
Distribution=|ubuntu
[Content]
Environment=
GIT_URL=https://salsa.debian.org/systemd-team/systemd.git
GIT_BRANCH=debian/master
GIT_COMMIT=18201fa98d74172fa1a17242326e3275995cde13
VolatilePackages=
libnss-myhostname
libnss-mymachines

View file

@ -4,6 +4,11 @@
Distribution=fedora
[Content]
Environment=
GIT_URL=https://src.fedoraproject.org/rpms/systemd.git
GIT_BRANCH=rawhide
GIT_COMMIT=74810c5bc4fe7d872e54c253447ffd61bbc8839f
Packages=
btrfs-progs
compsize

View file

@ -7,6 +7,11 @@ Distribution=opensuse
InitrdInclude=initrd/
[Content]
Environment=
GIT_URL=https://src.opensuse.org/rpm/systemd
GIT_BRANCH=factory
GIT_COMMIT=28c9bef337dd47c88adc1d948cedfdc79c788e2955f17a534bd76da6419722dd
VolatilePackages=
systemd
systemd-boot

View file

@ -2,8 +2,21 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e
if [ -z "$(ls --almost-all "pkg/$DISTRIBUTION")" ] || [ -f "pkg/$DISTRIBUTION/.git" ]; then
PKG_SUBDIR="$(realpath "pkg/$DISTRIBUTION" --relative-to "$PWD")"
git submodule sync "$PKG_SUBDIR"
git submodule update --init "$PKG_SUBDIR"
if ((NO_SYNC)); then
exit 0
fi
PKG_SUBDIR="$(realpath --canonicalize-missing "pkg/$DISTRIBUTION" --relative-to "$PWD")"
if [[ -d "$PKG_SUBDIR/.git" ]] && [[ "$(git -C "$PKG_SUBDIR" rev-parse HEAD)" == "$GIT_COMMIT" ]]; then
exit 0
fi
if [[ ! -e "$PKG_SUBDIR" ]] || [[ -z "$(ls --almost-all "$PKG_SUBDIR")" ]]; then
git clone "$GIT_URL" --branch "$GIT_BRANCH" "$PKG_SUBDIR"
else
git -C "$PKG_SUBDIR" remote set-url origin "$GIT_URL"
git -C "$PKG_SUBDIR" fetch origin "$GIT_BRANCH"
fi
git -C "$PKG_SUBDIR" -c advice.detachedHead=false checkout "$GIT_COMMIT"

@ -1 +0,0 @@
Subproject commit b578e90bb68deaae28300300c57b6a99c916b201

@ -1 +0,0 @@
Subproject commit 61bb5f47014707a927bc033a21e8dbf685c5d2c5

@ -1 +0,0 @@
Subproject commit 824c52fafc3afda4c8ad3892596e8243c3b45c91

@ -1 +0,0 @@
Subproject commit 8fe1f037d21c9d68d96728843f22e5036d769521

@ -1 +0,0 @@
Subproject commit c3399411ac70a440ca9080d6df391eb897bba4e9

View file

@ -4,12 +4,6 @@ set -eu
cd "${MESON_SOURCE_ROOT:?}"
if [ -e .git ]; then
git config submodule.recurse true
git config fetch.recurseSubmodules on-demand
git config push.recurseSubmodules no
fi
ret=2
if [ -f .git/hooks/pre-commit.sample ] && [ ! -f .git/hooks/pre-commit ]; then
@ -19,16 +13,4 @@ if [ -f .git/hooks/pre-commit.sample ] && [ ! -f .git/hooks/pre-commit ]; then
ret=0
fi
if [ ! -f .git/hooks/post-rewrite ]; then
cp -p tools/git-submodule-update-hook.sh .git/hooks/post-rewrite
echo 'Activated post-rewrite hook'
ret=0
fi
if [ ! -f .git/hooks/post-checkout ]; then
cp -p tools/git-submodule-update-hook.sh .git/hooks/post-checkout
echo 'Activated post-checkout hook'
ret=0
fi
exit $ret

View file

@ -1,4 +0,0 @@
#!/bin/sh
# SPDX-License-Identifier: LGPL-2.1-or-later
exec git submodule update