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"

Submodule pkg/arch deleted from b578e90bb6

Submodule pkg/centos deleted from 61bb5f4701

Submodule pkg/debian deleted from 824c52fafc

Submodule pkg/fedora deleted from 8fe1f037d2

Submodule pkg/opensuse deleted from c3399411ac

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